在不使索引脱机的情况下备份lucene索引的最佳实践是什么(热备份)?
发布于 2011-05-12 23:03:43
你不必为了备份索引而停止你的IndexWriter。
只需使用SnapshotDeletionPolicy,它允许您“保护”给定的提交点(及其包含的所有文件)不被删除。然后,将该提交点中的文件复制到您的备份,最后释放提交。
如果备份需要一段时间才能运行,这是可以接受的--只要您不使用SnapshotDeletionPolicy释放提交点,IndexWriter就不会删除文件(即使它们已经合并在一起了)。
这为您提供了一致的备份,它是索引的时间点映像,而不会阻塞正在进行的索引。
我在Lucene in Action (第二版)上写了这篇文章,有一篇论文摘录自http://www.manning.com/hatcher3 (免费)的书“用Lucene进行热备份”,其中更详细地描述了这一点。
发布于 2011-05-05 21:03:35
这个答案取决于(a)你的索引有多大以及(b)你使用的是什么操作系统。它适用于托管在Unix操作系统上的大型索引,并且基于Solr 1.3复制策略。
一旦文件被创建,Lucene不会改变它,它只会删除它。因此,您可以使用硬链接策略进行备份。方法是:
cp -lr只会复制目录结构,而不会复制文件,因此即使是100 in的索引也应该在不到一秒的时间内复制。
发布于 2011-05-05 20:57:10
在我看来,这通常足以停止任何正在进行的索引操作,并简单地获取您的索引文件的文件副本。另请看Solr中的snapshooter脚本,该脚本可以在apache-solr-1.4.1/src/scripts中找到,它实际上执行以下操作:
cp -lr indexLocation backupLocation另一种选择可能是查看Directory.copy(..)例程的程序性方法(例如,使用作为IndexWriter的构造函数参数给出的相同目录。您可能还会对Snapshooter.java感兴趣,它执行的功能相当于该脚本。
https://stackoverflow.com/questions/5897784
复制相似问题