Merkle树是从单个SSTable生成的吗?

时间:2017-12-05 16:16:05

标签: cassandra merkle-tree

当Cassandra进行数据完整性检查时,它会进行验证压缩,但这究竟意味着什么?我的理解是它创建了一个临时存储的单个SSTable(直到修复完成),然后它从该单个创建的SSTable生成Merkle树。如果任何Merkle树叶未通过验证,则用于创建该叶的分区(来自在验证压缩期间创建的SSTable)将流式传输到另一个节点。 然而,一位朋友告诉我,Merkle树是从每个(以前存在的)SSTable生成的。

那么,生成了多少个Merkle树,一个或多个SSTables?

1 个答案:

答案 0 :(得分:3)

验证压缩迭代范围中包含的所有sstables以构建merkle树。它实际上并没有编写新的sstable,但是压缩接口执行相同类型的任务(迭代数据),因此重用它。压缩管理器还用于清理,二级索引重建,MV构建,清理和验证过程。

生成单个merkle树。它的每个节点表示令牌范围内所有数据的散列,节点的每个子节点都是其令牌范围的一半。树的深度是动态的,理想情况下,叶子每个代表1个分区,但如果根节点表示包含许多分区的宽范围,它最终可能代表更多。由于merkle树的深度限制为20(否则它将太大,并导致问题转移),您通常不想修复其中包含超过2 ^ 20或1百万个分区的范围。在选择如何细分子范围修复的范围时,可以使用getsplits或size_estimates表来确定这一点。

值得注意的是,修复可以启动许多子修复,每个修复都有自己的验证压缩/ merkle树/流媒体会话。