不同键空间/表的Cassandra分区位置

不同键空间/表的Cassandra分区位置,cassandra,Cassandra,有一个相关的问题是,同一密钥空间中的表具有相同的分区密钥,从而导致这些分区的数据位于同一节点上 如果键空间是不同的,并且我们有相同的分区策略,那么会不会有两个具有相同分区键的记录(来自不同的键空间)的数据在同一个节点上 简化示例: cqlsh> CREATE KEYSPACE test_1 WITH replication = {'class': 'SimpleStrategy', 'replication_factor': '1'} AND durable_writes = true;

有一个相关的问题是,同一密钥空间中的表具有相同的分区密钥,从而导致这些分区的数据位于同一节点上

如果键空间是不同的,并且我们有相同的分区策略,那么会不会有两个具有相同分区键的记录(来自不同的键空间)的数据在同一个节点上

简化示例:

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

似乎总是返回相同的节点。

是的,它们将是相同的。两个表的标记都是3(id),这将是相同的环位置。如果复制策略更改,它只会更改哪些副本,但第一个副本将是相同的,除非存在一些DC限制。

所以键空间在计算哈希时不起任何作用?我想我可以通过查看代码找到这一点,但是如果这里有这个信息就好了
select token(id),id from test1.t
将打印出该模式的所有令牌和现有分区的id。令牌不会根据复制因子而改变,但它可能会影响在使用网络拓扑(某些DC没有副本)等时选择哪些副本。但是使用SimpleStrategy非常简单(注意:不应该在生产中真正使用SimpleStrategy)