전통적인 SQL 데이터베이스 대신 Cassandra를 사용하는 새로운 응용 프로그램을 설계하려고합니다. 클러스터링 및 수평 확장 기능은 특히 유스 케이스에 유용합니다.카산드라에 유연한 스키마 저장
필자는 서로 다른 레코드가 여러 개있는 상황이 있습니다. 예를 들어, 다른 스포츠 정보를 저장하는 경우, 두 팀, 선수, 하프 시간과 풀 타임 이후의 결과, 레드 카드, 옐로우 카드 등의 정보를 저장하는 축구 용으로 테니스 경기라면 두명의 상대방, 세트 수 등
각 스포츠 (로드가 있음)에 대한 테이블을 갖고 싶지는 않으며 매번 데이터베이스를 수정하지 않고도 새로운 스포츠를 추가하고 싶을 것입니다. . 이 정보가 레코드의 스포츠 유형에 따라 임의로 변경 될 수있는 곳에서 유연하게 유지하려고합니다.
카산드라에서 어떻게 이런 종류의 정보를 모델링하는 것이 가장 좋습니까? 나는 이것이 MongoDB와 같은 '문서'지향 데이터베이스가 아니라는 것을 알고 있습니다. 그러나 나머지 응용 프로그램에서는 Cassandra가 제공하는 '테이블과 같은'구조가 이상적입니다.
텍스트 필드에 JSON 문자열로 저장하고 응용 프로그램 수준에서 처리 할 수 있다는 것을 알고 있습니다.하지만 JSON 문자열 안의 필드를 일괄 쿼리하기위한 미래의 요구 사항이 제한됩니다 (예 : 모든 일치 그에게는 특정한 심판이 있었다).
지도로 저장하는 또 다른 방법이 있다는 것을 알고 있습니다. 그러나 인덱스는 조금 제한된 것처럼 보입니다. 모든 예제에서는 값이 아닌 맵 키를 기반으로 인덱스를 찾는 것처럼 보입니다. 그리고 어떤 사람들은지도에서 색인의 사용을 너무 방해하는 것 같습니다.
어떤 옵션이 있습니까?
"어떤 옵션이 있습니까?" 그럼 당신은 이미 그것을 대답했습니다. – OrangeDog
저는 카산드라를 "테이블과 같은"것이 아니라 키 - 값 (실제로는 무엇인가)으로 생각할 것을 제안합니다. 또한 맵을 중첩 할 수는 없지만 불투명 한 JSON-as-text 필드를 사용할 수는 있습니다. – OrangeDog
@OrangeDog JSON 구조체는 실제로는 평면 일 수 있으므로 문제는되지 않습니다. 내 질문은지도를 사용하여 위험한 길을 몰고 갈 것인지 여부, 내가 읽지 않은 단점이 있는지, 그리고 다른 옵션이 있는지 여부에 더 많은 것을 할 수 있습니다. – jbx