2014-10-22 6 views
0

http://www.ibm.com/developerworks/library/os-apache-cassandra/의 예제를 사용하십시오. 우리가 책과 태그라는 두 개의 실체를 가지고 있다고 가정 해보자. 책은 여러 개의 태그를 가지고 있으므로 그들 사이의 관계는 1 : M입니다.cassandra : 일치하지 않는 열 패밀리

이 기사에 따르면 BooksTags2BooksIndex의 두 열을 생성해야합니다. 전자는 책에 대한 모든 정보 (모든 태그 포함)를 저장하는 반면, 후자는 태그에서 책으로 매핑하는 색인이므로 주어진 태그에 대해 해당 태그가있는 모든 책을 빨리 찾을 수 있습니다. 이 모든 것이 잘 생겼다. 그러나 질문이 있습니다 :

db에 새 책을 추가하는 방법을 고려하십시오. (1) 열 Books에 새 행을 추가하십시오 (2) Tags2BooksIndex을 업데이트하여 관련된 모든 태그 행에 새 책을 추가하십시오. 이 책.

단계 (1)을 완료 한 후 2 초가 지나면 새 북행은 이동 예정인 모든 노드에 복제되었으며 단계 (2)는 계속 진행 중입니다. 이제이 새로운 책 행을 books에서 읽고 태그를 가져온 다음이 태그를 사용하여 Tags2BooksIndex을 확인하면 Tags2BooksIndex에서 새 책을 찾을 수 없거나 아직 완전히 업데이트되지 않았거나 업데이트가되지 않았을 수 있습니다. 아직 모든 복제 노드에 복제되지 않았습니다.

어떻게 이런 상황을 처리 할 수 ​​있습니까? 2 초를 2 밀리 초로 바꾸면 여전히 불일치하는 시간 창이 있습니다. 나는 그런 상황을 다루는 "올바른/실제적인"방법을 알고 싶다.

답변

0

카산드라는 CAP의 AP쪽에 속합니다. 일관성을 희생합니다. cassandra 2.x의 배치 문과 함께 도움을 줄 수있는 방법이 있습니다. http://www.datastax.com/documentation/cql/3.1/cql/cql_reference/batch_r.html

실제 질문은 이러한 불일치가 무엇일까요? 검색이 태그에 대한 새 책을 돌려주지 않을 2 분짜리 창이 있습니까? 그게 비참한가요? 내결함성이있는 분산 시스템에서는 종종 파티션이 불일치하거나 파티션이 발생할 수 있으므로 가용성을 희생해야합니다. 데이터 모델에 두 개의 개별적인 원자 변이가 필요한 경우 일괄 처리 문이 도움이 될 수 있지만 약간의 가용성이 필요합니다. 약간의 불일치가 있어도 괜찮 으면 사용 가능한 상태로 유지됩니다. 그것은 수용 가능한지 여부에 대한 구체적인 비즈니스 요구 사항을 결정합니다.