【问题标题】:Cassandra partition locations for different keyspaces/tables不同键空间/表的 Cassandra 分区位置
【发布时间】:2018-08-28 11:54:53
【问题描述】:

有一个相关问题是关于同一键空间中的表具有相同的分区键,导致这些分区的数据在同一个节点上。

如果 keyspace 不同而我们有相同的分区策略会怎样:具有相同分区 key 的两条记录(来自不同的 keyspace)是否会将它们的数据放在同一个节点上?

简化示例:

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

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

【问题讨论】:

    标签: cassandra


    【解决方案1】:

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

    【讨论】:

    • 所以键空间在计算哈希中没有任何作用?我想我可以通过查看代码找到这个,但是在这里有这个信息会很好
    • select token(id), id from test1.t 将打印出该模式的所有令牌和现有分区的 ID。令牌不会根据复制因子而改变,但它可能会影响在使用诸如网络拓扑之类的东西时选择哪些副本,其中一些 DC 具有零副本等,但使用 SimpleStrategy 它非常简单(注意:不应该在生产中真正使用 SimpleStrategy )
    猜你喜欢
    • 2017-08-11
    • 1970-01-01
    • 2018-11-12
    • 1970-01-01
    • 2019-04-23
    • 2019-05-19
    • 2020-10-05
    • 1970-01-01
    • 2020-10-30
    相关资源
    最近更新 更多