關於MongoDB精確統計文檔記錄數的問題


1.問題背景

最近測試用mongoshake工具做MongoDB數據遷移,mongoshake在遷移完成提供了一個腳本comparison.py來做數據校驗,在校驗過程中發現結果比對存在一個庫數據不一致,下意識以為mongoshake存在缺陷導致遷移丟數據,理論上這種基礎功能不應該存在錯誤,多次重新遷移均出現相同的問題.

2.問題分析

通過對comparison.py腳本的分析,了解到對數據的統計有3種模式

  • --comparisonMode=no 表示使用統計信息比對記錄數
  • --comparisonMode=sample 表示只統計采樣部分數據看是否一致,采樣的數據由--count參數控制
  • --comparisonMode=all 表示分批次對比所有的文檔是否一致(非常慢)

也就是當采用comparisonMode=no和comparisonMode均不能精確的對比出數據的一致性,如果統計信息都是最新的,那基本沒問題,如果統計信息不一致,則很難保證數據校驗的正確性,必須采用comparisonMode=all的模式做校驗

3.關於MongoDB中如何精確統計記錄數的問題

在這之前一直以為MongoDB提供的count命令和Oracle,MySQL等數據庫類似,是精確的查詢集合包含多少個文檔記錄,實際上MongoDB的count操作僅僅是獲取統計信息的值,MongoDB官方文檔也有描述

如果需要精確的統計每個集合的文檔數,需要執行db.collections.countDocuments({})操作

以下是一個主從環境統計信息不一致的示例,從圖中可以看到,通過count統計的數據量和通過查看集合的stats信息查看到的是一致的,主從存在明顯的數據量不一致的情況,而通過db.collections.countDocuments({})則能精確查詢出該集合的記錄數.


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM