2012-04-13 50 views
0

有没有Java中的任何内置库在大约100GB的大文件中搜索字符串在Java中。我目前使用二进制搜索,但效率不高。建立在图书馆的100GB文件进行有效搜索

+0

告诉我们关于100GB数据集的信息。它由什么组成,任意字符串?这些琴弦是否以特定方式排列?你允许预处理数据集吗?你需要执行什么类型的搜索,完全匹配整个字符串?就目前而言,问题是*方式*不明确。 – NPE 2012-04-13 15:51:46

+0

@aix感谢您的回复。数据集由任意字符串组成。是的,我想对整个字符串做精确匹配 – 2012-04-13 15:54:05

+1

如果数据行的定位比想象中使用MapReduce ...特别是在数据大小上。 – khmarbaise 2012-04-13 15:56:53

回答

0

据我所知,Java不包含任何文件搜索引擎,有或没有索引。这也有一个很好的原因:搜索引擎实现与输入数据集搜索模式格式固有地相关。两者之间的微小变化都可能导致搜索引擎的巨大变化。

对于我们能够提供你需要一个更具体的答案:

  • 描述正是数据集:文件的数量,路径结构和平均大小,每个条目的格式以及每个包含的令牌的格式。

  • 描述究竟您的搜索模式:是那些固定的字符串,glob模式,或者说,正则表达式?你期望这个模式在每一行中都匹配一整行或一个特定的标记吗?

  • 描述确切您想要的搜索结果:你想要精确或近似匹配?你想获得文件中的位置,还是提取特定的令牌?

  • 描述正是您的要求:你能事先建立索引?数据集是否预期会实时修改?

  • 说明为什么不能使用专为这类工作设计的第三方库,如Lucene。

  • 解释为什么当前的二进制搜索,它应该有一个的O(logn)复杂性是不太有效。 可能是会更快,并且具有恒定的复杂度将涉及使用散列表。

这可能是最好的,如果你从更广泛的角度来描述你的问题。例如,可以从您的样本数据集中假设您拥有的是一组单词以及相关的偏移量或文档标识符列表。在这样的一个集合中进行搜索的简单方法是将一个字/文件位置索引存储在散列表中,以便能够在恒定时间访问每个关联列表。

0

如果你不想使用为搜索而构建的工具,那么将数据存储在数据库中并使用sql。

相关问题