Hard commits are about durability, soft commits are about visibility

 Transaction Logs

首先介绍下solrcloud的index流程。

1)update请求发送给任意节点(NodeA)。

2)若该节点不是leader,将请求转发给leader。

3)leader将请求转发给所有副本节点(同一分片)。

后面就是执行结果的响应(response),所有副本节点反馈给leader,leader再反馈给原接收到请求的节点(NodeA)。

当所有leader都反馈给NodeA(执行update完毕),NodeA再反馈给“客户端”。在这时候,所有的更新操作被刷到tlog中。

如果JVM挂了,这些操作任然会被写入磁盘,如果操作系统挂了,就会丢掉这些操作日志。

如果JVM重启,那么solr会从tlog中进行数据恢复。

注意:

1)hard commit时产生一个新的tlog文件,如果被关闭的tlog中包含的documents超过100,则会删除最老的一个tlog文件。

e.g.

So consider if you are indexing in batches of 25 documents and hard committing after each one (not that you should commit that often, but just saying). You should have 5 tlogs at any given time. the oldest four (closed) contain 25 documents each, totaling 100 plus the current tlog file. When the current tlog is closed, the oldest tlog will be deleted, and a new one opened.

2)如果一直没有hard commit,那么这个tlog文件可能会很大(一直没有close)。当solr重启的时候可能会造成较大的性能消耗。

Soft commit

Soft commit让searcher对更新可见,但是会导致“top level caches”失效(filterCache、queryResultCache等),包括FieldValueCache失效,那么facet请求需要等待cache完成刷新。

如果频繁的soft commit会导致“top level caches”很少被命中,导致性能问题。

不过“segment level caches”并不会失效,例如function queries、sorting caches等。

Soft commit到底做了些什么?

1)tlog会持续被写入,并不会重新创建。

2)searcher对更新可见。

3)一些cache会被重新加载(top level caches)

虽然soft commit比hard commit更轻量,但是TANSTAAFL,There Ain't No Such Thing As A Free Lunch. Soft commit支持nrt,不过也需要额外的开销,这取决于你系统对nrt的忍耐度。

Hard commit

Hard commit到底做了什么?

1)创建新的tlog,如果超过100个documtns,那么就会删除老的tlog文件。

2)创建新的segment,并flush到磁盘。

3)segment合并有可能会被触发。

Hard commit还有一个选项:openSearcher。

openSearcher=true

Searchers会被重新打开,并且所有caches会失效,执行自动预热。只有这样才能对更新可见。

openSearcher=false

更新不可见。

简单的总结:

SoftCommit:更新可见,缓存失效,不会写入磁盘,追加tlog。

HardCommit:更新不可见,写入磁盘,新建tlog。

https://lucidworks.com/blog/understanding-transaction-logs-softcommit-and-commit-in-sorlcloud/

Hard commits, soft commits and transaction logs相关推荐

  1. mkdir: cannot create directory ‘/soft/hadoop-2.7.3/logs’: Permission denied问题

    启动hadoop时,报错"mkdir: cannot create directory '/soft/hadoop-2.7.3/logs': Permission denied" ...

  2. nginx: [emerg] CreateFile() “D:\soft\nginx-1.18.0/logs/nginx.pid“ failed (5: Access is denied)

    win10启动nginx报错 nginx: [emerg] CreateFile() "D:\soft\nginx-1.18.0/logs/nginx.pid" failed (5 ...

  3. Cherry-Pick、Squash Commits、Rebase使用

    文章目录 前言 一.Cherry-Pick 二.Squash Commits 三.Rebase 总结 前言 在Git多分支开发场景下,常常会遇到把a分支的提交记录代码复制到b分支,将多次提交记录合并成 ...

  4. Importing/Indexing database (MySQL or SQL Server) in Solr using Data Import Handler--转载

    原文地址:https://gist.github.com/maxivak/3e3ee1fca32f3949f052 Install Solr download and install Solr fro ...

  5. 大数据互联网架构阶段 全文检索技术

    全文检索 一. 全文检索的引出 我们生活中的数据总体分为两种:结构化数据 和非结构化数据 . 结构化数据: 指具有固定格式或有限长度的数据,如数据库,元数据等. 非结构化数据: 指不定长或无固定格式的 ...

  6. 网站搜索功能lucene

    网站搜索功能 lucene: 倒排索引 传统索引: 先加载全部内容,再内容遍历,从而查询到目标信息. 缺点:查询速度特别慢,而且随着数据量的增大越来越大. 什么是倒排索引? lucene入门案例 pa ...

  7. 浅谈solrCloud的分布式设计

    在solr cloud 中一个collection是一个 文档的 集合.一个collection可以分为多个slice,     每个slice的实例和其备份(replica)都称为shard.一个s ...

  8. SpringBoot:常用属性汇总

    2019独角兽企业重金招聘Python工程师标准>>> 可以在application.properties/application.yml文件中或作为命令行开关指定各种属性.本节提供 ...

  9. go 捕获数据库新增数据_更改数据捕获的经验教训

    go 捕获数据库新增数据 The article summarizes experiences from various projects with a log-based change data c ...

最新文章

  1. 中关村论坛首次设置技术交易板块,人工智能和新一代信息技术专场发布会即将召开...
  2. MyBatis学习总结(17)——Mybatis分页插件PageHelper
  3. [转]阿里编程规范(精简版)
  4. python(22)--面向对象1-封装
  5. 基于Java+SpringBoot+vue+node.js的图书购物商城系统详细设计和实现
  6. LeetCode--81. 搜索旋转排序数组Ⅱ(遍历法,二分法)
  7. 用JS控制下拉菜单效果
  8. AppWidget实现机制分析--launcher添加和删除appwidget深入分析
  9. hihoCoder - 1079 - 离散化 (线段树 + 离散化)
  10. FISCO BCOS PBFT是什么 基础流程
  11. Java设计模式4:单例模式
  12. 一个很烂的学生成绩管理系统
  13. 波形信号发生器设计 Proteus仿真--输出频率可调的正弦波、三角波、方波
  14. 5g和芯片有什么关系
  15. 两台(或多台)电脑怎么实现文件共享
  16. PPT画图-颜色搭配
  17. 【数字电子技术 Digital Electronic Technology 7】——时序逻辑电路分析 之 计数器完全攻略
  18. 深度学习第19天_项目1_文本分类的介绍
  19. Python3.7安装Geenlet
  20. vue+element树形控件实现根据条件(例id)禁用选项

热门文章

  1. python编程小游戏-python趣味入门——写几个常玩的游戏
  2. Jetson nano安装JupyterLab
  3. 在gitee下使用git克隆企业仓库
  4. pillow模块批量 读取图像、旋转、放缩、裁剪图片等操作
  5. PhpStorm 默认快捷键
  6. 2016_6_27日报
  7. 重读The C programming Lanuage 笔记三:简单计算器程序
  8. POJ 2455 Secret Milking Machine (二分+无向图最大流)
  9. Nhibernate 3.0 cookbook学习笔记 一对多与多对多映射
  10. 思维的禁锢 大脑的绳锁