首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是什么使CommitLog比在卡桑德拉( Cassandra )中给SSTable写信更快?

是什么使CommitLog比在卡桑德拉( Cassandra )中给SSTable写信更快?
EN

Stack Overflow用户
提问于 2015-07-28 11:39:44
回答 3查看 580关注 0票数 5

我目前正在深入探索卡桑德拉,因为我愿意专门研究它。我偶然遇到Cassandra的“写路径”,现在试图理解提交日志。正如我所理解的,写在写到提交日志时是被确认的,首先写到MemTable (内存中的一个表)。但是,如果提交日志被写入文件系统,比如SSTables。什么是神奇的东西,使写作提交日志更快或正如它在许多帖子和文档中所述。

写一旦写到提交日志和内存,就被认为是成功的,因此在编写时有非常小的磁盘I/O。

为什么不写到SSTable和MemTable才能被认为是成功的呢?

EN

回答 3

Stack Overflow用户

发布于 2015-07-28 12:44:15

SSTables是不可变的,因此附加到它们是不可能的。因此,写既发送到memtable,也发送给提交日志(为了持久性)。在正常操作下,memtable作为SSTable定期刷新到磁盘,然后与现有的SSTables进行压缩,以提高读取效率。提交日志仅在节点重新启动时重放,以恢复尚未刷新到SSTables的写入。

票数 5
EN

Stack Overflow用户

发布于 2015-07-28 12:11:15

SSTables是基于刷新的记忆表创建的。虽然提交日志更新是定期进行的,但memtable刷新却不定期进行。那是因为记事本首先需要按一个特定的按钮。(大小)在写入磁盘之前。这可以确保所创建的sstable足够大,可以有效地处理。如果备忘录每分钟被定期刷新几次,我们可能会有很多小马厩不得不再次压缩。

票数 3
EN

Stack Overflow用户

发布于 2020-12-01 03:25:23

向Cassandra写入是如此之快,因为写入日志已经非常快,您还将添加到内存中的数据结构中,如b树或avl树(称为memtable )。Memtable被排序,当它们被写入磁盘时,SStables也保持排序,从而使读取非常高效,但速度不如写入。

需要注意的一点是,客户端从来不接触提交日志。它的唯一目的是创建一个备份。如果你的机器死了,那么你记忆表中的所有数据都会丢失。因此,机器然后使用提交日志来重放memtable。

您希望您的读取是快速的,这是可能的,只有将所有数据按顺序放置,这也使缓存数据变得更容易。如果要在每个写磁盘上写入SStable,则要么必须执行随机读取,使读取速度慢,要么必须等待磁盘旋转,以便进行顺序写入。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31675244

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档