【发布时间】:2012-12-06 11:18:21
【问题描述】:
我有一个巨大的转储文件 - 12GB 的文本包含数百万个条目。每个条目都有一个数字 id、一些文本和其他不相关的属性。我想将此文件转换为可提供有效查找的文件。也就是说,给定一个 id,它会快速返回文本。局限性:
- 嵌入在 Java 中,最好没有外部服务器或外语依赖项。
- 读写磁盘,而不是内存 - 我没有 12GB 的 RAM。
- 不会爆炸太多 - 我不想将 12GB 文件变成 200GB 索引。我不需要全文搜索、排序或任何花哨的东西 - 只需键值查找。
- 高效 - 数据量很大,而我只有一台机器,所以速度是个问题。可以存储大批量和/或与多个线程一起工作的工具是首选。
- 存储多个字段很好,但不是必须的。主要关心的是文本。
欢迎您的建议!
【问题讨论】:
-
您应该指定转储的格式。
-
格式重要吗?听起来它需要加载到某个商店中,因此初始格式与此问题无关
-
@BrianAgnew 我在想如果每条记录一行,他可以创建一个手动索引
id=>lineNumber -
@RC 一些普通的 XML,其中每个条目都是一个标记。然而,一个功能齐全的 XML DB 将是一个矫枉过正,因为它没有任何层次结构。可能是 CSV,问题仍然存在。
-
@RC 使用行号而不是给定的 id 是一个有趣的想法:Java 从 12GB 大小的文件中提取一行的速度有多快?不过,我不确定我是否可以单独使用这个技巧,因为有一些交叉引用。
标签: java large-files key-value-store