有一个相关的问题,即同一键空间中的表具有相同的分区键,导致这些分区的数据位于同一节点上。
如果键空间不同并且我们有相同的分区策略怎么办:具有相同分区键的两个记录(来自不同的键空间(的数据会在同一节点上吗?
简化示例:
cqlsh> CREATE KEYSPACE test_1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
cqlsh> CREATE KEYSPACE test_2 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;
cqlsh> CREATE TABLE test1.t (id int, val int, PRIMARY KEY(id));
cqlsh> CREATE TABLE test2.t (id int, val int, PRIMARY KEY(id));
cqlsh> INSERT INTO test1.t (id, val) VALUES (1,1);
cqlsh> INSERT INTO test2.t (id, val) VALUES (1,1);
现在test1.t(1,1(是否与test2.t(1,1(位于同一数据节点上?
我尝试手动处理一些记录并检查
nodetool getendpoints test1 t 1
nodetool getendpoints test2 t 1
似乎总是返回相同的节点。
是的,它们是一样的。两个表的标记是 murmur3(id(,这将是相同的环位置。如果复制策略发生更改,它只会更改哪些副本,但除非有一些 DC 限制,否则第一个副本将是相同的。