Solr的软提交与硬提交

S.BUS协议及编解码,C语言源码 1、简介 SBUS本质是一种串口通信协议,采用100K的波特率,8位数据位,两位停止位,偶效验,即8E2的串口通信。 值得注意的有三点: 1.SBUS采用负逻辑,所以无论接收还是发送都要进行件取反(注意,一定要件取反),电路如下 这是我在网上看资料时看到的电路,实际上我用的是下面这个电路 2.SBUS有两种模式, a.高速模式:每4ms发送一次 b... 阅读详情

Solr的软提交与硬提交

硬提交是关于持久化的,软提交是关于可见性的。硬提交和软提交是相关的概念,但是它们的目的是不一样的。这句话隐含了很多细节,我们将就其中一些进行阐明。首先是几个定义:

Transaction Log(Tlog)

记录了原始文档,用于索引恢复功能。在 SolrCloud 中,每个节点都有自己的 tlog。在更新的时候,整个文档会写入 tlog 中。Tlog 是保证一致性的关键,有了它,就算索引段(segment)关闭前 JVM 崩溃了,索引也不会丢失。

【注意】一旦服务器没有正常关闭,则重新启动时,tlog 会进行回放。因此,如果你的 tlog 很大(我们见过 GB 级别的 tlog),则重启会非常慢,例如几个小时才启动成功。

Hard commit

硬提交通过 solrconfig.xml 的选项来实现,或者客户端显式调用。硬提交会结束当前索引段的构建,并开启新的索引段的构建。

openSearcher

选项的子属性,用来控制新提交的数据是否能被后来的搜索操作检索到(是否可见)。

Soft commit

软提交是比硬提交(openSearcher=true)使文档可见的更轻量级的操作,而且软提交不会结束当前索引段的构建。

【注意】虽然软提交是轻量级的操作,但是也不是完全没有代价的。你应该使软提交的时间间隔尽可能长来保证更好的性能。

Fsynch

底层 IO 命令,当 fsynch 调用返回后,数据必定已写到了磁盘中。这个和 java 程序的 flush 是不一样的。java 的 flush 只是保证已经向操作系统提交了数据,操作系统并没有立刻写到磁盘中,而是在适当的时候才会真正写入磁盘。

Flush

java 程序把数据提交给操作系统。这个操作返回后,数据并没有真正落盘,如果操作系统崩溃了,数据有可能会丢失掉。

【注意】

特别是在 solrcloud,多于一个副本的情况下,所有副本同时挂掉,并且数据都没有落盘,才会发生数据丢失,这种情况是很少见的。

操作系统在 flush 命令后大概 10-50 毫秒就会把数据写入磁盘。如果 jvm 崩溃了,操作系统仍然会把数据写到磁盘,但是,如果是操作系统崩溃,而 IO 子系统又没来得及把数据刷到磁盘,则会丢失数据。

 

Transaction Logs

索引构建的流程如下:

写入的数据被一个节点接收,然后转交到正确的 leader 节点。

从那个 leader 节点发送到所有相关分片的所有副本。

所有副本索引完后回应 leader 节点。

leader 节点回应一开始的接收节点。

当所有的 leader 节点都回应之后,接收节点回应客户端,在这个点上,所有的数据都已经 flush 到了集群中的所有相关节点的 tlog 中

如果 jvm 崩溃了,文档也已经安全地写到了 tlog 中,但是,如果是操作系统奔溃,那就不一定了。如果 jvm 崩溃(或者 killed -9 杀掉),然后重启,tlog 会回放。

【注意】你可以修改 solrconfig.xml 里面的配置,在返回前用 fsynch 而不是 flush,但这样是没有必要的。所有 leaders 和 replicas 同时因为硬件挂掉而丢失数据的几率是很小的。有些场景,就算存在细微的几率丢失数据也是不允许的,则可以采用这种牺牲吞吐量的方式。

Soft commit

