Cassandra 卡桑德拉的数据分布

Cassandra 卡桑德拉的数据分布,cassandra,Cassandra,我听说过卡桑德拉及其发行版。实际上想知道数据在整个集群中是如何分布的吗?我的意思是Cassandra如何决定哪些节点有哪些数据?负责任何给定数据段的节点集(一个或多个)由以下因素确定: 行键(数据按行键进行分区) 复制因子 复制策略 重要的是要了解,Cassandra不会根据不断变化的特征(如当前负载、哪些节点处于上升或下降状态,或者您的客户端与哪个节点通信)来更改给定行键的副本集 有关更多详细信息,请浏览了解cassandra中的一个分区都位于一个节点上,而其他东西(如开源playorm

我听说过卡桑德拉及其发行版。实际上想知道数据在整个集群中是如何分布的吗?我的意思是Cassandra如何决定哪些节点有哪些数据?

负责任何给定数据段的节点集(一个或多个)由以下因素确定:

  • 行键(数据按行键进行分区)
  • 复制因子
  • 复制策略
重要的是要了解,Cassandra不会根据不断变化的特征(如当前负载、哪些节点处于上升或下降状态,或者您的客户端与哪个节点通信)来更改给定行键的副本集


有关更多详细信息,请浏览

了解cassandra中的一个分区都位于一个节点上,而其他东西(如开源playorm For cassandra项目)中的所有节点上都有一个分区,因此在访问单个分区中的大量记录时,可以获得更多的磁盘并行性,这一点也很重要。如果您需要从一个分区获取500k条记录,您可能不想使用cassandra分区,而是像PlayOrm一样使用您自己的虚拟分区


如果您了解HastTable数据结构以及Hashtable中如何进行哈希运算,那么这非常简单

哈希表 第1步。 基本上,哈希表中键的索引是如何确定的

index = hashfunc(key_you_want_to_distribute) % array_size
寻找细节

第2步。 然后,要检索所需的数据,只需为其提供所需的值。它将为该值创建哈希并查找该索引

卡桑德拉 它在Distribute Hashtables/Cassandra中的工作方式相同

步骤1。在cassandra中,您必须指定要在记录中包含哪些字段以创建哈希。 比如说,如果您有一个表
用户
。您可能希望按用户的
用户名
分发用户,因此您决定将其作为主键

您选择创建散列的字段在Cassandra world中称为分区键,因为它是对记录进行分区的决定因素

然后,Cassandra为要插入的记录创建哈希,然后根据节点/机器的范围分发该记录

假设您有3个节点,哈希范围如下所示

node1 | 1    - 2000
node2 | 2000 - 4000
node3 | 4000 - 6000
例如,见下表,我给出了随机散列来简化它。Cassandra在real中使用杂音3散列

username  | hash(example) | which node it goes to  |
----------|---------------|------------------------|
prayagupd | 1             | node1                  |
mike      | 3000          | node2                  |
zach      | 5000          | node3                  |
第2步。然后,如果您想检索用户名为
'prayagupd'
的用户,cassandra将为其创建哈希,比如它的
1
,它知道1属于节点1(1-2000)


宾果游戏

解释得很好!这可能是一个改进的建议。而不是“您可能希望按用户名分配用户,因此您决定将其作为主键”。更好的做法是:“您可能希望按用户名分配用户,因此您决定将其作为主键的分区键部分。”。因为(复合)主键可能包含集群键部分,在分区期间不考虑集群键部分。