我正在开发一个使用 Cassandra 来处理其所有数据需求的多网站系统。
当我第一次安装一个网站时,它添加了 3918 个页面(并且还在增长),其中包含许多字段、JS 文件等附件、页面之间的链接等。
在某些时候,我的测试“集群”(一个节点)决定数据很快就会超时,或者最糟糕的是,Cassandra 由于内存不足(OOM)而“崩溃”。或多或少,据我所见,Cassandra 分配的 2Gb RAM 被填满,然后,Cassandra 通常无法控制其可用 RAM 并获得 OOM。当我没有得到 OOM 时,我会超时。
C/C++ 驱动程序中是否有一个调用来知道“集群”是否很慢,所以我可以等待一段时间而不是像疯了一样推送更多数据?
在这一点上,我唯一能看到的是我在写 ( INSERT INTO ...
) 并得到一个超时错误。更准确地说,这个错误:CASS_ERROR_SERVER_WRITE_TIMEOUT
. 我发现等到我收到这样的错误才开始调整我INSERT
的 s 以管理负载是相当难看的。这是唯一的方法吗?!
更新:我能够避免 OOM,但只能通过减少在第一次创建网站时安装的插件数量(我不需要一次安装所有插件)。如果你问我,这不是一个好的解决方案,因为 Cassandra 节点不应该像那样崩溃。这可能(可能确实发生在许多人身上)发生在生产中,并且一旦负载在一分钟内变得有点太高,认为任何时候都可能发生这种情况是无法容忍的......