对于 soft commit 的理解是,它能使文档可见,但是会有一些代价。尤其是在 solrconfig.xml 里定义的顶层的 cache(filterCache、queryResultCache 等)会失效,autowarning 会在顶层 cache 发生(比如 filterCache、queryResultCache)。这时候,newSearcher 的查询都会被执行,而且,fieldvaluecache 也会失效,因此,facet 查询也不得不等 cache 重新生成。在频繁的 soft commit 下,cache 基本上没什么效果,在某些场景下,最好去掉它。然而,索引段级别的 cache(译者注:比如 fieldcache),用于 function 查询,排序等,是基于索引段的,因此不会因为 soft commit 而失效,它们能继续被使用。

【注意】soft commit 用来支持近实时搜索,但是是有代价的,因此,设置 soft commit 的时间间隔尽可能长,来获取更好的性能。

Hard commit

hard commit 是有关持久化的,softcommit 是有关可见性的。这里,还要分两种情况,openSearcher=true 和 openSearcher=false。首先,我会解析一下这两种情况下都会发生的事情。不管 openSearcher=true 还是 openSearcher=false,都会出现以下的结果:

tlog 会截断:当前 tlog 会关闭,一个新的 tlog 会开始,在已关闭的 tlog 中,如果较新的 tlog 超过了 100 个文档,则老的 tlog 会删除掉。

当前正在索引的索引段会关闭,并 flush。

可能会触发后台的段合并。

这些就是 hardcommit 一定会发生的事情,无论 openSearcher 怎样设置。

openSearcher=true:Solr/Lucene searchers 被重新打开,所有的 cache 都失效(译者注:索引段级别的 cache 不会失效),autowarming 会执行。这是老版本唯一能看到新增加的文档的方法。

openSearcher=false:除了以上四点以外没有其他动作了。如果要搜索新的文档,需要执行一次 soft commit。

总结

Hard commits are about durability, hard commit实际上是将tlog中的修改写入到Lucene index中。硬提交是提交数据持久化到磁盘里面,并且能够查询到这条数据。硬提交是提交数据持久化到磁盘里面,并且能够查询到这条数据。

<autoCommit>

    <!--表示软提交达到1万条的时候会自动进行一次硬提交-->
    <maxDocs>10000</maxDocs>

    <!--表示软提交10秒之后会执行一次硬提交-->
    <maxTime>10000</maxTime>

    <!--true表示每一次硬提交都开启一个新的Searcher-->
    <openSearcher>false</openSearcher>
</autoCommit>

软提交是提交数据到内存里面,并没有持久化到磁盘,但是他会把提交的记录写到tlog的日志文件里面

下面就是自动软提交的配置,不需要自己维护提交(默认没有开启):

<autoSoftCommit> 

  <!--5秒执行一次软提交-->
  <maxTime>5000</maxTime> 
</autoSoftCommit>

两者结合着使用,既能保证数据的完整性,又能确保速度。

常见的应用场景

  1. 大批量索引构建

假设你希望设置 soft commit 时间间隔足够长,比如 10 分钟或更长(配置为 -1 则不自动 soft commit)。soft commit 是有关可见性的,我想大批量索引构建应该不是为了满足实时搜索的,所以没必要额外地打开任何类型的 searcher。

设置 hard commit 时间间隔为 15 秒,openSearcher=false。重申一下,这里假设你只是为了把大量数据导入 solr,而不是为了实时搜索。这样设置,就是最坏的情况也只是当你重启,你最多只需要从 tlog 回放 15 秒的数据。如果你的系统频繁重启,则先找到频繁重启的原因。把大批量的数据尽可能快地写入系统,将来用于搜索。比如,数据源的初始化。

一般是一些不常见的做法,它们包括:

+ 在批量索引时完全关闭tlog。

+ 离线构建索引,比如mapreduce方式构建索引。

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

  1. 索引更新很频繁,检索请求量很少

