2008-11-27 115 views
10

我期待在建設,這將有500萬行向上一些漂亮 大桌的Rails應用程序。爲了讓事情保持活潑 我目前正在研究如何將大型表格拆分爲更易於管理的塊。我認爲這是MySQL 5.1中的有一個分區 選項,這是一個可能的選擇,但我不喜歡,確定分區列 必須對 表的主鍵的一部分的方式。策略處理大型數據庫表

我真正喜歡做的分割,一個AR模型寫入基於價值觀寫,但據我所知是沒有辦法 做到這一點 表 - 沒有任何人有任何建議,我怎麼可能 實施這個或任何替代策略?

由於

Arfon在MySQL

回答

5

分區列不限於主鍵。實際上,分區列並不一定是關鍵(儘管透明地創建一個分區)。你可以用RANGE,HASH,KEY和LIST(它與RANGE類似,只是它是一組離散值)進行分區。請閱讀MySQL手冊,瞭解分型類型的an overview

有替代解決方案,例如HScale - 中間件插件,透明地劃分基於特定標準表。 HiveDB是一個用於MySQL水平分區的開源框架。

除了分片和partioning你應該使用某種形式的集羣。最簡單的設置是基於複製的設置,可幫助您將負載分散到多個物理服務器上。您還應該考慮更高級的集羣解決方案,例如MySQL集羣(可能因數據庫的規模而不是選項)和集羣中間件(如Sequioa)。

我實際上在一段時間之前詢問了關於scaling with MySQL的一個關於堆棧溢出的相關問題,幾天後我收集了大量有關該主題的信息後最終回答自己。也可能與你有關。

1

如果您想通過時間來分割你的DATAS,以下解決方案可滿足您的需要。你可以使用MERGE表;

讓我們假設你的表名爲MyTable的,並且需要每週一個表

  1. 你的應用始終會記錄在同一個表
  2. 每週工作原子重命名你的表,並重新創建一個空:MyTable的重命名爲MyTable-Year-WeekNumber,並創建一個新的空MyTable
  3. 合併表被刪除並重新創建。

如果要獲取過去三個月的所有數據,請創建一個合併表,該合併表僅包含最近3個月的表。創建儘可能多的合併表,因爲需要不同的時間段。如果你能包括其中的數據都是當前插入(MyTable的在我們的例子)表,你會更快樂,因爲你不會有任何讀/寫併發

1

您可以完全處理此在活動記錄中使用DataFabric

如果不適合,自己實現類似的行爲並不複雜。 Google在分層處理表分區的架構模式上進行了大量討論。它具有避免中間件或取決於數據庫供應商特定功能的優點。另一方面,它是你的應用程序中更多的代碼,你負責。