【发布时间】:2013-02-11 01:30:19
【问题描述】:
我还没有交出详细信息,但我正准备用 Java 实现一个命令行搜索工具,用于搜索包含两个字段(docid、orgid)的文件。我了解到这个文件一开始很小,而且一直在变大。我需要能够传入 docid 并取回 orgid。
谁能告诉我 - 像我上面提到的那样搜索平面文件的最佳技术可能是什么?
目前,我们只处理文件中 50,000 行(超过两个月)的数据,但一旦系统到位,它会增长得更快。
似乎将其存储在可搜索的二进制系统中,但我不确定要从什么开始。
我可以将其转储到数据库中,但这似乎有点矫枉过正。另外要做到这一点,我必须在服务器上安装数据库,这会很困难。
【问题讨论】:
-
为什么会矫枉过正?
-
您会偶尔进行一次搜索,还是将其作为一项有望为多个查询提供快速答案的服务?如果 a) 看看您是否不能使用 grep、egrep 或 awk,在第二种情况下,请考虑数据库 - 因为这正是最初发明数据库的原因。
-
我认为提供更多细节会有所帮助。多久添加一次,添加多少?一天一次?一天几千块?连续,在白天每秒几次?像那样的东西。然后,一天有多少次搜索? 10, 1000, 100000?是搜索单项还是组?它可能有多大?百万?数十亿?什么?
-
好的,谢谢。每月运行一次主应用程序,该应用程序将为每条记录附加 docid 和 orgid 到此文件(猜测约 25,000)。在此主应用程序运行后,我的应用程序。将回顾所有这些记录中的至少 1%,并需要根据 docid 找出 orgid 是什么。理想情况下,我希望这尽可能快。问题是,如果可以避免的话,我不想引入 3rd 方应用程序。就个人而言,我不喜欢这样的结果,但随着我了解更多,我会尝试做出更好的过程。 :-)
-
我要感谢大家的回答/cmets。我正在与另一位同事交谈,我们讨论了序列化和反序列化哈希图的过程。我原本以为 hashmap 不能处理大量元素,但现在我发现它可以了。我相信我可以在必要时管理序列化文件的大小。我可以在每个月运行后序列化不断增长的数据。然后将文件反序列化为哈希图,以便我可以搜索 orgid。感谢您推荐 h2 和 hsqldb。我对它们做了一些研究,如果我目前的想法不起作用,我可能会选择 hsqldb。
标签: java file search binary hashmap