我们有一个32节点的Cassandra集群,每个节点使用Murmur3分区器大约100Gb。它有时间序列数据,我们在两列上构建二级索引来执行范围查询。目前,群集已稳定,所有数据都已加载,所有二级索引都已重建。当我们使用cql客户端或hector执行范围查询时会出现问题,只是对行数的查询需要花费大量时间,并且大多数情况会导致节点因内存问题而失败。节点有8GB内存,Cassandra MAX Heap分配给4GB。还有其他人遇到过这样的问题吗?有没有更好的方法来计算查询?
答案 0 :(得分:1)
我遇到了类似的问题,通常可以通过重新设计架构来解决这个问题,同时考虑到您计划针对Cassandra中的数据执行的查询。对于时间序列数据,最好根据您的查询使用具有粒度的宽表。如果您的查询需要1小时的粒度数据,那么最好有一个宽表,每小时将所有带时间戳的数据点存储在一行中,这样您只需读取1行即可获得所需的所有数据1小时
由于您说数据是批量加载的,我假设您可能已将所有数据放入单个表中,这就是get_count查询占用大量时间的原因。我们有一个具有8GB RAM的集群,但已将堆大小设置为3 GB,因为在4GB时,RAM利用率几乎总是为8GB [完全利用率]。