【问题标题】:Model to use in Cassandra to store repeated data在 Cassandra 中使用的模型来存储重复数据
【发布时间】:2017-05-13 22:12:26
【问题描述】:

我正在尝试存储数据非常相似的值列表。 我需要创建一个表模型,其中避免了 upserts,并且可以使用(日期、小时和国家/地区)进行查询。

hour;date;country;unit;type;energy;price;offer;

1;01/01/2016;MI;C;3,6;180,30;O;
1;01/01/2016;MI;C;20,0;180,30;O;
1;01/01/2016;MI;C;837,3;180,30;O;
1;01/01/2016;MI;C;3,4;180,30;O
1;01/01/2016;MI;C;0,6;180,30;O;
1;01/01/2016;MI;C;0,8;180,30;O;
1;01/01/2016;MI;C;1,5;180,30;O;
1;16/12/2016;ES;V;1,5;0;C;
1;16/12/2016;ES;V;0,4;0;C;

我研究了一点用户定义类型 (UDT)。这是实施它们的好例子吗?

例如,可以将复合分区键应用于(小时、日期和国家)并将字段readings 应用于由“unidad,tipo oferta,energía,precio,ofertada”组成的数据类型?

这是保存和搜索数据的最佳方法吗?

【问题讨论】:

    标签: cassandra cql


    【解决方案1】:

    据我了解,您的问题与必须共存的多个 hour:date:country 元组有关。

    我会首先将小时和日期“折叠”到一个 timestamp 字段(可选),然后添加一个“随机”timeuuid 字段作为聚类键。这将允许一组行属于同一元组time stamp:country

    表格看起来像

    CREATE TABLE mutable (
        country text,
        ts timestamp,
        ck timeuuid,
        ....
        PRIMARY KEY ((country, ts), ck)
    )
    

    【讨论】:

    • 听起来不错,我会测试你的解决方案。 timeuuid 类型每次生成时都提供唯一性,对吗?谢谢!
    • 它支持每毫秒 IIRC 最多 10k uuid。请查看文档以确保它非常适合。否则,您将需要“随机”实现(例如应用程序计数器)。
    【解决方案2】:

    这似乎是在 Cassandra 中使用时间序列的好案例,因为您有一个取决于时间的标量值 https://academy.datastax.com/resources/getting-started-time-series-data-modeling

    【讨论】:

    • 问题在于定义主键。正如您通过检查数据所看到的,可能的关键字段中有重复的值。
    猜你喜欢
    • 1970-01-01
    • 2022-12-01
    • 2012-04-17
    • 1970-01-01
    • 2014-01-24
    • 2014-10-01
    • 1970-01-01
    • 2011-04-12
    • 2022-07-25
    相关资源
    最近更新 更多