4

我正在使用 Cassandra 来存储历史数据。它是各种对象的集合,它们会及时改变它的价值。

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

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

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

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

4

1 回答 1

2

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

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

  1. 生成反向索引,以便您可以快速访问旧数据。
  2. 查看所有数据以查找旧记录。如果您的数据集被划分为多个 Cassandra 节点,请考虑使用 Hadoop Map Reduce

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

第二种解决方案在日常使用期间不需要额外的插入,但在移动旧数据时需要进行全表扫描。这是完美的,如果你可以在晚上运行这样的工作。

于 2012-12-14T16:22:55.247 回答