【发布时间】:2013-06-10 20:43:09
【问题描述】:
我浏览了 DataStax 文档,发现了一个有趣的声明。
它声称“插入繁重的工作负载在 Cassandra 中受 CPU 限制,然后才成为内存限制”。
有人可以解释一下这个声明是如何提出的吗?以及可能导致 Cassandra 这种行为的原因是什么?
谢谢。
【问题讨论】:
标签: cassandra datastax-enterprise
我浏览了 DataStax 文档,发现了一个有趣的声明。
它声称“插入繁重的工作负载在 Cassandra 中受 CPU 限制,然后才成为内存限制”。
有人可以解释一下这个声明是如何提出的吗?以及可能导致 Cassandra 这种行为的原因是什么?
谢谢。
【问题讨论】:
标签: cassandra datastax-enterprise
对于不同的工作负载,Cassandra 集群可以受 CPU、内存、I/O 或(有时)网络限制。文档中的说法是,如果您启动一个新集群并进行大量插入,则该集群最初会受到 CPU 限制,但过一段时间就会成为内存瓶颈。
为了处理插入,Cassandra 需要反序列化来自客户端的消息,找到应该存储数据的节点并将消息发送到这些节点。然后,这些节点将数据存储在称为 Memtable 的内存数据结构中。
最初这几乎总是受 CPU 限制。但是,随着更多数据的插入,memtable 会变大并刷新到磁盘并创建新的(空)memtable。刷新的 memtables 存储在称为 SSTables 的文件中。有一个称为压缩的持续后台进程,它将 SSTable 合并成越来越大的文件。
在此阶段更多内存会有所帮助的原因如下:
因此插入可能会受到内存限制,但它们也可能会受到 I/O 限制。如果没有足够的 I/O 来刷新内存表,那么一旦内存表刷新队列已满,插入操作就会被阻塞。所以我认为这个说法可能更准确一点:
大量插入工作负载在 Cassandra 中受 CPU 限制,然后才成为内存或 I/O 限制。
【讨论】: