我期待在建設,這將有500萬行向上一些漂亮 大桌的Rails應用程序。爲了讓事情保持活潑 我目前正在研究如何將大型表格拆分爲更易於管理的塊。我認爲這是MySQL 5.1中的有一個分區 選項,這是一個可能的選擇,但我不喜歡,確定分區列 必須對 表的主鍵的一部分的方式。策略處理大型數據庫表
我真正喜歡做的分割,一個AR模型寫入基於價值觀寫,但據我所知是沒有辦法 做到這一點 表 - 沒有任何人有任何建議,我怎麼可能 實施這個或任何替代策略?
由於
Arfon在MySQL
我期待在建設,這將有500萬行向上一些漂亮 大桌的Rails應用程序。爲了讓事情保持活潑 我目前正在研究如何將大型表格拆分爲更易於管理的塊。我認爲這是MySQL 5.1中的有一個分區 選項,這是一個可能的選擇,但我不喜歡,確定分區列 必須對 表的主鍵的一部分的方式。策略處理大型數據庫表
我真正喜歡做的分割,一個AR模型寫入基於價值觀寫,但據我所知是沒有辦法 做到這一點 表 - 沒有任何人有任何建議,我怎麼可能 實施這個或任何替代策略?
由於
Arfon在MySQL
分區列不限於主鍵。實際上,分區列並不一定是關鍵(儘管透明地創建一個分區)。你可以用RANGE,HASH,KEY和LIST(它與RANGE類似,只是它是一組離散值)進行分區。請閱讀MySQL手冊,瞭解分型類型的an overview。
有替代解決方案,例如HScale - 中間件插件,透明地劃分基於特定標準表。 HiveDB是一個用於MySQL水平分區的開源框架。
除了分片和partioning你應該使用某種形式的集羣。最簡單的設置是基於複製的設置,可幫助您將負載分散到多個物理服務器上。您還應該考慮更高級的集羣解決方案,例如MySQL集羣(可能因數據庫的規模而不是選項)和集羣中間件(如Sequioa)。
我實際上在一段時間之前詢問了關於scaling with MySQL的一個關於堆棧溢出的相關問題,幾天後我收集了大量有關該主題的信息後最終回答自己。也可能與你有關。
如果您想通過時間來分割你的DATAS,以下解決方案可滿足您的需要。你可以使用MERGE表;
讓我們假設你的表名爲MyTable的,並且需要每週一個表
如果要獲取過去三個月的所有數據,請創建一個合併表,該合併表僅包含最近3個月的表。創建儘可能多的合併表,因爲需要不同的時間段。如果你能不包括其中的數據都是當前插入(MyTable的在我們的例子)表,你會更快樂,因爲你不會有任何讀/寫併發
您可以完全處理此在活動記錄中使用DataFabric。
如果不適合,自己實現類似的行爲並不複雜。 Google在分層處理表分區的架構模式上進行了大量討論。它具有避免中間件或取決於數據庫供應商特定功能的優點。另一方面,它是你的應用程序中更多的代碼,你負責。