【问题标题】:Cassandra running out of memory for cql queriesCassandra 的 cql 查询内存不足
【发布时间】:2013-06-07 10:25:47
【问题描述】:

我们有一个 32 节点 Cassandra 集群,每个节点使用 Murmur3 分区器大约 100Gb。它有时间序列数据,我们在两列上建立了二级索引来执行范围查询。目前集群稳定,数据全部批量加载,二级索引全部重建。当我们使用 cql 客户端或 hector 执行范围查询时会出现此问题,仅查询行数会花费大量时间,并且大多数情况下会由于内存问题导致节点失败。节点有 8GB 内存,Cassandra MAX Heap 分配给 4GB。有没有其他人遇到过这样的问题?有没有更好的方法来计算查询?

【问题讨论】:

    标签: cassandra cql cql3


    【解决方案1】:

    我遇到过类似的问题,通常可以通过重新设计架构来解决,同时牢记您计划对 Cassandra 中的数据执行的查询。对于时间序列数据,最好根据您的查询拥有具有粒度的宽表。如果您的查询需要 1 小时粒度的数据,那么最好有一个宽表,所有带时间戳的数据点每小时都存储在一行中,这样您就可以通过仅读取 1 行来获取 1 小时内所需的所有数据.

    既然您说数据是批量加载的,我假设您可能已将所有数据放入一个表中,这就是 get_count 查询花费大量时间的原因。我们有一个具有 8GB RAM 的集群,但已将堆大小设置为 3 GB,因为在 4GB 时,RAM 利用率几乎总是为 8GB [完全利用率]。

    【讨论】:

    • Vinay,感谢您的回复。我正在按照您的建议重新设计我的架构。您能否还提到您如何在 cassandra 中加载数据……使用客户端写入或 cassandra/hadoop bulkoutformat 技术?
    • 我不需要加载任何现有数据。我已修改 YCSB 以生成并插入我的应用程序所需的数据。事实证明,拥有多个宽表比为我的应用程序拥有一个表更有效
    猜你喜欢
    • 1970-01-01
    • 2019-05-18
    • 2015-03-10
    • 1970-01-01
    • 2019-05-04
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 2013-10-14
    相关资源
    最近更新 更多