2011-06-20 44 views
7

負載太大我有一個MySQL表,包括:大MySQL表放在服務器上

  1. 〜2500萬行(目前)
  2. 3個指標
  3. 每一天,履帶補充〜300萬行
  4. 我目前不看太遠,但分貝的最終估計可以〜目前9.5giga
  5. InnoDB和它已被CONST * E9行
  6. 同時插入

數據本身由一個約100字符的文本+有關它的元數據的幾個字段組成。索引是唯一的ID,作者姓名和作者ID。到目前爲止,一切都很順利,但現在服務器很難處理新數據的插入(每個插入約10秒,這增加了約3千行)。我試圖找到解決這個問題的方法。我考慮的事情:

  1. 插入時做索引需要付出努力。插入時也許不這樣做,並且只有在X插入添加索引之後。
  2. 將數據分區到不同的表中。
  3. 爬行到一個小的分貝,每X分鐘/天,將數據移動到大分貝。
  4. 移到不同的數據庫。我對NoSql還不夠熟悉,能幫我解決這些問題嗎?使用它是一個很大的努力嗎?

每個選項都有其子選項和難題,但我認爲我應該首先關注一個方向。我應該採取哪條路線,爲什麼?我應該想到另一條路嗎?

順便說一句 - 也有一個選項,不保留所有的數據,只有我真正顯示的部分,但這將使數據在顯示前經歷一些功能改變是不可能的。

+0

數據是什麼樣的?索引? – z5h

+0

更新了問題並回答了您的問題。 – Noam

+0

innodb或myisam?在插入時該表是否用於讀取查詢? – ggiroux

回答

1

是當前最適合使用的發動機嗎?

你有concidered http://dev.mysql.com/doc/refman/5.1/en/partitioning-management.html

+0

我沒有。我認爲這適合在選項2中。考慮到我的數字,這足夠了嗎? – Noam

+0

數據的其他需求和用途以及密集程度如何? –

+0

每次訪問網站時都會從db中讀取這些數據。這是網站建立的主要數據 – Noam

1

如果要添加300萬行的日子,3000行需要10秒的交易,你說了一天,應該休息一天約170分鐘關於1000交易。這真的不是那麼多。

我想我會先嚐試

  1. 降低INSERT數量通過插入更多的行 每筆交易
  2. 調整服務器 交易

你可能會發現,將更多的行每筆交易實際上佔用的時間更少。如果不是,很容易恢復。如果您首先在其他位置存儲行,則可以在低負載時運行INSERT事務。

無論如何調整服務器可能是一個好主意。作爲參考,請參閱Tuning Server Parameters上的MySQL文檔。

+0

您可以詳細說明「調整服務器」嗎? – Noam

+0

我添加了一個指向「調整服務器參數」的鏈接。 –