比如,日志检索。这个场景下,每天有大量的日志要写进来,但是检索请求却很少,主要用作故障排除和日志分析。

设置 soft commit 时间间隔足够长,设置为你能忍受新文档不可见的最长时间。这可能是几分钟或更长。甚至几个小时,直到执行一次 hard commit(openSearcher=true)或 soft commit。

设置 hard commit(openSearcher=false)的时间间隔为 15 秒。

  1. 索引更新很频繁,检索请求量大

这是近实时搜索的场景,是最复杂的场景,这需要有较多的经验,我是这样做的

设置 soft commit 的时间间隔为你能忍受的最大长度。不要听信你的产品经理的话“我需要不超过 1 秒钟的延迟”。时间间隔从长到短,逐渐尝试,看看用户服务是否满足,是否用户注意到了延迟,直到找到一个合适的值。soft commit 和近实时搜索非常好用,但是并非没有代价的。

设置 hardcommit 的时间间隔为 15 秒。


 

 

 

 

 

 

 

 

 

 

仿真每日一练 | 有限元模态分析详解 结构的振动一直是工业领域产品分析的重点,在振动的仿真分析中,模态分析是其最基本的分析类型,通过研究结构的固有频率振型对产品的设计提供指导。2.2、在interaction模块,通过special->Spring,在各点之间分别创建弹簧单元,弹簧刚度为1000。2.1、在interaction模块,创建两个RP点,两侧RP点各间隔100大小,如图3所示;其中M、K、C均为n*n的矩阵,s、x、v为n*1的矢量,n为系统自由度数量。3、在Assembly模块创建装配体,两点之间的距离为100,如图2所示; 阅读详情

相关推荐

十九、帧间预测编码_2、解码、显示顺序图像管理、参考帧管理

一、基本概念 1.1H.264的解码顺序显示顺序: 解码过程中,每一帧的数据按照相应的NAL Unit在码流中的顺序传入解码器进行解码 由于B帧的存在,视频帧在输出时会进行顺序重排 1.2frame_numPOC frame_num:表示解码顺序 POC:表示显示顺序(picture_order_count) 在H.264的码流中,表示解码顺序显示顺序分别有相应的语法元素表示。这两个值都会在码流中保存,并在读取slice信息时解析(SliceHeader中) 1.3参考帧列表 某一帧图像在解

叮咚的博客 1308

solr提交(softcommit)提交(commit)的区别[看完这篇就懂了]

(一)数据在存入solr时,会有几种提交方式,这里主要记录下提交提交这两种方式: 提交(commit): 这种提交会把文档立即持久化到磁盘,并可以让你能立马查询到它,因为它会开启一个新的searcher,但是它缺点很明显,就是很耗性能,并会阻塞到提交任务完成.简单的理解就是它是把数据一条一条的插入solr中,效率较慢,耗费资源较多. 提交(softcommit): 这种提交不会立...

寒夜二十五 1604

Unreal 从入门到进阶 之 如何实现Pixel Streaming

Unreal Engine 5 (UE5) 的 Pixel Streaming 是一项基于云端的实时流媒体技术,允许将 UE5 应用的高质量图形渲染结果通过 WebRTC 协议传输到用户的浏览器或轻量级设备,同时将用户输入(如鼠标、键盘、触控)回传到服务器处理。UE的插件相对比较好用,但是就是环境下载总是失败。希望这篇文章对你有所帮助。

TxNet 1330

Solr Transaction Log(Tlog)的作用

记录了原始文档,用于索引恢复功能。在 SolrCloud 中,每个节点都有自己的 tlog。在更新的时候,整个文档会写入 tlog 中。在原子更新(Atomic update)时,仍然是整个文档写进来,包括了从老文档中读取出来的...

csd753111111的博客 1125

solrCloud选举leader的逻辑分析

