【问题标题】:Partition Key in CassandraCassandra 中的分区键
【发布时间】:2014-12-02 23:51:34
【问题描述】:

如果在我的 cassandra CF 中,RowKey 是 (a, b, c) 并且我的数据高度偏斜,并且存在基数,假设只有一个。如果我的复制因子为 1,整个数据是否会驻留在我的 cassandra 集群的单个节点上?

另外,如果该节点已关闭,我会得到什么异常?

【问题讨论】:

  • 行键是什么意思。你是说主键?发布表的 CQL DDL 可能更清楚。

标签: cassandra


【解决方案1】:

如果您只有一个分区键和 RF 1,并且该行散列到的节点已关闭,您将无法访问您的数据。你会得到一个不可用的异常。

http://www.datastax.com/drivers/java/2.1/com/datastax/driver/core/exceptions/UnavailableException.html

Primary Key ((a),b,c)Primary Key (a,b,c) 表示只有a 决定数据驻留在哪个节点上。

Primary Key ((a,b),c) 表示您正在使用复合键,ab 的组合决定了节点的位置。

Primary key ((a,b,c)) 表示使用abc 的完整组合来决定正确的节点。

所有不在第一组内括号中的变量都充当聚类键,并确定数据的排序顺序行中,但不决定该行放置在哪个节点上。

【讨论】:

  • 感谢 RussS 的回答。在这种情况下,整个数据会驻留在一个节点上吗?行键的 'b' 和 'c' 不会在决定数据去往哪个节点上起任何作用吗?
  • 更新了答案。只有部分复合分区键会影响节点放置。
【解决方案2】:

我不知道您的架构。如果您发布与您的问题相关的 CQL DDL 和 cassandra.yaml 配置,解决方案将很清楚。假设,如果您的集群有 4 个节点(节点 A、B、C、D)且复制因子为 1,则将分区器作为任何随机分区器,并且您的架构如下所示,您可以参考答案。

CREATE TABLE demotable(
    a text,
    b text,
    c text,
    d text,
    PRIMARY KEY(a,b,c)
);

在上述架构中,分区键为a,集群键为b。对于每次插入,分区键将确定要插入的行的位置。假设,节点 A 持有 0-25 范围的分区键,节点 B 持有 26-50 范围的分区键,节点 C 持有 51-75 范围的分区键,节点 D 持有分区键范围>76。考虑以下插入语句,

insert into demotable (a,b,c,d) values ('value1','value100','value101','value102','value103');
insert into demotable (a,b,c,d) values ('value1','value200','value201','value202','value203');
insert into demotable (a,b,c,d) values ('value1','value300','value301','value302','value303');
insert into demotable (a,b,c,d) values ('value2','value400','value401','value402','value403');

前三个查询的分区键为 value1,第四个查询的分区键为 value2。如果 value1 的哈希值为 12(仅作为示例),则这三行将转到 Node A。如果 value2 的哈希值为 29(仅作为示例),则此行将转到 Node B

If that node is down, What exception will i get?

让我们考虑节点 A 是否已关闭,而节点的其余部分是否已启动。

select * from demotable where a='value1' 不会工作,你会得到 Unavailable Exception

但是,select * from demotable where a='value2' 将工作,因为它驻留在节点 B 上。

不幸的是,select * from demotable 也无法正常工作。因为可能有机会在节点 A 中有一些记录。因此,如果任何一个节点因复制为 1 而关闭,则全选查询将不起作用。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-07-18
    • 2015-06-21
    • 2018-09-22
    • 2014-09-23
    • 1970-01-01
    • 1970-01-01
    • 2018-02-14
    • 2016-12-21
    相关资源
    最近更新 更多