2013-05-14 66 views
1

我有一堆事件,我需要先按位置組織,然後按時間,然後是其餘屬性(持續時間,成本,說明)的任何組織。問題是,現在有成千上萬的事件,因此查詢時,我們只需要檢索的一小部分,它應該走出來排序的,最好由第三方指數(成本或持續時間)。嵌套排序的最佳數據庫管理系統?

最後,使用該數據庫的應用程序需要獲取數據的超快速,會做上千查詢。不幸的是,我們目前被綁定到傳統的硬盤上,所以數據需要按順序存儲。它不會經常更新(每天幾百次寫入,而每天讀數百萬次)。

我們試過的MySQL,但即使是序號,它需要200毫秒來定位,我們需要數據的一部分,可能是因爲我們的硬盤必須做一噸的追求,即使它知道,所有的數據。

我們已經看了的NoSQL解決方案,如鍵值存儲(Redis的,CouchDB的),但Redis的沒有做築巢和CouchDB的不允許「有序集」,因爲它在JSON存儲。

有什麼解決方案可以幫助我們基於兩個(或更多)指示進行存儲?附加點,如果它有一個很好的Python接口!

回答

2

沒有問題,我不能幫太多的更精確的描述,但我已經解決了這樣的使用KD樹,這是像二叉樹,但在K個維度的問題。它們允許真的快K近鄰搜索(在我的情況,我可以查詢的約10萬份文件由緯度,經度和時間< 1毫秒。語料庫)他們唯一真正的缺點是,寫作對他們來說是煩人 - 爲了保持性能,必須經常重新平衡樹。如果您想嘗試一下,請查看scipy.spatial.cKDTree模塊。假設你已經安裝了scipy,你將在10分鐘內啓動並運行。

如果您正在尋找更多的現成的數據庫解決方案,我會考慮的PostGIS;它會讓你創建2-4維空間索引。這將是比一個滾你自己的KD樹方法更可靠和(多寫友好的),在性能一點點的費用。

編輯:我假設這裏的「位置」你的意思是地理位置(緯度,經度)。如果它是像「加利福尼亞州」這樣的離散位置,那麼顯然這個答案是沒有用的。

+0

非常感謝你的回覆!對不起,缺乏明確的 - 我們有城市爲位置,例如,「芝加哥」,所以空間的東西是真棒,但它不會幫助我們很多。 如何存儲多個東西快速查找組織的數據的任何想法?像上面的例子一樣,存儲按位置排序,然後開始時間,然後花費? – AC360

相關問題