0

我还没有交出细节,但我准备用Java实现一个命令行搜索工具来搜索一个包含两个字段(docid、orgid)的文件。我了解到这个文件一开始很小,而且一直在变大。我需要能够传入 docid 并取回 orgid。

谁能告诉我 - 像我上面提到的那样搜索平面文件的最佳技术可能是什么?

目前,我们只处理文件中 50,000 行(超过两个月)的数据,但一旦系统到位,它会增长得更快。

似乎将其存储在可搜索的二进制系统中,但我不确定要从哪些方面着手。

我可以将它转储到数据库中,但这似乎有点矫枉过正。另外要做到这一点,我必须在服务器上安装数据库,这会很困难。

4

2 回答 2

2

如果可能的话,我会从一开始就在某个数据库中插入数据(也许像hsqldbh2这样的轻量级的东西。

你的数据表现得像 Map,所以也许像mapdb这样的东西会更好(但你必须确保你的模式不太可能改变)。

如果您仍然需要使用此平面文件,也许 Grep 是最好的主意(它是搜索平面文件的最快工具)

于 2013-02-25T20:11:30.733 回答
0

好吧,根据 docid 和 orgid 的大小以及您可以使用的 ram 数量,您可以简单地使用哈希表。将所有内容读入哈希表,然后针对哈希表进行查询。当然,不知道您必须对该文件进行多少次查找,也不知道它必须运行的频率,以及它是否需要驻留在内存中。

其他选项(如前所述)是使用 presisted DB。最有效的方法是将文件读入数据库并截断文件,以便后续读取不必重新读取现有记录。此外,您的文件仍然易于管理。当然,如果您尝试这样做,就会出现很多问题。例如:你可以截断文件吗?另一个进程是否期望该文件存在?当您尝试截断时如何管理竞争条件?等等

使用hsqldbh2之类的东西会很棒,因为它们可以嵌入到您的应用程序中,您不必担心它们是独立安装的。当然,您需要为它们提供一个持久化空间,否则它不会有很大的帮助。

于 2013-02-25T20:43:13.640 回答