簡體   English   中英

MongoDB 日志文件和 oplog 有何不同?

[英]How do the MongoDB journal file and oplog differ?

我最近開始使用 MongodDb,我正在嘗試探索副本集和崩潰恢復。

我讀過它就像日志文件正在寫一個頭重做日志文件。 oplog 文件是每個寫入活動都將寫入的文件。

這兩者有什么區別...? 我們在 master 和 slave 上都有 oplogs ......? 請張貼任何有關此區域的網絡鏈接。

Oplog 存儲修改數據庫的高級事務(例如不存儲查詢),如插入此文檔、更新該文檔等。 Oplog 保存在主服務器上,從服務器會定期輪詢主服務器以獲取新執行的操作最后一次投票)。 操作有時會在存儲到 oplog 之前進行轉換,因此它們是冪等的(並且可以安全地多次應用)。

另一方面,日志可以在任何節點(主節點或從節點)上打開/關閉,並且是用於崩潰恢復和單個 mongo 實例持久性目的的操作的低級日志。 您可以讀取低級操作,例如“在此位置將這些字節寫入此文件”。

注意:從 MongoDB 4.0 開始,您不能為使用 WiredTiger 存儲引擎的副本集成員關閉日志記錄。 來源: https : //docs.mongodb.com/manual/tutorial/manage-journaling/

Oplog 只是一個有上限的集合,MongoDB 會在其中跟蹤其集合中的所有更改(插入、更新、刪除)。 它不跟蹤讀取操作。 MongoDB 使用 oplog 來傳播副本集中所有節點內的所有更改。 輔助節點復制並應用此更改。

日志是底層存儲引擎的一個特性。 由於 MongoDB 3.2 默認存儲引擎是 WiredTiger,而自 MongoDB 4.0 起,您無法禁用 WiredTiger 的日記功能。 所有操作都在日志文件中進行跟蹤。 WiredTiger 使用檢查點在崩潰時恢復數據。 每 60 秒創建一次檢查點。 如果在檢查點之間發生崩潰,一些數據可能會丟失。 為了防止這種情況,WiredTiger 使用日志文件在最后一個檢查點之后應用所有更改。

一般來說,MongoDB 中的寫入流程是這樣的:

  • 高級- 當客戶寫入/更新/刪除數據時,MongoDB 將其應用於正確的集合、更新索引並將更改插入到 oplog。 如果這些操作中的任何一個失敗,則必須回滾其他相關操作以防止不一致。 為此 MongoDB 使用 WiredTiger 事務:
    1. 開始交易
    2. 對集合應用更改
    3. 更新索引
    4. 將更改添加到 oplog
    5. 提交交易
  • 低級- WiredTiger 運行事務並將更改添加到日志文件。

journal 和 oplog 之間肯定有關系。 當 w=1 時,您提交到主要 jouranl 並為 replset 集合創建了一個 oplog 條目。 我認為至少在 replSet 的主要部分 - 它們都包含相同的更新/刪除/插入,只是格式不同。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM