【问题标题】:Fast random seek on multiple objects快速随机搜索多个对象
【发布时间】:2015-12-31 13:30:16
【问题描述】:

我目前正在使用 avro 文件将数据记录存储在最大为 50GB 的文件中。问题是除了顺序分析文件之外,我还必须对数据执行随机搜索。 avro 的问题是我只能寻找某些同步点,并且必须遍历块,直到找到我要寻找的记录,但这在某些情况下会导致显着的性能损失。 我现在的问题是:有没有办法以不同的格式存储数据,支持随机搜索单个记录而无需太多负担。

限制:

  • 必须放在磁盘上(在一些用例中 RAM 太小)
  • 需要二进制
  • 编程语言:Python、Java、C++ 是可选的,但很高兴拥有

干杯和感谢

【问题讨论】:

  • 如果你的数据结构太重,你可以试试Apache Hadoop (distributions http://hortonworks.com/, http://www.cloudera.com/content/www/en-us.html)` 并用Hive, Impala, Spark-stream等查询你的文件作为表...跨度>
  • 这取决于你执行什么样的搜索。它们是用于简单键(例如整数 ID)还是更复杂?单个索引是否就足够了,或者您是否对每个文件执行不同类型的查找?
  • 简单的键就足够了(主要是整数和双精度,很少是字符串)。 @Valijon:感谢您的建议,这个想法很酷,问题是我使用的架构比我找到的示例要复杂一些,这可能是个问题吗?
  • @M.Die - 你可以看看 PalDB (github.com/linkedin/PalDB)。

标签: java python avro random-access


【解决方案1】:

您可以使用Chronicle Map。这实现了一个堆外 ConcurrentMap,它为您提供基于密钥的随机访问。您可以在内存中使用它,部分在磁盘上,使用共享内存,在多个 JVM 上使用一份副本,并可选择在多台机器上复制它。

免责声明:我帮助设计了这个解决方案。

【讨论】:

    猜你喜欢
    • 2019-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-10
    • 2021-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多