我们根据类别将事件存储在多个表中。 每个事件都有一个ID,但包含多个子元素。 我们有一个查找表格,可以使用子元素ID查找事件。 每个子元素最多可以参与7个事件。 因此,分区最多将保存7行。 在5年的时间内,我们将拥有300-500亿行事件查找数据。
CREATE TABLE eventlookup (
subelement_id text,
recordtime timeuuid,
event_id text,
PRIMARY KEY ((subelement_id), recordtime)
)
问题:当我们达到5(或其他数字)年的标志时,如何删除旧数据。我们希望在特定时间间隔内清除“尾部”,比如每周或每月。
迄今为止调查过的方法:
- X年的TTL(性能良好,但需要预先知道TTL,每个列额外8个字节) - 不删除 - 只是忽略这个问题(别人的问题:0) - 速率限制单行删除(完成表扫描并可能进行数十亿次删除语句) - 将表拆分为多个表->“CREATE TABLE eventlookupYYYY”。一年一次不需要,直接删除即可。(问题是每次读取都可能要查询所有表)
还有其他方法可以考虑吗?
现在是否有设计决策(我们还没有投入生产)可以缓解未来的问题?