Cassandra - 在分区日期键中使用 "date" 类型和 "text" 类型的区别

5

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

一个数据类型是否比另一个提供更多的优势,并且在查询/存储方面它们有何不同?

以下是一个示例架构。

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)
);
2个回答

5

Cassandra 数据类型:

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

Cassandra 文本类型:

UTF-8 编码的字符串;每个字符占用 16 位。

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


这是一个很好的观点。谢谢。在进一步思考后,我发现在客户端(使用c#)上使用“日期”类型存在问题。我需要将其映射到自定义的LocalDate类型(在Cassandra驱动程序库中定义)。这意味着任何依赖于此类的其他项目也需要导入Cassandra库。当然,有一种方法可以映射到中立类,以避免对Cassandra的依赖性。这是一个权衡。 - maulik13

3

根据您的评论,如果需要最大的可移植性,只需将信息存储为时间戳(即64位数字),对应于类似于yyyy-MM-dd 00:00:00(截断的时间戳)的内容。使用“通用”数字永远不会出错...


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接