2010-12-24 51 views
2

我們正在研究可能爲我們的主MySQL數據庫設置複製,而設置複製似乎非常直截了當,應用程序實現似乎有點模糊。使用Rails 3進行MySQL複製的最佳實現?

我的第一個想法是建立一個主從配置和RW分裂,與所有寫去掌握查詢(CREATEINSERTUPDATE),和所有讀去到從查詢(SELECT)。它看了起來,似乎基本上有兩種選擇如何使用我們的應用程序實現這一點:

  1. 採用獨立中間件層爲所有的MySQL連接,如MySQL proxyDBSlayer。然而,前者是在阿爾法,後者是有限的文件。
  2. 使用基於Ruby的gem/plugin,例如Octopus來實現框架中的RW分割。

如果我們想要使用主從設置,您推薦使用哪種設置?

另一種想法是使用主 - 主配置,但我不確定這種設置的實現。

想法?

回答

2

通常,您應該在框架中進行R/W分割,因爲只有它可以理解上下文。在PHP中,我通過維護兩個連接來實現這一點 - 一個用於寫入,另一個用於讀取並決定在代碼中明確需要哪個連接。這是因爲它不像查詢類型分割那樣簡單。例如,如果您在寫入連接上啓動一個事務,則您希望其中的所有讀取都通過該連接,否則它們將位於事務之外,並且可能會獲取舊數據或掛起鎖定。

除非你的工作量真的讀重,複製縮放解決方案複製延遲會導致你出去約會的結果。主人並不那麼特別 - 這只是主從的兩個例子,但你不應該犯錯誤,試圖寫給兩位主人,因爲你要求進行裂腦噩夢。

我真的很喜歡的配置是使用mmm與主 - 主對。這使得故障轉移和冗餘對於應用程序來說非常簡單和透明,而且它的運行非常好。