2012-03-13 33 views
3

我有一個非常具體的數據格式和查詢需求,我需要知道NoSQL DBs是否適合這種需求。我是而不是問「哪個DB最好」。我對功能感興趣沉重的數學查詢和NoSQL數據庫

我需要以EAV風格存儲數據。具有稀疏索引的文檔商店是完美的。這樣我可以創建一個索引來對其每個參數的值。查詢時,只會觸及所需的索引。例如,MongoDB對此非常完美。 這是需要#1。

該查詢分兩個階段。第一個是「WHERE」的一個簡單等價物,涉及一系列針對實數的操作< =>。結果可能在成千上萬的記錄中,但通常會有成千上萬的記錄。 這是需要#2。

第二階段涉及重數學,我必須執行階段1的結果,以便排名他們。這個數學涉及大量使用權力和簡單的操作。然後結果按排名排序,並將「前100名」返回給客戶。 這是需要#3。

MongoDB是我比較熟悉的唯一的NoSQL數據庫,所以我將用它作爲參考。我不相信它可以在查詢中執行數學運算,即使可能,它也可能會很慢。我相信數學需要在客戶端進行(使用C或CUDA)。這意味着數據需要從DB快速傳輸到客戶端。我知道MongoDB有一個本地二進制連接,但是,例如,Couchbase使用REST,我相信這會使數據在大型數據集的數據傳輸上變慢。

我沒有在MongoDB上解決的原因是我需要分佈式服務器,例如Couchbase似乎更適合。

因此,我需要一個解決方案,即既可以在內部執行快速數學計算,從而限制要傳輸的記錄數,也可以非常迅速地傳輸記錄,以便可以在客戶端上處理這些記錄。我明白要知道唯一的方法是測試,但我不知道的是,這個問題是哪些NoSQL DB具有上述功能。

+0

查詢是臨時的。 – IamIC 2012-03-13 09:46:29

+0

Couchbase講述了memcached二進制協議,對於鍵/值的讀取和寫入,典型的等待時間小於1ms。對於您的查詢,您*可能*能夠將Couchbase map reduce用於數學運算,但我必須更多地瞭解您的用例。 – 2012-08-07 20:34:45

回答

1

MongoDB提供服務器端JavaScript執行,這可能會解決您的一些問題,但我恐怕不能說出效率。但是,我懷疑你的工作流程是I/O綁定的(你提到了數千條記錄),所以最好不要做客戶端處理。當然,基準測試會說實話,但我提出了另一個解決方案。您是否嘗試過Redis?它具有強大的排序集合,完全適合您的範圍和排名查詢。此外,下一個版本將引入LUA腳本,它可以補救您的工作流程的I/O特性。請記住,Redis真的超級快。

+0

我一直在看Redis。事實上,這個網站運行在它上:)唯一的問題是LUA何時發佈。 – IamIC 2012-03-13 11:02:14

+0

我無法確切地說,但是這篇文章會給我們希望:) http://antirez.com/post/redis-2.6-is-near.html – hymloth 2012-03-13 11:10:05

+0

看起來版本3會很好,但一種方式。你的意思是說,Redis已經對我的範圍(我得到)和排名查詢(如何?)進行了排序(我瞭解)。我的意思是,Redis似乎沒有在內部進行數學計算,所以人們仍然會遇到I/O瓶頸。你有什麼想法? – IamIC 2012-03-13 16:47:32