【问题标题】:Storing timezone information for a timestamp in Cassandra在 Cassandra 中存储时间戳的时区信息
【发布时间】:2013-12-05 10:39:30
【问题描述】:

我了解 Cassandra 将时间戳存储为自纪元以来的秒数(或微秒数)。因此,如果我关心特定事件发生的时区,是否需要将其存储在单独的列中?有没有关于如何存储它的最佳实践或建议?与 GMT 的整数偏移量?

【问题讨论】:

    标签: cassandra timestamp cql


    【解决方案1】:

    我们每天在 Cassandra 集群中存储数百万个时间戳及其时区。

    我们推荐的做法是将时间戳存储为两个值:

    1. 将时间戳本身存储为时间戳类型或 bigint,并始终将其与 UTC 对齐(我们使用 .NET 日期时间,它从零年开始,而不是 UNIX 纪元,因此我们必须使用 bigint。)
    2. 将 UTC 偏移存储为 bigint,以微秒为单位

    这样,默认情况下,我们所有的时间戳都使用相同的时区。但是,每当我们需要在本地时间做某事时,我们只需获取 UTC 偏移列并将其从时间戳中减去,以获得本地时间。

    【讨论】:

    • 您是否需要对任意时区中的时间戳(即不在您保存的偏移量中的时区)进行操作?这种方法有帮助吗?
    • @CrescentFresh 是的 - 如果您知道日期时间始终以 UTC 存储并且您需要在其他时区进行操作,您始终可以计算第三个时区中的日期时间(不是 UTC,而不是存储的时区),只需将 UTC 偏移量应用于存储的日期时间。
    • 不是存储 UTC 偏移量错误吗?为什么不存储时区信息以便计算 UTC 偏移量。这样,如果 UTC 偏移量发生变化,您的值将会调整。
    • @JonathanNappee 是的,这是一个更好的主意
    猜你喜欢
    • 1970-01-01
    • 2016-04-16
    • 2016-10-13
    • 2017-10-07
    • 2014-01-07
    • 1970-01-01
    • 1970-01-01
    • 2020-11-27
    • 1970-01-01
    相关资源
    最近更新 更多