java - Cassandra 处理历史数据的最佳方式?

标签 java cassandra hector

我正在使用 Cassandra 存储历史数据。它是各种对象的集合,这些对象会随时间改变其值。

列族:对象类型
行:对象 ID
列名:时间戳
列值:给定时间的值

有时,数据会变“旧”,我不想将其删除,而是想将其存储在其他地方(如另一个列族)或以某种方式“标记”,以免与其余数据一起检索。

哪种方法最快?目前我正在使用 Hector 来执行此操作:
1.读取数据(使用SliceQuery)
2.将数据写入另一个列族(使用ColumnFamilyUpdater)
3.删除旧数据(同样使用ColumnFamilyUpdater)

不确定这样做是否是最佳做法,但我对 Cassandra 还很陌生......
谢谢。

最佳答案

您的数据不仅会发生在 HDD 上,还会消耗 JVM 堆,因为行布隆过滤器总是在启动时读取 - 记住这一点很重要。

您的解决方案很好 - 您需要读取这些数据并将其移动到其他地方。现在有两个选择:

  1. 生成反向索引,让您可以快速访问旧数据。
  2. 遍历所有数据以查找旧记录。如果您的数据集分布在许多 Cassandra 节点上,请考虑使用 Hadoop Map Reduce

第一个解决方案将提供对旧数据的快速访问,但每个插入操作都必须更新索引,这在 Cassandra 的情况下仍然非常快。

第二种解决方案在日常使用中不需要额外的插入,但在移动旧数据时需要全表扫描。如果您可以在夜间运行此类作业,那就太完美了。

关于java - Cassandra 处理历史数据的最佳方式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13879191/

相关文章:

java - Cassandra 中副本之间的计数器值不一致

java - 使用 2+ 个模块在本地运行 GWT

java可以从cmd运行jar但不能通过双击

java - 在java中使用字符串创建类对象时出错

cassandra - SQL 中类似 "LIKE"关键字的子字符串搜索

Cassandra Datastax 驱动程序未通过准备返回行

java - 如何使用 Hector API 将序列化的 Java 对象插入到 Cassandra 中?

java - 创建一个通用方法来查找对象列表中某个属性的最大值

ubuntu - 使用 apt 在 Ubuntu 上安装 Cassandra 3.4

java - Cassandra Hector API 结果对象