[英]mongodb oplog: does “insert” op add “create collection” op?
當我們插入文檔時,如果數據庫和/或集合不存在,則會在插入之前創建它們。 oplog中是否提供此“創建數據庫/收集”操作?
我感興趣的原因是因為我們想從v2.4升級到v3.2,但是根據https://jira.mongodb.org/browse/SERVER-17634 ,在插入操作時“ applyOps”命令將失敗如果缺少集合。
是的,插入新集合會在oplog中產生2個條目:
{op: "c", o: {create: "name_of_the_collection"}}
創建集合
{op: "i", ns: "name_of_the_collection", o:{the document}}
插入文檔
回答后續問題:
官方文檔顯示:
oplog(操作日志)是一個特殊的,有上限的集合,該記錄保持所有修改存儲在數據庫中的數據的操作的滾動記錄。
“所有操作”包括創建集合,數據庫等。如果集合在主要成員上不存在,則在首次插入時創建: https : //github.com/mongodb/mongo/blob/v3.2/src/mongo/db/目錄/ database.cpp#L454
創建新集合時,相應的文檔記錄到操作日志中: https : //github.com/mongodb/mongo/blob/v3.2/src/mongo/db/catalog/database.cpp#L511
相同的邏輯適用於其他命令,包括創建數據庫。
oplog文檔的格式包含所有必要的信息,以重放對正確的數據庫,集合和文檔的所有操作:
/* we write to local.oplog.rs:
{ ts : ..., h: ..., v: ..., op: ..., etc }
ts: an OpTime timestamp
h: hash
v: version
op:
"i" insert
"u" update
"d" delete
"c" db cmd
"db" declares presence of a database (ns is set to the db name + '.')
"n" no op
bb param:
if not null, specifies a boolean to pass along to the other side as b: param.
used for "justOne" or "upsert" flags on 'd', 'u'
*/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.