【问题标题】:Cassandra - using "date" vs "text" types for a partition date keyCassandra - 使用“日期”与“文本”类型作为分区日期键
【发布时间】:2017-03-07 08:06:44
【问题描述】:

我们有一个架构,其中分区键将是日期 (yyyy-MM-dd),我们正在考虑在 textdate 之间选择数据类型这个分区键。

一种数据类型是否比另一种数据类型更有优势,它们在查询/存储方面有何不同?

这是一个示例架构。

CREATE TABLE test.user_sessions (
    sess_date date (or text),
    sess_starttime timestamp,
    event_type text,
    total_req int,
    ended_at timestamp
    PRIMARY KEY (sess_date, sess_starttime)
);

【问题讨论】:

    标签: cassandra


    【解决方案1】:

    Cassandra 日期类型:

    Value 是一个没有对应时间值的日期; Cassandra 将日期编码为 32 位整数,表示自纪元(1970 年 1 月 1 日)以来的天数

    Cassandra 文本类型:

    UTF-8 编码字符串;每个字符 16 位

    如果您将日期 (yyyy-MM-dd) 存储为日期数据类型,则每个条目将仅采用 32 位。另一方面,如果将日期存储为文本,则需要 10*16 = 160 位存储空间。

    【讨论】:

    • 这是一个很好的观点。谢谢。在对此进行了更多思考之后,我发现在客户端使用“日期”类型时存在问题(我正在使用 c#)。我需要将其映射到自定义 LocalDate 类型(在 Cassandra 驱动程序库中定义)。这意味着任何其他依赖该类的项目也需要导入 Cassandra lib。当然,有一种方法可以映射到一个中性类而不依赖于 Cassandra。这是一个权衡。
    【解决方案2】:

    根据您的 cmets,如果您需要最大的可移植性,只需将信息存储为时间戳(即 64 位数字),对应于 yyyy-MM-dd 00:00:00(截断的时间戳)之类的内容.一个“通用”号码是不会出错的……

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-29
      • 2020-12-22
      • 2015-03-27
      相关资源
      最近更新 更多