2013-08-12 2 views

답변

3

CQL이 테이블 수준 복제 요인을 지원하지 않는다고 생각합니다 (사용 가능한 create table options 참조). 다음에는 복제가 없습니다 그 키 공간에서 생성 된 모든 테이블

CREATE KEYSPACE <ksname> 
     WITH replication = {'class':'<strategy>' [,'<option>':<val>]}; 

    Example: 
    To create a keyspace with SimpleStrategy and "replication_factor" option 
    with a value of "1" you would use this statement: 
     CREATE KEYSPACE <ksname> 
      WITH replication = {'class':'SimpleStrategy', 'replication_factor':1}; 

: 하나 개의 대안은 = 복제 팩터 키 - 공간을 만드는 일입니다.

각 노드마다 테이블을 갖고 싶다면 Cassandra가 직접 지원하지 않는다고 생각합니다. 한 가지 해결 방법은 각 클러스터가 하나의 노드 만 갖는 각 노드에 대해 추가 Cassandra 클러스터를 시작하는 것입니다.

+0

임 기대 노드에 매핑 할 수 있도록 토큰 선택을 속여 케이스. ''replication_factor ': 1'로 다른 키 공간을 생성하는 것은 깔끔한 해결 방법입니다. – Jacob

+1

@ Jacob : 실제로 저는 카산드라를 처음 접했습니다. 그러나 내가 아는 한'create table' 연산자는'replication factor'와 같은 옵션을 가지고 있지 않습니다. – keelar

+0

이것은 데이터를 고유하게 만 만들지 만 데이터는 "해당 특정 서버"에 매핑되지 않습니다. 파티셔에 따라 배포됩니다. – omnibear

1

난 당신이 그렇게 할 이유를 잘 모르겠지만, 여기에 내 걸릴 수 있습니다 : 당신의 카산드라 클러스터의 노드간에 데이터가 행 키에 의해 결정되는 실제의

배포.

복제 계수를 1로 설정한다고해서 하나의 열 패밀리/테이블의 모든 데이터가 1 ​​노드에 저장되는 것은 아닙니다. 데이터는 여전히 행 키에 따라 분할/분산됩니다.

정확하게 데이터가 저장되는 곳 is determined by the row key along with the partitioner as documented here. 이것은 DDBS의 고유 한 부분이며이를 강제하는 쉬운 방법은 없습니다. 내가 생각할 수있는

유일한 방법은 하나 개의 노드에 하나 개의 테이블에 하나 개의 서버 phisically에 대한 모든 데이터를 가지고있다 :

  1. 사용하는 하나의 행 서버 당 키 생성 (매우) 폭 행 (어쩌면 복합 열 키)
  2. 를 사용하여 모든 행 키 토큰이이이었다 그래서 만약 내가 확실하지 않았다 카산드라 아주 새로운 (http://wiki.apache.org/cassandra/Operations#Token_selection)