2009-07-16 22 views
3

我有一個項目,我正在做數據挖掘一個大型數據庫。我目前將所有數據存儲在文本文件中,我試圖理解存儲數據關係數據庫的成本和收益。看起來像這樣:開源數據庫中行數的上限?

CREATE TABLE data (
    source1 CHAR(5), 
    source2 CHAR(5), 
    idx11 INT, 
    idx12 INT, 
    idx21 INT, 
    idx22 INT, 
    point1 FLOAT, 
    point2 FLOAT 
); 

有多少點這樣我可以有合理的表現?我目前有大約1.5億個數據點,而且我可能不會超過3億個。假設我使用的是帶有4個雙核2ghz Xeon CPU和8GB內存的盒子。

+0

供參考:你說你有一個SMP系統。因此,建議您可能會用並行請求來攻擊此問題以細分問題。不知道問題域,只是從你的個人資料中做出一些推論。 – Roboprog 2009-12-17 06:10:24

回答

2

MySQL能夠滿足您的需求以及Alex對PostgreSQL的建議。合理的性能不應該很難實現,但是如果表將被大量訪問並且具有大量的DML,那麼您將希望更多地瞭解您最終選擇的數據庫所使用的鎖定。

我相信PostgreSQL可以使用行級鎖定開箱即用,其中MySQL將取決於您選擇的存儲引擎。 MyISAM只鎖定表級別,因此併發性受到影響,但InnoDB for MySQL等存儲引擎可以並將使用行級鎖定來提高吞吐量。我的建議是從MyISAM開始,只有在您發現需要行級鎖定時纔會移至InnoDB。 MyISAM在大多數情況下運行良好,重量輕。我使用MyISAM在MySQL中擁有超過10億行的表,並且具有良好的索引和分區,您可以獲得出色的性能。您可以在 MySQL Storage Engines以及關於表格分區的Table Partitioning上閱讀有關MySQL中存儲引擎的更多信息。這裏有一篇關於partitions in practice on a table of 113M rows的文章,您可能也會覺得有用。

我認爲將數據存儲在關係數據庫中的好處遠遠超過成本。一旦你的數據在數據庫中,你可以做很多事情。時間點恢復,確保數據完整性,更細粒度的安全訪問,數據分區以及通過通用語言提供給其他應用程序的可用性。 (SQL)等等。

祝您的項目順利。

7

PostgreSQL應該能夠充分容納你的數據 - 每表最多32TB等等,如果我理解正確,你說的是當前5GB,最大10GB(約36字節/行和高達3億行),所以幾乎所有的數據庫實際上都能夠輕鬆適應您。

+0

+1對於postgres來說,如果你打算對數據做任何統計工作(和「數據挖掘」意味着你會這樣),那麼使用postgres,你可以使用PL/R,它可以讓你的生活更輕鬆。 – rfusca 2009-07-18 03:28:37

3

供參考:Postgres在多處理器/重疊請求上的性能優於MySQL,這是我幾個月前閱讀的評論(對不起,沒有鏈接)。

我從您的個人資料中假設這是某種生物特徵(密碼子序列,酶與蛋白質氨基酸序列,或其他一些)問題。如果你打算用併發請求攻擊這個,我會和Postgres一起去。如果數據將被加載一次,然後由單個線程掃描,也許MySQL在其「不需要ACID」模式下將是最佳匹配。

在您選擇「最佳」堆棧之前,您有一些計劃要在訪問用例的情況下執行。

+0

幾乎肯定不會有併發請求,這是一個僅限於我自己的數據庫。我只想用SQL查詢替換很多我在文本文件上的hacky循環,因爲它會使事情變得更小並且不太可能包含錯誤。謝謝你的提示! – 2009-07-17 19:53:20