solrCloud选举leader的逻辑分析 转贴请声明原文:http://blog.csdn.net/duck_genuine/article/details/8491901 First call *setup(ElectionContext) to ensure the election process is in it'd.  Next calljoinElection(Electio

搜索引擎、个性化推荐、大数据相关学习笔记| 5416

solr–主从配置

solr–主从配置 文章目录solr--主从配置一、简介二、主solr器配置2.1 安装主solr2.2 修改core的solrconfig.xml配置文件2.3 重启主solr三、从solr配置3.1 安装从solr3.2 修改core的solrconfig.xml配置文件3.3 重启从solr四、注意 一、简介 这里介绍solr的主从配置,通常一主多从,主用来写数据,从用来读数据。从而分担读压...

panda-star的博客 601

Solr服务,阿里云报警说是发现了漏洞,文件中包含WebShell代码

我查看了log里面的内容(中文显示乱码),记录了我们这个分片上的索引添加的一些内容,很奇怪的是里面竟然有异常信息,感觉像是我们的爬虫程序执行了一个API的接口调用,接口调用失败然后报了异常,我猜测这也导致了这个log文件的状态出现了异常,所以solr一直没有更新这个log。请注意,Tlog文件是可选的,并且可以在Solr配置中禁用。我们的场景是数据采集后存储在Solr里面,所以tlog里面记录了对索引的操作,采集的内容里面有WebShell代码,特别是一些技术类博客的内容,里面有代码块。

一个程序员的专栏 750

solr 的commit, soft commit等

