gpt4 book ai didi

cassandra - 清除 Cassandra DB 的旧数据策略

转载 作者:行者123 更新时间:2023-12-01 04:43:40 24 4
gpt4 key购买 nike

我们根据类别将事件存储在多个表中。
每个事件都有一个 id 但包含多个子元素。
我们有一个查找表来使用 subelement_id 查找事件。
每个子元素最多可以参与 7 个事件。
因此该分区最多可容纳 7 行。
在 5 年的时间里,我们将在 eventlookup 中拥有 30-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 eventlookup YYYY ”。不需要一年一次,只需将其丢弃。 (问题是每次读取都应该查询所有表)

  • 我们可以考虑其他任何方法吗?

    是否有我们现在可以做出的设计决策(我们还没有投入生产)可以缓解 future 的问题?

    最佳答案

    如果值得额外的空间,请跟踪 recordtimes 的范围您的 subelement_id在单独的表/列族中。

    然后,如果您不想先验设置 ttl,您可以轻松获取要删除具有特定年龄的记录的 id。

    但请记住,要使此跟踪分布良好,只需一个 date会在你的集群中生成热点和非常宽的行,所以考虑一些分区键,比如 (date,chunk)我在过去使用 0-10 的随机数作为 chunk .您也可以查看 TimeWindowCompactionStrategy - 这是一篇关于它的博客文章:http://thelastpickle.com/blog/2016/12/08/TWCS-part1.html

    您的分区键仅设置为 subelement_id ,因此所有记录时间的 7 个事件的所有元组都将在一个分区中。

    关于cassandra - 清除 Cassandra DB 的旧数据策略,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48660629/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com