2010-08-28 74 views
3

這是一個相對複雜的問題,所以請建議對不明確的部分進行編輯或評論。我將根據您的意見進行更新和迭代允許使用分片的mysql數據庫進行數據訪問的Gem,同時保持Activerecord的使用

我正在考慮開發一種簡化分片表使用的rails gem,即使大部分數據都存儲在關係數據庫中。我相信這與Quora或Friendfeed中使用的概念類似,它們在擴大傳統mysql的範圍時遇到困難,大多數潛在解決方案需要大規模遷移(nosql),或者只是非常痛苦(完全無關關係)

本質上說,我們怎樣才能繼續使用MySQL的很多事情是在真的很好,但允許部分系統規模?這將允許有人開始使用mysql/activerecord,但碰到一個障礙擴展,以輕鬆擴展數據庫的有意義的部分。

對於我們來說,我們在分片數據庫上使用Ruby on Rails,並在其中存儲JSON blob。由於我們無法進行連接,因此我們正在爲實體之間的關係創建表格。

例如,我們有10種不同類型的實體。每個實體可以使用大(分片)關係表彼此鏈接。

這些表格非常簡單。索引是(Id1,Id2 ...,類型),數據存儲在JSON blob中。

  • 編號,類型,{JSON數據}
  • ID1,ID2,類型{JSON數據}
  • ID1,ID2,ID3,類型{JSON數據}

我們已經把大量的工作來創建更高級別的接口來存儲關係數據的一系列數據集

對於任何給定的類型,您可以定義一種類型的存儲 - (值,未加權列表,加權列表,帶有guid的加權列表)

我們必須爲他們每個人的更高層次的接口 - 查詢,排序,時間戳比較,十字路口等

這樣一來,如果有人意識到他們需要擴展數據庫的特定部分,他們可以保持最的基礎設施,並且只將他們需要的表格移動到這個分片數據庫中

你的想法是什麼?如上所述,我很想知道你們的想法。

回答

0

可擴展性是一個難題。我的背景包括兩年擔任BEA系統的銷售工程師,當時他們銷售的所有產品都是TUXEDO中間件(TUXEDO == UNIX Extended for Distributed Operations的事務)。 TUXEDO仍然是Unix平臺上TPC-C基準測試的主角。

擴展WRT數據庫並不是關於數據庫本身,而是關於如何訪問該數據庫。例如,如果建立到數據庫的連接,並且希望單個連接進行擴展,則始終應使該連接訪問數據庫中的同一個表。今天的基礎設施(包括RoR)的問題是,當他們打開通用連接時,這些連接訪問數據庫中的許多表。

所以,如果你想建立一個數據庫連接規模,使該連接專注於盡可能少的數據庫資源的數據庫引擎。如果您可以設法創建一個「聚焦」連接,那麼它只訪問一個表和一個表索引,例如,它會比訪問數據庫中每個表的連接以及爲所有這些表定義的每個索引伸縮得更好。

相關問題