【问题标题】:What do the oplog fields actually mean?oplog 字段实际上是什么意思?
【发布时间】:2015-04-07 00:27:03
【问题描述】:

我以前看过这个问题,但答案很模糊。我一直在对 oplog 进行一些研究,并试图准确了解它是如何工作的。特别是,我想对 oplog 文档中的字段以及它们存储的数据有一个很好的了解。

这些是我通过测试发现的字段以及我认为它们的含义以及我仍然不确定的含义:

  • ts:写操作/oplog条目的时间戳
  • h:oplog 条目的唯一标识符(但为什么有时为正有时为负?)
  • op:执行的操作类型(通常 i/u/d 用于插入、更新或删除)
  • ns:数据库和集合受到影响
  • o:执行更改后文档的新状态
  • o2:似乎在更新操作期间包含文档的 _id 字段。当同一字段作为 o 字段的一部分存在时,为什么需要这样做,该字段还包含文档的其余部分?
  • b:似乎是为删除操作出现的布尔值。这个领域有什么意义?

我想确认我上面的观点是否准确,以及对不清楚的地方的澄清。我也有兴趣知道 oplog 文档中是否还有其他字段。

【问题讨论】:

  • 大部分是 stackoverflow.com/questions/17878835/… 的副本,但那个 b 字段:似乎没有人真正知道它是什么,而且似乎没有记录。
  • SO 链接有正确的 AFAIK 描述。 oplog 的格式没有记录是有意的,因为它是一个实现细节,而 MongoDB 希望保留调整或完全更改 oplog 机制的能力。记录它会产生期望,无论是否有意。
  • v 呢? v 似乎很重要 -> 文档的版本?每次更新都会增加?

标签: mongodb


【解决方案1】:
  • h 是一个哈希(有符号长)
  • ts 是内部时间戳格式(bsonspec.org 上显示的“\x11”类型;在 api.mongodb.org 上搜索 API 文档以获取您的驱动程序以获取更多信息)
  • 你在 op、ns、o 和 o2 上是正确的
  • 还有一个“v”字段(我推测这是版本,这将允许他们更新 oplog 的架构)。
  • b 对于我能找到的所有删除操作都是 True,所以我无法提供任何信息。

我找到的最佳文档来源是this。这是一家名为 Stripe 的公司在 2014 年的 MongoDB World 大会上的演示文稿,其中包含一些示例 Ruby 代码。

【讨论】:

  • "b" 已被删除,但 cmets 说:如果不为空,则指定一个布尔值作为 b: 参数传递到另一侧。用于“d”、“u”上的“justOne”或“upsert”标志。见:github.com/mongodb/mongo/blob/…
  • 还有一个新的字段,叫做“t”,是replicaset的选举“term”。对于所有字段,请参阅github.com/mongodb/mongo/blob/master/src/mongo/db/repl/…
  • v呢? v 似乎很重要 -> 文档的版本?每次更新都会增加?
猜你喜欢
  • 2018-08-08
  • 1970-01-01
  • 1970-01-01
  • 2020-02-15
  • 2021-09-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多