Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lucene 需要知道使用RAMDirectory的利弊_Lucene_Lucene.net - Fatal编程技术网

Lucene 需要知道使用RAMDirectory的利弊

Lucene 需要知道使用RAMDirectory的利弊,lucene,lucene.net,Lucene,Lucene.net,我需要提高Lucene搜索查询的性能。 我可以使用RAMDirectory吗?它优化了性能吗?这个有索引大小限制吗? 如果有人能列出使用RAMDirectory的利弊,我将不胜感激 谢谢。RAMDirectory速度更快,但不会写入磁盘。它只在程序运行时存在,并且每次程序运行时都必须从头开始创建 如果您的索引足够小,可以轻松地放入RAM中,并且您不经常更新它,那么您可以在磁盘上维护一个索引,然后使用RAMDirectory(Directory dir)构造函数从中创建一个RAMDirectory

我需要提高Lucene搜索查询的性能。 我可以使用RAMDirectory吗?它优化了性能吗?这个有索引大小限制吗? 如果有人能列出使用RAMDirectory的利弊,我将不胜感激


谢谢。

RAMDirectory速度更快,但不会写入磁盘。它只在程序运行时存在,并且每次程序运行时都必须从头开始创建


如果您的索引足够小,可以轻松地放入RAM中,并且您不经常更新它,那么您可以在磁盘上维护一个索引,然后使用
RAMDirectory(Directory dir)
构造函数从中创建一个RAMDirectory。一旦你支付了加载的代价,那么查询它应该比查询磁盘上的更快。但是一定要衡量差异——如果索引可以作为RAMDirectory放入内存,那么它也可以放入磁盘缓存,因此您可能看不到太大的差异。

您应该分析RAMDirectory的使用情况。至少在Linux中,由于操作系统缓冲I/O的方式,使用RAMDirectory并不比使用默认的FSDirectory快。

我比较FSDirectory和RAMDirectory

  • 索引大小为1.4G
  • Centos,5G内存
搜索1000个关键词,平均/最小/最大响应时间(ms)在这里

  • FSDirectory
    • 首轮:351/7/2611
    • 第二轮:47/7/837
    • 第三次运行(重启应用程序):53/7/2343
  • RAMDirectory
    • 首轮:38/7/1133
    • 第二轮:34/7/189
    • 第三次运行(重启应用程序):38/7/959
因此,您可以看到RAMDirectory比FSDirectory做得更快,但在“操作系统文件缓存预热”之后,速度差距并不明显。RMA目录的缺点是什么?在我的测试中

  • 它消耗了更多的内存,1.4G文件需要大约2G才能加载到内存中。而FSDirectory仅使用700m。这意味着完整gc的时间更长
  • 它需要更多的时间来加载,尤其是当索引文件很大时。打开索引时,需要将数据从文件复制到内存。这意味着重新启动应用程序时,请求将被阻止更长的时间
  • 同时维护两个索引是不太实际的。因为我们的应用程序每隔几个小时切换一次索引。我们希望新的索引正在升温,而旧的索引仍然在同一个tomcat中工作

感谢您的输入。我可以知道“足够小”有多小吗?我可以想象比您可用的物理RAM小。