【问题标题】:Cassandra Data modeling avoiding tombstoneCassandra 数据建模避免墓碑
【发布时间】:2019-05-02 19:25:51
【问题描述】:

我最初的想法是用 spark-kafka-cassandra(在 kubernetes 上)重写庞大的 spark-kafka-hbase 应用程序。

我有以下数据模型,一种支持全时插入,另一种支持更新插入

方法一:

创建表 test.inv_positions(
location_id 整数,
项目大整数,
time_id 时间戳,
sales_floor_qty int,
backroom_qty int,
in_backroom 布尔值,
运输数量 int,
基本的 键 ((location_id), item,time_id) ) 具有聚类顺序(项目 asc,time_id DESC);

此表不断插入,因为 timeid 是 clustering col 的一部分。我正在考虑通过 fetch 1 读取最新的(timeid 是 desc),并通过在 key cols 上设置 TTL 或在一夜之间删除它们以某种方式删除旧记录。

关注点:TTL 或删除旧记录会创建墓碑。

方法二:

创建表 test.inv_positions(
location_id 整数,
项目大整数, time_id 时间戳,
sales_floor_qty int,
backroom_qty int,
in_backroom 布尔值,
运输数量 int,
主键((location_id), item) ) 聚类顺序为 (item asc);

如果新记录来自相同的位置和项目,则此表将对其进行更新。它易于阅读,无需担心清除旧记录

关注点:我在 Cassandra 上有另一个应用程序,它在不同时间更新不同的 col,但我们仍然有阅读问题。也就是说,upserts 也会创建墓碑,但与方法 1 相比有多糟糕?或任何其他更好的建模方式?

【问题讨论】:

    标签: cassandra cassandra-3.0


    【解决方案1】:

    第一种方法似乎不错。 TTL 和删除,都创建墓碑。您可以参考基于 TTL 的删除的压缩策略。 TWCS 更适合基于 TTL 的删除,否则您可以使用 STCS 进行简单删除。此外,相应地配置 gc_grace_seconds 以顺利清除墓碑,因为沉重的墓碑会导致读取延迟。

    【讨论】:

    • 同意。这就是我的计划。只是想听听别人的意见。谢谢
    猜你喜欢
    • 2017-02-24
    • 2019-05-25
    • 2016-07-14
    • 2023-03-08
    • 2021-02-03
    • 2020-08-29
    • 2023-03-18
    • 2017-08-22
    • 2019-07-09
    相关资源
    最近更新 更多