간단한 예를 들어 설명하겠습니다. cassandra의 키 공간은 RDBMS의 데이터베이스 스키마 이름과 동일합니다.
우선은 키 스페이스를 만들 - userid
은 파티션 키이며, 이름은 키를 클러스터링되어,이 예에서는
CREATE TABLE USER_BY_USERID(
userid int,
name text,
email text,
PRIMARY KEY(userid, name)
) WITH CLUSTERING ORDER BY(name DESC);
-
CREATE KEYSPACE MYKEYSPACE WITH REPLICATION = {
'class' : 'SimpleStrategy',
'replication_factor' : 3
};
간단한 테이블을 만들 수 있습니다. 파티션은 행 키라고도하며,이 키는 저장할 노드 행을 판별합니다.
귀하의 첫 번째 질문 -이 데이터가 분할되는 방식을 이해할 수 없습니다입니다
?
데이터는 파티션 키에 따라 파티션됩니다. 기본적으로 C *는 Murmur3partitioner
을 사용합니다. cassandra.yaml 구성 파일에서 파티셔를 변경할 수 있습니다. 파티션이 어떻게 발생하는지는 구성에 따라 다릅니다. 각 노드에 대해 토큰의 범위를 지정할 수 있습니다 (예 : cassandra.yaml 구성 파일 아래를보십시오). 귀하의 질문에 6 노드 양식을 지정했습니다. 노드 0
cassandra.yaml : 노드 1
cluster_name: 'MyCluster'
initial_token: 0
seed_provider:
- seeds: "198.211.xxx.0"
listen_address: 198.211.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch
cassandra.yaml : 기지국 2
cluster_name: 'MyCluster'
initial_token: 3074457345618258602
seed_provider:
- seeds: "198.211.xxx.0"
listen_address: 192.241.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch
cassandra.yaml :
cluster_name: 'MyCluster'
initial_token: 6148914691236517205
seed_provider:
- seeds: "198.211.xxx.0"
listen_address: 37.139.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch
.... ... Node3 ...... Node4 ....- (위의 예 사용자 ID에 - 1)
INSERT INTO USER_BY_USERID VALUES(
1,
"Darth Veder",
"[email protected]"
);
파티션 설정 파티션 키의 해시를 계산하며,
cluster_name: 'MyCluster'
initial_token: {some large number}
seed_provider:
- seeds: "198.211.xxx.0"
listen_address: 37.139.xxx.0
rpc_address: 0.0.0.0
endpoint_snitch: RackInferringSnitch
이 삽입 문을 수 있습니다 : 노드 5
는
cassandra.yaml 이 행이 저장 될 노드를 결정합니다. 계산 된 해시가 12345라고하면,이 행은 노드 0에 저장됩니다 (위의 구성에서 Node0의 initial_token 값을 찾습니다).
전체 cassandra.yaml 구성 configCassandra_yaml_r
당신이 deployCalcTokens을 통해 갈 수있는 토큰을 생성하는 방법을 알고 있습니다.
두 번째 질문 - 데이터가
을 복제됩니다 어떻게?
복제 전략 및 복제 계수에 따라 데이터는 각 노드에서 복제됩니다. 키 공간을 작성하는 동안 복제 인수 및 복제 전략을 지정해야합니다. 예를 들어 위의 예에서 복제 전략으로 SimpleStrategy
을 사용했습니다. 이 전략은 소규모 클러스터에 적합합니다. 지질 학적으로 분산 된 응용 프로그램의 경우 NetworkTopologyStrategy
을 사용할 수 있습니다. replication_factor는 만들려는 행의 복사본 수를 지정합니다.이 예제에서는 각 행의 복사본이 세 개 생성됩니다. 간단한 전략으로 카산드라는 시계 방향을 사용하여 행을 복사합니다.
위의 예에서 행은 Node0에 저장되고 Node1과 Node2에는 동일한 노드가 복사됩니다. 의 또 다른 예를 보자 -
INSERT INTO USER_BY_USERID VALUES(
448454,
"Obi wan kenobi",
"[email protected]"
);
사용자 ID 448454를 들어, 계산 된 해시 3074457345618258609 말, 그래서 노드 2에 복사 될 수도 있습니다 (위의 구성에서 노드 2의 initial_token 값 확인) 및 저장이 행이 될 것입니다 노드 3과 노드 4에 시계 방향으로 (우리는 복제 계수 3을 지정 했으므로 Noe2, Node3, Node4의 세 복사본 만 지정했다는 것을 기억하십시오).
희망이 도움이됩니다.
감사합니다. @Gunwant. 당신의 대답은 많은 도움이되었습니다. –