在Cassandra中仅保留最新的N行

时间:2019-06-24 08:10:20

标签: python cassandra

我反复进行一次操作,每次迭代都会在我的Cassandra表中创建一条记录。但是,出于我的目的,我只需要存储有限数量的最新结果。过时的行并不有趣,而且数据库的大小也会迅速膨胀,因为该操作要在许多天内每秒运行多次。

我实质上是将Cassandra表用作缓冲区。那是设计使然。

有没有一种方法可以设置Cassandra来限制一个表可以有多少行,并在压入新行时自动删除旧行而对性能的影响最小?

我的代码库使用Python,所以我更喜欢Python解决方案。

3 个答案:

答案 0 :(得分:2)

不,没有内置这种方法。

Cassandra中用于删除旧信息的传统方法不是按计数,而是按日期:插入行(甚至修改单个单元格)时,您可以设置到期时间 (也称为 TTL )。例如,您写了一行设置为在一天后过期的行。然后,Cassandra将负责自动有效地从磁盘上删除过期的数据(实际上是在压缩期间删除数据)。

这当然与说您始终希望精确保留最新的1000行不同,但是如果您的主要目的是防止数据库大小爆炸,那也许对您的用例就足够了,而实际上并不是保留特定数量的行。

答案 1 :(得分:1)

将Cassandra用作缓冲区或消息队列是一种反模式(官方文档here)。如果您要删除的很多东西,您最终可能会得到墓碑记录,并且系统的性能将受到墓碑垃圾回收的影响。

此外,墓碑将继续占据空间一段时间。

我建议按照here

的说明使用Kafka或MySQL或RDS

否则,如果只希望继续使用Cassandra,则可以将记录创建的时间戳记作为聚类键,并且必须扫描整个表,然后过滤前N个记录

答案 2 :(得分:0)

使用可以使用 TTL 。它将按照TTL中提到的时间自动删除行