【问题标题】:Byte packing like mongdbo objectid像 mongdbo objectid 这样的字节打包
【发布时间】:2012-08-27 17:42:31
【问题描述】:

Mongodb object id 是一个字节数组,字节数组中打包了很多信息,如下:

http://www.mongodb.org/display/DOCS/Object+IDs#ObjectIDs-TheBSONObjectIdDatatype

ie:给定一个 id 47cc67093475061e3d95369d 它包含日期时间、机器、id 和 inc 信息。他们如何将所有这些信息存储到 id 中?

他们是怎么做到的?字节打包是如何发生的?

有没有一个例子来表示这一点?

【问题讨论】:

  • 我很困惑。您是否在询问给定链接的下一部分提供了什么?
  • 我在问他们如何用上面的 id 表示所有这些信息。
  • 所以不是这个 -- mongodb.org/display/DOCS/…?
  • 这只是为了显示 id 包含哪些数据,我在问他们是如何做到的。

标签: c# mongodb bytearray


【解决方案1】:

时间是自 1970 年 1 月 1 日以来的秒数,在他们的示例中是 1,204,578,057。

对于二进制表示,1204578057(基数 10)是 47cc6709(基数 16)。没什么可做的。这就是它在计算机上的样子。

要将该值转换为字符串(对于 ObjectId 方法),只需使用“X”调用ToString

1204578057.ToString("X")

结构本身在这里完全定义——BSONObjectIDSpecification

您可能还想在这里研究结构布局:http://msdn.microsoft.com/en-us/library/system.runtime.interopservices.structlayoutattribute.aspx

【讨论】:

  • 是的,我很好奇从 120457805747cc6709 的转换以及他们是如何做到的。所以它是十六进制转换。谢谢。
【解决方案2】:

抱歉,如果我不理解您的问题,但您提供的链接中给出了 ObjectId 的格式。在您提供的 ID 中,这意味着以下内容:

47cc67093475061e3d95369d

字节 0、1、2 和 3 = 时间戳。
47cc6709 = 时间戳。

字节 4、5 和 6 = 机器 ID。
347506 = 机器 ID。

字节 7 和 8 = PID
1e3d = PID

字节 9、10 和 11 = 增量
95369d = 增量

【讨论】:

  • 我问他们是怎么做到的?
  • 例如:他们如何将时间戳存储到47cc6709
  • 正如上面链接的文档中所解释的,时间戳存储为自 1970 年以来的带符号的秒整数。在这种情况下,自纪元以来 1204578057000 秒,即2008-03-03T21:00:57Z
  • 另外,应该问一个问题,你为什么需要这些信息?如果您正在寻找一种从 ObjectID 中获取 Timestamp 值的方法,请查看 shell 中的 getTimestamp() 函数。
  • 不,我对时间戳不感兴趣。我想知道他们是怎么做到的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-01-15
  • 1970-01-01
  • 1970-01-01
  • 2013-05-13
  • 1970-01-01
  • 1970-01-01
  • 2015-06-21
相关资源
最近更新 更多