我听说过 Cassandra 及其发行版。其实想知道数据在整个集群中是如何分布的现象?我的意思是 Cassandra 如何决定哪些节点有哪些数据?
如果您了解 HastTable 数据结构以及如何在 Hashtable 中完成散列,则非常简单。
STEP 1. 基本上,如何在哈希表中决定 key 的索引是
index = hashfunc(key_you_want_to_distribute) % array_size
Run Code Online (Sandbox Code Playgroud)
寻找选择散列函数的详细信息。
STEP 2. 然后要检索您想要的数据,您只需为其提供您想要查找的值。它将为该值创建哈希并查找该索引。
它在 Distribute Hashtables/Cassandra 中的工作方式相同。
第1步。在 cassandra 中,您必须指定要包含在记录中的哪些字段以创建哈希。说,如果你有一张桌子User。您可能希望按用户分配用户username,因此您决定将其作为主键。
您选择创建哈希的字段在 Cassandra 世界中称为分区键,因为它是对记录进行分区的决定性因素。
然后,Cassandra 为您将要插入的记录创建哈希,然后根据您的节点/机器的范围,分发记录。
假设你有 3 个节点,哈希范围如下,
node1 | 1 - 2000
node2 | 2000 - 4000
node3 | 4000 - 6000
Run Code Online (Sandbox Code Playgroud)
例如,请参见下表,我给出了随机散列以使其简单。Cassandra 实际使用 Murmur3 哈希。
username | hash(example) | which node it goes to |
----------|---------------|------------------------|
prayagupd | 1 | node1 |
mike | 3000 | node2 |
zach | 5000 | node3 |
Run Code Online (Sandbox Code Playgroud)
第2步。然后,如果你想用 username 检索用户'prayagupd',cassandra 将为它创建哈希,说它1,它知道 1 属于 node1 (1-2000)。
答对了!!!