2012-02-20 88 views
0

我被困在一塊岩石和一個硬的地方,正在製作一個應用程序。基本上,該程序會生成一個非常大的數據集(它超過10個演出並超過服務器上的內存,並且很難在稍後將該數據集從字典傳送到其他服務器)。我決定使用數據庫來存儲數據,但遇到了一個問題,在我產生更多進程時,他們不會使用超過10%的可用內核,但mysql服務總是在60-100%左右。有沒有辦法讓mysql處理大量的併發寫入?

使用mysql的核心運行在60-100%之間。我已經學習了基本的mysql課程,但絕不是專家,我真的只是用它來存儲/分發程序的局部變量。有關如何排除故障或甚至解決此問題的任何建議?我的一個想法是儘管我的內存不能存儲我打算編寫的整個數據庫,但我希望服務器使用一些內存來處理一些請求,然後可能會在內存變滿時編寫它們(現在,mysql正在使用小於1服務器內存的百分比)。

正如你所知道的我的目標,我沒有忠於任何特定類型的系統,所以如果mysql不是一個好的解決方案,我很樂意嘗試另一種工具(我打算使用hbase,但沿着mysql的道路第一)。如果還有什麼更好的,請告訴我。

回答

1

這一切都取決於你實際上正在做什麼,但你需要提供更多的信息,以獲得良好的建議。

大量寫入是什麼意思? 10? 100? 1000?每秒?

您試圖寫入的模式是什麼?在架構上實現了哪些索引?

您是否有繁重的讀取操作,或者這是全部寫入?

你在寫什麼?它是你正在寫的單行還是它在事務中包裝的多個操作?

什麼是服務器配置?記憶?磁盤? mySQL的版本。

您是否使用Innodb作爲數據庫?

現在你可以嘗試的一件事是運行SHOW FULL PROCESSLIST ;.這將向您顯示是否發生某種類型的鎖定 - 如果您看到很多進程處於鎖定狀態,請查找其中一個未鎖定的進程,並查看是否可能導致鎖定。有關此命令的更多信息,請參見http://dev.mysql.com/doc/refman/5.0/en/show-processlist.html

+0

我生成8個過程,所以我認爲8寫一秒。該表目前只有一列(它必須是唯一的)。它沒有索引(認爲有助於讀取不寫,所以沒有做任何事情)。它真的有兩個操作,它是一個讀取,如果它不存在寫入數據庫。版本是5.1.61。我不確定配置,它是默認的centos 6,我使用Innodb。當我查看鎖定的過程時,有11行結果,其中2個未鎖定(一個是檢查權限,另一個是寫入網絡)。 – Lostsoul 2012-02-20 08:13:52

+0

我應該添加,該應用程序運行在與數據庫相同的服務器上。如果需要,我可以移動。服務器有8個內核,但SQL最多隻有1個,而且應用程序佔用的內存少於10%,所以每個內核對於MySQL而言都有90個。 – Lostsoul 2012-02-20 08:34:24

+0

這對於音量而言確實不算什麼--MySQL可以在簡單的筆記本電腦上處理它的睡眠。沒有索引不是一件好事,尤其是如果你在寫入之前進行讀取 - 沒有該索引,mysql將爲每個插入(在該掃描期間具有關聯的鎖)執行完整的表掃描 - 對於大數據集每秒x6可以真正咀嚼你的過程。我會建議在首先搜索的字段中添加索引,看看是否有助於減少爭用。 – AlexGad 2012-02-20 15:12:36

1

看起來你只是想保存你的代碼生成(或接收)的大量數據,並且你不想經常(在這部分代碼中)獲取它們。如果是這樣,並且您的數據生成速率如此之高,我建議使用NoSQL數據庫,例如MongoDB而不是MySQL。 它們只是爲大量數據集創建的,它們是集羣準備好的,並且...(只需轉到其文檔)。

+0

我不同意這樣的假設,即如果你有很多數據要堅持的話,那麼NoSQL db就是要走的路。讓我們面對現實吧,Facebook並沒有達到它的位置,而沒有將大量數據持久保存到mySQL。根據我的經驗,mySQL可以處理大量數據,但是與其他所有的數據一樣,它需要正確使用。我已經使用了MongoDB和Redis,並且在某些領域都很出色,但是如果mySQL已經到位了,在轉移到其他會出現問題的東西之前,找出發生了什麼問題不是一個好主意嗎? ? – AlexGad 2012-02-20 05:12:40

+0

我還補充說,它提到的數據不適合內存。 MongoDB下的工作集很可能不適合內存。如果是這樣的話,那麼他的表現就會更差,因爲如果一切都無法進入記憶,那麼蒙戈真的很難受。最重要的是,高寫入可能會受到Mongo全局寫入鎖定的影響。解決這個問題的方法是分片,但現在事情變得越來越複雜。正如我所提到的,在查看其他地方之前,首先要弄清楚mySQL實現的真正問題。 – AlexGad 2012-02-20 05:19:40

+0

謝謝你的建議..我真的很感激它(不是試圖開始一場激烈的戰爭或任何事情),但我真的沒有任何特定解決方案的附屬物只是想要一些符合我需要的東西。我打算給hbase一個嘗試,但不確定在mysql中是否有某些東西需要修復,或者其他東西是否更好。我會研究moogodb並回答@ AlexGad的問題,因爲我通過mysql數據庫並找出它們 – Lostsoul 2012-02-20 08:07:51

相關問題