2013-01-18 54 views
0

還有一個類似的問題Large data - storage and query 但我認爲我的問題更加困難。大數據:存儲和查詢

我有一個巨大的數據集,簡化問題,假設每條記錄都有3場,

日期,地點,對象

意味着這一天,對象訪問哪個地方。

每天可以有5000萬條新記錄。我需要保留100天的數據。

和查詢這樣的:

  1. 給定一個日期範圍,列出誰訪問過特定位置X的所有對象;
  2. 給定日期範圍,列出特定對象訪問過的所有位置。

我該如何設計?有沒有可能提供解決方案?任何工具,我應該嘗試嗎?我可以使用mongodb或hadoop嗎?

而且,查詢不需要很長時間,因爲它將從前端查詢。

謝謝。

回答

0

這個問題並不像聽起來那麼難。您需要兩個索引:

(Location, Date, Object) 
(Object, Date, Location) 

這兩個索引最適合您的查詢。沒有固有的可擴展性限制,您需要擔心。

您可能會考慮在Date上進行分區,以便您可以高效地刪除舊分區。

1

您描述的查詢非常適合關係數據庫。雖然你會有大量的數據,但查詢很適合一個相當簡單的索引方案。

一些商業數據庫具有地理空間擴展,它可以讓你擴展查詢「給出的日期範圍,告訴我對象已在該位置x 20公里之內」。

它似乎同時你有大量的行,實際的數據大小是相當有限的;期望它能夠適應高端機器的內存並不是不合理的。

大多數數據庫系統可以處理非常大的表 - 有沒有邏輯限制的RDBMS持有的記錄數量,但也有明顯的實際限制。甲骨文在大型數據集的性能方面擁有良好的聲譽,但絕對值得讓有經驗的Oracle DBA提供幫助。處理大量數據時的常用策略是「sharding」 - 將不同的記錄放在不同的表和/或服務器中。例如,如果所有查詢都是基於日期的,則可以將每個月的數據放在不同的物理服務器上。

我與RDBMS開始,創建一個測試數據集的工作,如果它運行和調整樣本查詢符合您的可擴展性的需求。調整硬件,並添加更多,如果你能負擔得起。

我不認爲你會從Hadoop中獲得很多好處 - 你沒有做太多的處理,你只是在搜索一個大的數據集。

MongoDB旨在處理文檔樣式的數據;你的數據本質上似乎是關係型的,而不是一個文檔。你可以在MongoDB中構建它,但我不確定你會得到多少好處。

+0

如果使用關係數據庫,我的問題是像sybase,db2這樣的典型數據庫,它們是否對錶中的記錄有限制?對於我的問題,我最終會有數十億條記錄。 – taox

+0

是的,RDBMS應該能夠處理這些記錄 - 我已經更新了答案。不過,您可能需要獲得DBA來幫助您調整數據庫。 –

+0

謝謝,我會試一試! – taox