Cassandra中的分区密钥
如果在我的cassandra CF中,RowKey是(a,b,c),我的数据是高度倾斜的,基数是a,比如说只有一个。如果复制因子为1,整个数据是否会驻留在cassandra群集的单个节点上Cassandra中的分区密钥,cassandra,Cassandra,如果在我的cassandra CF中,RowKey是(a,b,c),我的数据是高度倾斜的,基数是a,比如说只有一个。如果复制因子为1,整个数据是否会驻留在cassandra群集的单个节点上 另外,如果该节点已关闭,我将得到什么异常 如果您只有一个分区键和RF 1,那么如果行散列到的节点关闭,您将无法访问数据。您将得到一个不可用的异常 主键((a),b,c)或主键(a,b,c)意味着只有a决定数据驻留在哪个节点上 Primary Key((a,b),c)意味着您正在使用复合键以及a和b的组合来确
另外,如果该节点已关闭,我将得到什么异常 如果您只有一个分区键和RF 1,那么如果行散列到的节点关闭,您将无法访问数据。您将得到一个不可用的异常
主键((a),b,c)
或主键(a,b,c)
意味着只有a
决定数据驻留在哪个节点上
Primary Key((a,b),c)
意味着您正在使用复合键以及a
和b
的组合来确定节点所在的位置
主键((a,b,c))
表示使用a
、b
和c
的完整组合来确定正确的节点
不在第一组内括号中的所有变量都充当聚类键,并确定一行中数据的排序顺序,但不确定该行放在哪个节点上 如果您只有一个分区键和RF 1,那么如果行散列到的节点关闭,您将无法访问数据。您将得到一个不可用的异常
主键((a),b,c)
或主键(a,b,c)
意味着只有a
决定数据驻留在哪个节点上
Primary Key((a,b),c)
意味着您正在使用复合键以及a
和b
的组合来确定节点所在的位置
主键((a,b,c))
表示使用a
、b
和c
的完整组合来确定正确的节点
不在第一组内括号中的所有变量都充当聚类键,并确定一行中数据的排序顺序,但不确定该行放在哪个节点上 我不知道你的模式。如果您发布与您的问题相关的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(例如),这三行将转到节点A
。如果value2
的哈希值为29(例如),则此行将转到节点B
如果该节点关闭,我将得到什么异常?
让我们考虑节点A是否下降,节点的其余部分是否上升。
select*from demodable在class='value1'
不起作用的地方,您将得到不可用异常
但是,select*from demodable,其中a='value2'
将起作用,因为它位于节点B上
不幸的是,
select*from demograble
也将不起作用。因为节点a中可能有一些记录。因此,如果任何一个节点的复制为1,则“全选”查询将无法工作。我不知道您的架构。如果您发布与您的问题相关的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(例如),这三行将转到节点A
。如果value2
的哈希值为29(例如),则此行将转到节点B
如果该节点关闭,我将得到什么异常?
让我们考虑节点A是否下降,节点的其余部分是否上升。
select*from demodable在class='value1'
不起作用的地方,您将得到不可用异常
但是,select*from demodable,其中a='value2'
将起作用,因为它位于节点B上
不幸的是,
select*from demograble
也将不起作用。由于节点a中可能有一些记录。因此,如果任何一个节点的复制为1,则“全选”查询将无法工作。感谢RussS的回答。在这里