2016-03-03 17 views
1

我正在使用Octopus gem來處理我的應用程序中的數據庫分片。我有一個主人和一個奴隸。插入查詢總是碰到主機,並且讀取進入從機。Rails:使用Octopus Gem進行數據庫分片的問題

但是我正面臨着一個奇怪的問題,比如插入一條記錄後,當我嘗試獲取它時,找不到記錄。這影響了我的整個應用程序。 我試圖通過以下代碼解決此問題。

Model.using(:master).where(id: 250) 

這將強制模型從主設備而不是從設備獲取記錄。但是如果我們在應用程序中隨處添加,就沒有分片的問題。

任何解決方案?

在此先感謝。

回答

1

歡迎來到有趣的異步複製世界。

通常,當更新數據到您的主數據庫時,數據會異步複製到從服務器,這意味着它將在任何以後的時間點到達那裏。不幸的是,你不知道什麼時候會發生這種情況,因爲通常保證的唯一的事情是從機的更新順序,而不是它們什麼時候發生。

通常,您會盡量保持複製延遲相當小,但您不能忽略它。通常,在使用異步複製時,您必須認真思考您的數據訪問策略,以避免出現不需要的陳舊數據。

分拆和複製絕對不是免費的。數據庫系統盡力通過事務實現強烈定義的原子水平,但由於CAP,引入分佈式系統時事情變得更加複雜(或者有時不可能)。

這個問題沒有一個普遍正確的答案,因爲它不是直接清楚的,哪些數據可能陳舊,哪些數據不可以。考慮你的訪問模式並選擇合適的服務器。通常,最簡單的答案是徹底擺脫分片和複製,並簡單地使用更大的服務器。

相關問題