2015-12-31 61 views
0

我目前使用avro文件將數據記錄存儲在大小高達50GB的文件中。問題是,除了順序分析文件,我必須對數據進行隨機查找。 avro的問題在於,我只能尋找某些同步點,並且必須遍歷該塊,直到找到所需的記錄,但這在某些情況下會導致顯着的性能損失。 我現在的問題是:有沒有辦法以不同的格式存儲數據,這種格式支持單個記錄的隨機查找,而且費用也不會太高。在多個對象上快速隨機查找

限制:

  • 必須放在磁盤上(RAM幾個用例太小)
  • 需要進行二進制
  • 編程語言:Python和Java和C++是可選的,但不錯有

歡呼和感謝

+0

如果你的數據是結構化的並且太重了,你可以試試'Apache Hadoop'(distributions [http://hortonworks.com/](http://hortonworks.com/),[http://www.cloudera .com/content/www/en-us.html](http://www.cloudera.com/content/www/en-us.html)''並用'Hive,Impala,Spark-流等' – Valijon

+0

這取決於你尋求什麼樣的執行。它們是用於簡單鍵(例如整數ID)還是更復雜?單個索引是否足夠,或者您是否爲每個文件執行不同類型的搜索? – mtth

+0

簡單的鍵就足夠了(主要是整數和雙精度字符串)。 @Valijon:謝謝你的建議,這個想法很酷,問題是我使用的模式比我發現的例子更復雜一點,這可能是一個問題嗎? –

回答

1

你可以使用Chronicle Map。這實現了一個堆堆ConcurrentMap,它給你基於密鑰的隨機訪問。您可以在內存中使用它,部分在磁盤上,使用共享內存和跨多個JVM的一個副本,並可選擇將其複製到多臺機器上。

聲明:我幫助構建了這個解決方案。