【问题标题】:How to understand Bson Timestamp?如何理解 Bson 时间戳?
【发布时间】:2021-07-01 11:22:08
【问题描述】:

对于Mongo Bson类型的Timestamp,有一个构造函数:BsonTimestamp(final int seconds, final int increment),如何理解increment?设计考虑是什么?

【问题讨论】:

    标签: mongodb bson


    【解决方案1】:

    Timestamp 是 MongoDB 使用的内部 BSON 类型,用于反映 replication oplog 中条目的操作时间 (ts)。

    BSON Timestamp 类型专为记录有序批次的基于时间的操作的特定用例而设计:

    • 前 32 位 (time_t) 是一个整数值,表示自 Unix 纪元以来的秒数
    • 第二个 32 位是一个整数值 (ordinal),表示给定秒内的排序

    Timestamps 的设计要求是基于保持 oplog 条目的严格排序而不是时间精度(例如毫秒或微秒)。领先时间分量给出了以秒为单位的课程粒度;附加一个递增的ordinal value 可确保在给定秒内对唯一时间戳值进行严格排序。使用有序序列而不是时间精度可以避免降低可能在同一毫秒(或微秒)内发生的两个操作的潜在冲突。

    对于应用程序用例,您应该使用BSON Date 类型而不是时间戳。 BSON Date 与 Timestamp 的大小(以位为单位)相同,但提供了更多的时间粒度:

    BSON 日期是一个 64 位整数,表示自 Unix 纪元(1970 年 1 月 1 日)以来的毫秒数。这导致过去和未来大约 2.9 亿年的可表示日期范围。

    【讨论】:

    • 您的回答重复了文档,没有任何解释。你能解释一下什么是“递增序数”吗?
    • @pooya13 我修改了我的答案,希望能更清楚地阐述。 l 也可能对文档中的类似信息做出了贡献(我隐约记得在某些时候描述只是“内部 BSON 类型”)。如果此更新有用,我将提交 PR,以便文档最终与我的解释一致:)
    • 是的@Stennie 好多了!谢谢
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-22
    • 2013-07-22
    • 1970-01-01
    • 2016-02-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多