我正在阅读DataStax文档,并发现了一个有趣的声明。
它声称“在成为内存限制之前,插入繁重的工作负载在Cassandra中受CPU限制”。
有人可以解释这个说法是如何做出的吗?什么可能导致Cassandra的这种行为?
感谢。
答案 0 :(得分:5)
对于不同的工作负载,Cassandra集群可以是CPU,内存,I / O或(偶尔)网络绑定。文档中的声明是,如果你启动一个新集群并进行大量插入,集群最初将受CPU限制,但过了一段时间它就会成为内存瓶颈。
要处理插入,Cassandra需要对来自客户端的消息进行反序列化,找到哪些节点应该存储数据并向这些节点发送消息。然后,这些节点将数据存储在称为Memtable的内存数据结构中。
这最初几乎总是受CPU限制。但是,随着插入的数据越来越多,memtables会变大并刷新到磁盘并创建新的(空)memtables。刷新的memtables存储在称为SSTables的文件中。有一个称为压缩的持续后台进程将SSTables合并为逐渐变大和变大的文件。
在这个阶段,为什么更多的记忆会有所帮助,有几个原因:
因此插入可能会成为内存绑定,但它们也可能成为I / O绑定。如果没有足够的I / O来刷新memtables,那么一旦memtable flush queue满了就会阻塞插入。所以我认为声明可能更准确一些:
在成为内存或I / O绑定之前,插入繁重的工作负载在Cassandra中受CPU限制。