首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Lucene索引备份

Lucene索引备份
EN

Stack Overflow用户
提问于 2011-05-05 20:39:07
回答 4查看 6.3K关注 0票数 16

在不使索引脱机的情况下备份lucene索引的最佳实践是什么(热备份)?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-05-12 23:03:43

你不必为了备份索引而停止你的IndexWriter。

只需使用SnapshotDeletionPolicy,它允许您“保护”给定的提交点(及其包含的所有文件)不被删除。然后,将该提交点中的文件复制到您的备份,最后释放提交。

如果备份需要一段时间才能运行,这是可以接受的--只要您不使用SnapshotDeletionPolicy释放提交点,IndexWriter就不会删除文件(即使它们已经合并在一起了)。

这为您提供了一致的备份,它是索引的时间点映像,而不会阻塞正在进行的索引。

我在Lucene in Action (第二版)上写了这篇文章,有一篇论文摘录自http://www.manning.com/hatcher3 (免费)的书“用Lucene进行热备份”,其中更详细地描述了这一点。

票数 21
EN

Stack Overflow用户

发布于 2011-05-05 21:03:35

这个答案取决于(a)你的索引有多大以及(b)你使用的是什么操作系统。它适用于托管在Unix操作系统上的大型索引,并且基于Solr 1.3复制策略。

一旦文件被创建,Lucene不会改变它,它只会删除它。因此,您可以使用硬链接策略进行备份。方法是:

  • 停止索引(并执行commit?),这样您就可以确保不会在写入过程中创建快照
  • 创建索引文件的硬链接副本(使用cp -lr)
  • restart indexing

cp -lr只会复制目录结构,而不会复制文件,因此即使是100 in的索引也应该在不到一秒的时间内复制。

票数 2
EN

Stack Overflow用户

发布于 2011-05-05 20:57:10

在我看来,这通常足以停止任何正在进行的索引操作,并简单地获取您的索引文件的文件副本。另请看Solr中的snapshooter脚本,该脚本可以在apache-solr-1.4.1/src/scripts中找到,它实际上执行以下操作:

代码语言:javascript
复制
cp -lr indexLocation backupLocation

另一种选择可能是查看Directory.copy(..)例程的程序性方法(例如,使用作为IndexWriter的构造函数参数给出的相同目录。您可能还会对Snapshooter.java感兴趣,它执行的功能相当于该脚本。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5897784

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档