我正在使用一个相对较大的文本文件(70GB未压缩,15GB gzip),其中包含3列。文件的行格式为:
x1 | y1 | a1
x1 | y2 | a2
x2 | y3 | a3
x3 | y4 | a4
x和y是可包含1到4个单词的单词序列。第一列中的字符串是排序的而不是唯一的。第二列中的字符串不是唯一的,并且对第一列中的相同元素进行了排序。
在未压缩的文本文件中有大约700,000,000行,我想要做的是,对于元组(x,y)的查询,在第三列中获取值a。我需要在尽可能短的时间内访问它。
我尝试创建2个字典(字符串,整数列表),以便第一个字典将字符串映射到第一列中包含此字符串的行的索引,而第二个字段则相同字典和第二列。然后对于查询(x,y),我可以将这两个列表相交并获得包含“x | y | a”的行。然后,我可以使用字典将行号映射到文件中的偏移量,并使用随机访问文件来读取该行。
问题是这需要太多的内存(也许这也是因为我使用的是Java!)。我正在寻找一种可以非常快速地查询文本文件的解决方案,但不需要超过20/30 GB的内存。
我想有办法做这种事情,但我不熟悉它们。有什么想法吗?
由于