【发布时间】:2013-01-12 11:41:40
【问题描述】:
我有一个大型数据集,格式如下:
总共有 3687 个目标文件。每个包含 2,000,000 条记录。每个文件大小为 42MB。
每条记录包含以下内容:
- 一个 id(整数值)
- Value1(整数)
- Value2(整数)
- Value3(整数)
在数据收集过程中观察到每个文件的内容不会以任何方式排序或排序。
理想情况下,我想为这些数据建立一个索引。 (由 id 索引)这意味着以下内容:
将 id 集划分为可管理的块。
扫描文件以获取与当前工作组 id 相关的数据。
构建索引。
遍历下一个块并重复 1,2,3。
在我看来,这听起来不错,但来回加载 152GB 非常耗时,并且想知道最佳方法,甚至 Java 是否真的是用于此类过程的正确语言。
我的机器上有 256GB 的内存和 32 个内核。
更新: 让我修改一下,把 I/O 放在一边,假设文件在内存中的字节数组中。
解码具有 2,000,000 条记录且每条记录包含 4 个序列化的整数的 42MB 对象文件的最快方法是什么。
【问题讨论】:
-
“我想建立一个索引”——为什么?你想索引什么?你有什么要计算的吗?使用索引计算会更快吗?最重要的是:RDBMS 解决方案的索引对您有害吗?
-
@Csq 感谢您的提问。是的,我希望索引能够在以后而不是即时计算更多统计数据。 DBMS 不是我目前的选择。
-
您到底在索引什么? ID 还是 Value1、Value2、Value3?还是别的什么?
-
@Mats OP 说 由 id 索引。
-
Doh。感谢您对文本的编辑,它现在变得更具可读性。我一直盯着“按 id 索引”,但仍然没有看到它......
标签: java c++ lucene deserialization large-data