Linux
實時 Mongo 數據庫上的低優先級批處理
我們想在我們的實時 Mongo 數據庫上執行 MapReduces,主要是為了我們可以提取指標。但是,由於這些 MR 使 Mongo 伺服器陷入困境(尤其是 100% 磁碟 IO),我們遇到了一些嚴重的中斷。我們認為這是由於缺少索引。
是否可以以低優先級執行此類批處理,以免我們的實時應用程序無法訪問數據庫?
沒有辦法“很好”你正在執行的 MR 作業 - 它們會產生等,但最終(特別是如果你選擇不當的索引)你將通過從 RAM 中逐出它的工作集來影響主數據庫,從而導致磁碟IO 爭用等。因此,我肯定會建議優化您的索引,以盡可能避免這種情況。
在減輕負擔方面,您可以在輔助節點而不是主節點上執行記憶體中的 MR 作業。任何不需要輸出到數據庫的東西都可以以這種方式執行(無法在輔助設備上寫出)。
如果這不是一個選項,那麼我看到的其他方法包括將數據提供給專門用於執行 MR 作業的“分析”集群,同時保持生產數據庫不變。有多種方法可以使第二個集群保持最新狀態,從文件系統快照和其他批處理類型技術到使用mongooplog或自定義應用程序和可尾游標進行複制。
您可以採取的另一種方法是分片以增加您的初選容量。如果您打算走這條路,請確保您至少執行 2.2(撰寫本文時為 2.2.2),2.2 版本對分片 MR 的支持已大大改進