背景最近又被soft commit hard commit搞得有点迷糊,其实都怪自己没有早点看源代码。问题出自这段代码,这也是我一开始接触solr时,查到的代码sample(事实证明问题都出在这里,引以为戒,有问题真的不要不求甚解)if (rs.next()){ while (true) { NiuniuSolrInputDocument doc = new Niuniu

Oliverkehl的专栏 4081

solr提交

最近又被soft commit hard commit搞得有点迷糊,其实都怪自己没有早点看源代码。问题出自这段代码,这也是我一开始接触solr时,查到的代码sample(事实证明问题都出在这里,引以为戒,有问题真的不要不求甚解) if (rs.next()){ while (true) { NiuniuSolrInputDocument doc = new Niuni

zmywei_20160707的博客 488

solr提交提交

solr4.0中增加了提交,加快了index速度,具体如下: A commit operation makes index changes visible to new search requests. A hard commit also calls fsync on the index files to ensure they have been flushed to st

beijing20120926的专栏 3777

理解SolrCloud的事务日志、提交提交

转载:http://www.lucener.com/articles/2017/03/17/1489704450618.html 从solr4.0起,solr多了一个提交(softcommit)功能,而提交功能(hardcommit)多了一个参数-openSearcher。通常,提交提交的作用很容易混淆,尤其是它们对于事务日志(transation log)的意义。这两个功能的作用

limengliang4007的博客 2759

SolrCloud NRT 近实时搜索

1: -1代表禁用提交(以毫秒为单位进行提交) &lt;autoSoftCommit&gt;         &lt;maxTime&gt;${solr.autoSoftCommit.maxTime:-1}&lt;/maxTime&gt;       &lt;/autoSoftCommit&gt; 2: commitWithin 默认使用提交, 若为false,则使用提交 ...

Java Programming 416

Solr AutoSoftCommit

什么是SoftCommit? 请戳Solr Guide:Near Real Time Searching(NRT) https://cwiki.apache.org/confluence/display/solr/Near+Real+Time+Searching 。 里面讲了AutoCommitAutoSoftCommit如何进行配置。配置建议:A common configuration

flysharkym的专栏 3104

Hard commits, soft commits and transaction logs(solrcloud同步)

The mantra Repeat after me “Hard commits are about durability, soft commits are about visibility“. Hard and soft commits are related concepts, but serve different purposes. Concealed in this simple

飞鸟快快的专栏 1026

solr 笔记整理

写在前面 solr版本 7.5.0 下载地址:http://archive.apache.org/dist/lucene/solr/7.5.0/ zk版本:3.4.14 下载地址:https://archive.apache.org/dist/zookeeper/zookeeper-3.4.14/ cloud 模式如何使用 配置zk环境 修改bin/solr.in.sh 脚本,解开 ZK_HOST 相关选项,填写zk地址,用逗号分隔,例如 :ZK_HOST="docker-zookeeper-3.4.14-

编码爱好者 289

solr提交提交

  因项目用到了solr作为检索引擎,最近业务需求新增一个字段作为检索条件,由于该字段经常被修改到,并且关联的文档比较多,如果修改的时候立即修改索引,则时间会很久,网上查了很多资料,发现了解决方案,今天特此记录一番。   方案:采用提交方式。     solr4.x后引入了提交solrfCommit。     solr配置方式:在solrconfig.xml中设置        ...

weixin_30576859的博客 475

Solr提交提交的内部实现

1:提交(到内存中)1.1:java实现提交。1.2:solr web 界面可以显示1.3:到你的${SOLR_HOME}/example/solr/collection1/tlog可以看到日志文件的生成没有发生变化,不管你调不调用commit方法,不管是提交还是提交都是记录一个log文件。防止宕机等等问题,在重启的时候会加载log日志文件。1.4:到${SOLR_HOME}/exampl...

小白虫的博客 2333

【搜索引擎Solr】配置 Solr 以获得最佳性能

Apache Solr 是广泛使用的搜索引擎。有几个著名的平台使用 Solr;Netflix Instagram 是其中的一些名称。我们在 tajawal 的应用程序中一直使用 Solr ElasticSearch。在这篇文章中,我将为您提供一些关于如何编写优化的 Schema 文件的技巧。我们不会讨论 Solr 的基础知识,我希望您了解它的工作原理。虽然您可以在 Schema 文件中定义...

全网:架构师研究会 1445

Solr 提交的设置方式

2019独角兽企业重金招聘Python工程师标准>>> ...

weixin_34071713的博客 363

solr建索引优化

这是我 2016 年写的文章,发出来,做索引优化的朋友都可以参考下。名词解释Lucene:高性能的全文检索开源的 Java 工具包。Solr :高性能的利用 java 开发的、开源的,基...

438

solr之commitsoftcommit

solrconfig.xml里有两个配置项,autoCommitautoSoftCommit,他们是干什么的呢?他们是solr提交文档的两种方式。1. commit一般提交又或者叫提交(hard commit), 使用这种提交会把文档立即持久化到磁盘,并可以让你能立马查询到它,因为它会开启一个新的searcher,但是它缺点很明显,就是很耗性能,并会阻塞到提交任务完成,使用它是非常昂贵的操作。

aiyueqingfeng的专栏 6683

solr提交提交区别

solr中,有提交提交两种方式索引数据: 提交: solrService.commit(true,true,true)其中提交提交数据持久化到磁盘里面,并且能够查询到这条数据。 按照下面的配置就会使用solr的自动提交功能,就不用我们自己手动提交。 <autoCommit> <!--表示达到1万条的时候会自动进行一次提交--> <maxDocs>10000</maxDo

allen的博客 5039

turbo code.zip_Turbo MAP_lte turbo_lte turbo码_turbo map_turbo译码

LTE标准的turbo码编译码仿真,使用MAP译码算法。

基于Python实用技巧的Python编程小例子设计源码

本项目汇集了295个Python编程实用小例子设计源码,涵盖235个Markdown文档、47个PNG图片、8个JPG图片、2个GIF图片、2个Python脚本以及1个Git忽略文件,旨在通过丰富的实例帮助学习者开发者提升Python编程技能。

上一篇: HBase Indexer
下一篇: Hbase Indexer索引器的配置
Rita楠神
博客等级 码龄8年 27粉丝 61原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值