写下前面的日志和memtables刷新到磁盘

问题描述 投票:0回答:1

读过Cassandra,我感觉它真的不容错,是吗?

我的意思是,采取一个非常简单的场景,传入写入,你写入WAL,记忆,然后在WAL中标记写入成功,然后服务器崩溃,然后memtable变满,所以它不会刷新到磁盘SSTable,意思是我只是丢失了这个写+我不能重做它,因为它在WAL中被标记为“完成”。

我在这里遗漏了什么或者它真的不容错吗?这对我来说似乎非常奇怪,因为它在很多地方使用并且有如此多的数据,这让我觉得我错过了一些东西。

cassandra cassandra-3.0
1个回答
3
投票

提交日志写在memtable之前。你只是写了变异,没有标记应用于memtable的变异。在将memtable完全刷新到新的sstable之后,才会从commitlog中删除该变异。

虽然重要的是要知道,通过一些commitlog策略,它们不会阻止ack写入commitlog flush,因此你仍然可以拥有一个仅受RF保护的数据丢失窗口。因此,在这些情况下,了解耐久性的一致性级别和复制因素也很重要。在4.0+我认为group commitlog sync是批量和定期之间的绝佳选择。

© www.soinside.com 2019 - 2024. All rights reserved.