2014-11-14 56 views
2

我以前见过这个问题,但答案很模糊。我一直在oplog上做一些研究,并试图了解它是如何工作的。特别是,我想对oplog文档中的字段以及它们存储的数据有一个很好的理解。oplog字段实际上意味着什么?

这些都是我已经经历了测试,发现我认为他们的意思是还有什么,我仍然不确定的领域:

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

我想确认我上面提出的观点是否准确,以及澄清不明确的位。我也很想知道是否有任何其他字段可以出现在oplog文档中。

+0

大部分是http://stackoverflow.com/questions/17878835/what-does-the-h-in-oplog-rs-document-stand-for但是b字段:没有人似乎真的知道什么它是,它似乎没有记录。 – Sammaye 2014-11-14 18:08:39

+0

SO链接有正确的AFAIK说明。有意识的是,oplog的格式没有记录,因为它意味着实现细节,而MongoDB想要保留调整或完全更改oplog机制的能力。记录它会有意或无意地产生期望。 – wdberkeley 2014-11-14 18:47:26

回答

4
  • h是一个散列(签署龙)
  • TS是内部时间戳格式在bsonspec.org所示(以下简称“\ X11”型;搜索您的驱动器的API文档在api.mongodb.org为进一步的信息)
  • 你是正确的op,ns,o和o2
  • 还有一个“v”字段(我会推测这是版本,这将允许他们更新模式的oplog )。
  • b对于我所能找到的所有删除操作都是正确的,所以我无法提供任何信息。

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

+0

“b”已被删除,但注释说:如果不为null,则指定一个布尔值作为b:param传递给另一边。用于'd','u'上的“justOne”或“upsert”标志。见:https://github.com/mongodb/mongo/blob/c456786eb2e812440fa6854e2f730b161e6e70ea/src/mongo/db/repl/oplog.cpp#L218-L220 – makhdumi 2017-04-13 22:57:56

+1

还有一个新的领域,被称为“t”,这是选举复制对象的“术语”。有关所有字段,请参阅https://github.com/mongodb/mongo/blob/master/src/mongo/db/repl/oplog.cpp#L273-L296 – makhdumi 2017-04-13 22:59:05

相关问题