2015-11-05 55 views
3

我正在用Apache Storm評估Mongo DB。我的用例是我必須從Apache Storm中的MongoDB中讀取數據,在bolt中做一些處理並將其轉儲到Neo4J圖形數據庫中。Mongodb oplog同步

我使用的是蒙戈噴口,這將從OPLOG文件中讀取數據。我查看了主節點將數據寫入oplog文件的文檔,並且副本讀取將以異步方式發生。我知道oplog是一個封閉的集合(指定的大小),數據以很高的速度寫入oplog,同步到副本集有點慢。如果oplog達到其最大大小,它會覆蓋文件開頭的文檔。在異步過程中,如果我們獲得其他數據,並且複製仍處於完成狀態,則可能會丟失複製集,因爲它不會同步。

我在這裏的問題是

1)有什麼辦法來克服這個?

2)使用Apache Storm時,我們可以如何更好地使用這個加蓋的集合?

3)如果給最大OPLOG大小如我給500GB和OPLOG擁有1GB的數據將其佔領和大小的儲備500GB?

4)這是我的用例的正確解決方案嗎?

在此先感謝!

回答

1

是的,你可以通過增加oplog的大小來克服這個問題。這需要關閉mongo實例才能生效。

我最近的工作類似您使用的是尾光標在蒙戈訂閱在一個初級的OPLOG所做的任何更改,並將其遷移到另一個數據庫做一個概念證明。我們最終還是以更清晰的方式看待Storm。對於這個用例,我們並沒有在Storm上100%出售,但尾部光標有點難看且不可靠。我會在尾巴光標前使用Storm。

您可以更好地爲風暴只是拿起新的命令,使與風暴利用這個上限的集合。 您碰到的複製問題看起來與從主Oplog中拾取新命令並將相關操作執行到Neo4j中的任務相互排斥。如果您是從oplog上讀取輔助數據,我會更好地理解這是您聲稱的目標是什麼(即將數據寫入Neo4j)的問題。 由於您正在閱讀小學的oplog,並且可以在處理最新的命令時進行處理,所以我不確定這裏是否存在問題。

關於你提到的RS同步問題;如果你的副本不同步,你正在失去複製,那麼有問題應該提前解決。我確實理解並讚賞你的觀點,但是爲了實現這一目的而設計的系統需要一些TLC。

正如你所說,oplog是一個上限集合。當空間用完時,它將爲任何要執行的新命令騰出空間。如你所說,沒有什麼是保留的。您的輔助程序將無法將這些命令應用於它們並需要完整的重新同步。您需要關注"replication oplog window"這表示1.這是操作在被新條目覆蓋之前將保留在oplog中的時間量。 2.次要成員可以離線多長時間,並且仍然趕上主服務器而不進行完全同步。