gpt4 book ai didi

c++ - 如何在一个节点的 Cassandra "cluster"中一次加载大量数据?

转载 作者:行者123 更新时间:2023-11-30 01:44:09 28 4
gpt4 key购买 nike

我正在开发一个多网站系统,该系统使用 Cassandra 来处理其所有数据需求。

当我第一次安装一个网站时,它添加了 3918 个页面(并且还在增加),其中包含许多字段、JS 文件等附件、页面之间的链接等。

在某些时候,我的测试“集群”(一个节点)决定数据正在快速传输并且超时或最糟糕的是,Cassandra 由于内存不足 (OOM) 而“崩溃”。或多或少,据我所知,Cassandra 分配的 2Gb RAM 已满,然后,Cassandra 通常无法控制其可用 RAM 并获得 OOM。当我没有得到 OOM 时,我会超时。

C/C++ 驱动程序中是否有调用以了解“集群”是否缓慢,以便我可以等待一段时间而不是疯狂地推送更多数据?

在这一点上,我唯一能看到的是我正在执行写入 (INSERT INTO ...) 并收到超时错误。更准确地说,这个错误:CASS_ERROR_SERVER_WRITE_TIMEOUT。我发现等到出现这样的错误才开始调整我的 INSERT 以管理负载是相当难看的。这是唯一的方法吗?!


更新:我能够避免 OOM,但只能通过减少首次创建网站时安装的插件数量(我不需要一次安装所有插件)。如果您问我,这不是一个好的解决方案,因为 Cassandra 节点不应该像那样崩溃。这可能(可能确实发生在许多人身上)发生在生产中,并且认为只要负载稍微过高一分钟就会发生这种情况是无法容忍的......

最佳答案

我个人为加载大量数据所做的是使用异步查询(这是在 Python 中,但我认为您可以在 C++ 中做同样的事情)。我以异步方式插入数据,并将响应放入列表中。

当我达到一定数量(在我的例子中是 1000)时,我浏览我的列表并调用我所有响应的结果以同步阻塞,直到我的所有查询都通过。

这样,我可以在不使集群过载的情况下发送大量查询。不知道这是否是最有效的方法,但效果很好。

关于c++ - 如何在一个节点的 Cassandra "cluster"中一次加载大量数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36689227/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com