2013-02-25 86 views
0

我还没有交出细节,但我正准备在Java中实现一个命令行搜索工具来搜索包含两个字段(docid,orgid)的文件。我已经了解到这个文件开始很小,并且一直在增长。我需要能够通过docid并取回组织。快速搜索大型平面文件的最佳方法是什么?

有谁可以告诉我 - 什么可能是最好的技术来搜索像我上面提到的平面文件?目前,我们只处理5万行(超过两个月)的文件中的数据,但一旦系统安装到位后,它的增长速度会更快。

它似乎将这个存储在一个可搜索的二进制系统中,但我不确定开始时需要注意什么。

我可以将其转储到数据库中,但这似乎是矫枉过正。另外要做到这一点,我将不得不安装在服务器上的数据库,这将是困难的。

+2

为什么它会过度杀伤? – 2013-02-25 19:31:58

+0

您会偶尔进行一次搜索,还是希望能够为多个查询提供快速答案的服务?如果a)在第二种情况下查看是否不能使用grep,egrep或awk,请考虑数据库 - 因为这正是数据库首先发明的原因。 – Ingo 2013-02-25 19:36:03

+2

我认为这将有助于提供更多的细节。多久添加一次以及添加多少次?一天一次?一天几千?连续地,在白天每秒几秒?像这样的东西。然后,每天有多少次搜索? 10,1000,100000?搜索单个项目还是组?它有多大?百万?十亿?什么? – 2013-02-25 19:36:05

回答

0

嘛最快的工具,这取决于关于docid和orgid的大小以及你拥有的ram数量可以使用,你可以简单地使用一个哈希表。将所有内容读入哈希表,然后根据哈希表进行查询。当然,不知道你需要对这个文件进行多少次查找,也不知道需要多长时间运行一次,以及它是否需要驻留在内存中。

其他选项(如先前建议的)将使用预先存在的数据库。最有效的方法是将文件读入数据库并截断文件,以便后续读取不必重新读取现有记录。再加上你的文件仍然可以管理。当然,如果你尝试这样做,会产生很多问题。例如:你能截断文件吗?另一个进程是否期望文件存在?当你尝试截断时,你如何管理竞争条件?等

使用类似hsqldbh2将是巨大的,因为它们可以嵌入到您的应用程序,你不必担心他们独立安装。当然,你需要为它们提供一个持久空间,否则它不会提供大量的帮助。

+0

是的,谢谢。我结束了解决服务器问题,并与hsqldb,谢谢你的建议。 – user1901482 2013-03-18 16:46:28

1

如果有可能我会去从一开始(也许是轻的东西像hsqldbh2在一些数据库中插入数据。

你的数据的行为像地图,所以也许像mapdb会更好(但你必须以确保您的架构是不可能改变的)。

如果你仍然需要去与该平面文件,也许grep的是最好的主意(这是搜索平面文件)