【发布时间】:2021-08-10 07:20:55
【问题描述】:
考虑三行,(a, b), (a, f) 和 (c, e)。
遗憾的是,在某些薄片分区算法下,分区键值 a 和 c 哈希为相同的值。
在这种情况下,Cassandra 如何在内部对行进行排序?
会在:
(a,b)
(a,f)
(c,e)
或在
(a, b)
(c, e)
(a, f)
【问题讨论】:
标签: cassandra
考虑三行,(a, b), (a, f) 和 (c, e)。
遗憾的是,在某些薄片分区算法下,分区键值 a 和 c 哈希为相同的值。
在这种情况下,Cassandra 如何在内部对行进行排序?
会在:
(a,b)
(a,f)
(c,e)
或在
(a, b)
(c, e)
(a, f)
【问题讨论】:
标签: cassandra
首先,如果分区键不同,就不可能有相同的令牌(哈希值)。 Murmur3Partitioner 将处理令牌(哈希)的唯一性。
row 1 (a,b) - a is partition key in this case. Hash will be calculated using a
row 2 (a,f) - a is partition key in this case. Hash will be calculated using a
row 3 (c,e) - c is partition key in this case. Hash will be calculated using c
第 1 行和第 2 行具有相同的行 kay(分区键),现在这是冲突。但是 cassandra 具有与每个单元格相关联的时间戳(一个单元格是 cassandra 中的最小存储单元)。每个单元格都有三个属性名称、值和时间戳。 Cassandra 使用时间戳将这些两行合并为一行。最新的值将被保留。从上面的示例中,对于第 kay a 行,值 f 将保持不变。 Cassandra 压缩过程将负责合并行。
【讨论】: