美文网首页
Solr的索引构建梳理

Solr的索引构建梳理

作者: Ombres | 来源:发表于2019-05-22 20:38 被阅读0次

软提交(Soft Commit),是把文档提交到内存中,是针对可见性的;硬提交(Hard Commit)是将内存中的文档写入到硬盘上,是针对持久化的。

基本概念

事务日志Transaction Log(Tlog)

  1. 记录的是原始文档,主要用于索引恢复功能。
  2. 无论是新增、更新(包括原子更新)都会将文档整个写到Tlog中。

硬提交Hard Commit

  1. 通过 solrconfig.xml 的选项来进行配置自动调用,或者也可以客户端显式调用。
  2. 作用是提交数据持久化到磁盘里面,并且能够查询到这条数据。
  3. Tlog会截断:当前 Tlog会关闭,一个新的 Tlog会开始,在已关闭的 Tlog中,如果较新的 Tlog超过了 100 个文档,则老的 Tlog会删除掉。
  4. 硬提交会结束当前索引段的构建,并开启新的索引段的构建。
  5. 一个可选项是openSearcher,开启一个新的searcher,以使数据能被后续的搜索检索到。
  6. 可能触发段合并。

请注意,openSearcher会使非段级别的缓存失效。

软提交Soft Commit

  1. 可通过 solrconfig.xml 的选项来进行配置自动调用,或者也可以客户端显式调用。
  2. 写入到内存中,同时也会把数据写入到Tlog。
  3. 软提交不会结束当前索引段的构建。
  4. openSearcher=true,使数据可见。

请注意,openSearcher会使非段级别的缓存失效。

索引构建流程

  1. 写入的数据被一个节点接收,然后转交到正确的 leader 节点。
  2. 从那个 leader 节点发送到所有相关分片的所有副本。
  3. 所有副本索引完后回应 leader 节点。
  4. leader 节点回应一开始的接收节点。
  5. 当所有的 leader 节点都回应之后,接收节点回应客户端。

当第五步完成的时候基本上数据已经提交给Tlog了。

注意

  1. 默认中,所有的文档在提交索引并返回成功的时候,文档已经被写入Tlog中了,但是可能还没有全部写到段中。
  2. 如果重启某个节点的服务,需要联系leader 节点,然后会执行恢复。

如果leader 节点接收到小于等于100个文档,则会从它自己的 Tlog恢复文档,缺失的文档会从leader节点同步。

如果leader 节点接收到大于100个文档,那么会直接从leader节点同步全部数据。

思考

  1. 检查Tlog大小,调整硬提交的间隔时间,使硬提交的间隔更合理。
  2. 正确合理的关闭solr,先停止写入,再进行硬提交,最后停止服务。
  3. 大量构建索引时,增加软硬提交的间隔时间。
  4. 合理设置软硬提交的间隔时间,需要依据目前的性能决定。没有银弹!!!!

特殊情况可采用的索引构建策略

1. 在批量索引时完全关闭tlog。
2. 离线构建索引,比如mapreduce方式构建索引。
3. 在构建索引时,每个分片只有一个leader节点,没有副本,构建完成后,再开启副本,让它们进行传统的复制来保持一致。注意,这个是自动实现的,如果副本发现和leader相差太远,就会触发传统的复制。复制完成后,它会继续接受leader节点的文档,并保存到自己的tlog中。

相关文章

网友评论

      本文标题:Solr的索引构建梳理

      本文链接:https://www.haomeiwen.com/subject/wllpzqtx.html