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