Hard commits, soft commits and transaction logs
“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的更多相关文章
- 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” 注:/soft/ha ...
- Solr Cloud - SolrCloud
关于 Solr Cloud Zookeeper 入门,介绍 原理 原封不动转自 http://wiki.apache.org/solr/SolrCloud/ ,文章的内存有些过时,但是了解原理. Th ...
- Java性能提示(全)
http://www.onjava.com/pub/a/onjava/2001/05/30/optimization.htmlComparing the performance of LinkedLi ...
- Microsoft SQL Server Trace Flags
Complete list of Microsoft SQL Server trace flags (585 trace flags) REMEMBER: Be extremely careful w ...
- What is SolrCloud? (And how does it compare to master-slave?)
What is SolrCloud? (And how does it compare to master-slave?) SolrCloud is a set of new features and ...
- 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 ...
- Solr基础知识二(导入数据)
上一篇讲述了solr的安装启动过程,这一篇讲述如何导入数据到solr里. 一.准备数据 1.1 学生相关表 创建学生表.学生专业关联表.专业表.学生行业关联表.行业表.基础信息表,并创建一条小白的信息 ...
- PHP7函数大全(4553个函数)
转载来自: http://www.infocool.net/kb/PHP/201607/168683.html a 函数 说明 abs 绝对值 acos 反余弦 acosh 反双曲余弦 addcsla ...
- The Myths about Transactions (ACID) and NoSQL
There has been widespread characterization of one of the major distinctions between NoSQL and tradit ...
随机推荐
- CF444(Div. 1简单题解)
A .DZY Loves Physics 题意:给定带点权和边权的无向图,现在让你选一些点,使得 点权和/被选点对间的边权和 最大. 思路:不难证明,选择边和对应的两点是最优的. #include&l ...
- SVD分解求解旋转矩阵
1.设是两组Rd空间的点集,可根据这两个点集计算它们之间的旋转平移信息. 2.设R为不变量,对T求导得: 令 则 将(4)带入(1)得: 令 则 (相当于对原来点集做减中心点预处理,再求旋转量) 3. ...
- 软件安装配置笔记(一)——Oracle及PLSQL Developer的安装与配置
一.Oracle: Oracle服务器端或桌面端可以创建本地的Oracle数据库,而Oracle客户端是用来远程连接其他服务器或电脑上的Oracle服务器端或桌面端的,安装客户端软件只需配置网络连接文 ...
- 外部javascript
- Spring mvc下载文件java代码
/** * 下载模板文件 * @author cq */ @RequestMapping("/downloadExcel.do") public ResponseEntity< ...
- int &p
int &p为引用,而int p为定义变量.二者区别如下:1 引用在定义的时候必须赋值,否则编译会出错.正确的形式为int &p = a;其中a为int型变量.2 引用在定义时不会分配 ...
- Windows共享设置
Windows文件共享默认是开启的,任何用户都可以方便的设置共享目录.那么如何关闭并禁止呢. ====打开或关闭网上邻居的网络发现:1. 右键单击,网上邻居,弹出菜单选择:属性,打开网络和共享中心界面 ...
- oracle ZHS16GBK的数据库导入到字符集为AL32UTF8的数据库(转载+自己经验总结)
字符集子集向其超集转换是可行的,如此例 ZHS16GBK转换为AL32UTF8. 导出使用的字符集将会记录在导出文件中,当文件导入时,将会检查导出时使用的字符集设置,如果这个字符集不同于导入客户端的N ...
- python猜数字(多种实现方法)
设定一个理想数字比如:66,让用户输入数字,如果比66⼤,则显示猜测的结果⼤了:如果比66⼩,则显示猜测的结果小了;只有等于66,显示猜测结果 第一种方式(最简单的方式实现) n = 66 # 理想数 ...
- python与系统做交互常用的模块和使用方法
1.使用os模块与系统做简单命令的交互 >>>import os >>>os.popen('pwd') <open file 'pwd', mode 'r' ...