Lucene是Key/Value HashMap的不错选择吗?

kno*_*kio 1 php java lucene hashmap

我正面临一个问题.我正在做一个迷你网络爬虫.现在拥有一个高效的HashMap非常重要.我只想要只有插入和查找的键/值数据结构.

我知道Lucene可以完成这项工作,只需要有两个领域:关键和价值; 但它有效吗?还有其他解决方案更简单吗?

Ps:它可以是PHP或Java,但我更喜欢PHP.

注意:我需要它持久化.它会多次打开和关闭.

gst*_*eff 5

如果你想要的只是一个非庞大的数据集的快速,持久的键值存储,Lucene可能不是最好的解决方案 - Berkeley DB将是显而易见的选择.也就是说,Grant Ingersoll在今年的Lucene Revolution会议上发表了关于这一点的演讲.他故意以支持Lucene的方式提出这个问题,并与几位观众进行了一次反复讨论当前文档数据库(如CouchDB)提供的Lucene没有提供的内容.对于可能最终需要二级索引的任何非大型数据集,我认为这是一个很好的解决方案.Lucene的键/值查找性能不会像Berkeley DB,CouchDB,Tokyo Tyrant等那么快,但它仍然非常快,对于许多应用来说已经足够了.我认为他在最近的笔记本电脑上测量键值/值约为50毫秒.如果稍后您需要添加二级索引(因为您可能会对Web爬网的结果感兴趣),那么使用Lucene比使用这些产品更容易.

其他工具,比如BDB,比Lucene更容易编码.但是,如果这是一个问题,只需使用Solr,这样可以轻松添加文档并通过简单的HTTP调用进行搜索(您需要修改schema.xml配置文件中的字段,但除此之外,Solr应该准备好了 - 开箱即用).

现在,如果您的数据集太大而无法合理地放在一台计算机上,那么分布式键值存储(如Project Voldemort或Riak)可能更容易设置和管理.但是Lucene会让你在一台机器上相当远,特别是如果你没有索引很多领域 - 至少是TB,我猜.

如果你确实使用Lucene,我会认真考虑除了你想要搜索的关键字之外是否真的没有任何属性 - 也可以在第一次存储它们,因为Lucene让它变得简单.