2012-10-24 49 views
1

我有一個使用MySQL數據庫的網絡應用程序,其中包含大約十幾個列,以及數百萬條記錄用單字符代碼編碼。橫截面可以通過添加WHERE條款進行查詢:在數百萬行上計數不同的值 - 適用於NoSQL?

SELECT col1, COUNT(col1) AS num FROM my_table WHERE col2='U' GROUP BY col1

每個頁面使有關這類十幾查詢,每列減去一個WHERE子句中表示。

我確實有一個緩存系統,但每天都會更新數據(添加數十萬條記錄),並且最初生成緩存的過程非常緩慢。我仍然試圖圍繞着NoSQL的想法,似乎有一堆不同的範例。因此,如果每條記錄都採用相同的格式,並且沒有JOIN秒,那麼這對於轉換到NoSQL數據庫是否合適?如果是這樣,你會推薦哪一種(或哪種)?

編輯:我應該補充說,它需要PHP兼容。

回答

0

這是一個很好的問題。

根據我的經驗,在數百萬行的工作始終是棘手的

我認爲實現這一目標的最佳途徑是使用都建有這樣的查詢工作的特定數據庫。

默認情況下,MySQL是面向行的並且被設計爲作爲事務數據庫(OLTP)工作,這意味着它可以快速插入,更新,刪除少量行。但是,它不適用於使用這種查詢的大型數據集。因此,計算數百萬行的值將需要時間或有時不會給出結果(內存溢出...)

您的查詢是一個典型的分析查詢(包含列和GROUP BY的聚合)。您應該考慮使用列式數據庫。這些數據庫經過優化並設計用於處理大型數據集。 (Column oriented database

我從來沒有使用過NoSQL數據庫來處理大型數據集,因爲我總是需要有一個清晰定義的模式並且列式數據庫就足夠了。如果您想使用其中的一個,請確保它支持您想要執行的查詢(即聚合類型SUM,COUNT,...)。同時也要了解你將如何每天插入新的行。