Solr的软提交与硬提交

基于Qt与PaddleOCR的跨平台OCR工具开发实战 本文详细介绍了基于Qt与PaddleOCR开发跨平台OCR工具的实战经验。通过Qt的跨平台特性和PaddleOCR的高效识别能力,开发者可以快速构建支持Windows、Linux和macOS的OCR工具。文章涵盖了环境配置、核心功能实现、性能优化及打包发布等关键环节,特别针对中文识别、内存管理和多线程处理等常见问题提供了解决方案。 阅读详情

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 秒。


 

 

 

 

 

 

 

 

 

 

Onnxruntime之YOLOP部署过程记录 魔改YoloP部署过程记录 阅读详情

相关推荐

【HCIA学习记录】WLAN配置实验

HCIA-WLAN

寸先生的AI道路 3875

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

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

寒夜二十五 1611

GROMACS+PLUMED联合安装避坑指南:为什么你的plumed patch总是失败?

本文深入解析GROMACS与PLUMED联合安装中补丁失败的常见原因,并提供详细的避坑指南。针对版本兼容性、环境配置和编译选项等关键问题,给出从源码选择、环境搭建到手动合并补丁的完整解决方案,帮助用户成功整合这两个强大的分子动力学工具,实现增强采样模拟。

weixin_29302047的博客 290

Solr Transaction Log(Tlog)的作用

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

csd753111111的博客 1149

DSSAT模型建模教程

随着数字农业和智慧农业的发展,基于过程的作物生长模型(Process-based Crop Growth Simulation Model)在模拟作物对气候变化的响应与适应、农田管理优化、作物品种和株型筛选、农业碳中和、农田固碳减排等领域扮演着越来越重要的作用。现有版本V4.7能模拟27种主要农作物的生长发育和产量形成过程,被广泛应用于精细农业、水肥管理、气候变化、粮食安全、土壤碳周转、环境影响、农业可持续性、农业生态等诸多与农业生产和科研有关的领域。如果你是个模型入门者,这次将让你体验一键模拟的乐趣。

weixin_55561616的博客 1415

高速串行信号仿真避坑指南:为什么你的SIwave Xnet设置了却不出结果?

本文深入解析SIwave中Xnet功能在高速串行信号仿真中的常见问题,包括模型缺失、网络不完整和端口设置错误等关键误区。通过详细的电路元件模型验证、网络完整性检查及端口配置指南,帮助工程师有效解决仿真不出结果的问题,提升信号完整性分析效率。

weixin_29218963的博客 254

solrCloud选举leader的逻辑分析

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

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

Zlib1.2.11源码编译(Win10+VS2019)

下载 下载网址: zlib Home Site 得到文件: 解压缩到“D:\SourceCodes\zlib-1.2.11” 使用CMake配置、生成并打开项目 将CMakeLists.txt拖入CMake,配置(Configure): 生成(Generate) 打开项目(Open Project),CMake调用VS2019打开项目 生成debug版本 构建项目ALL_BUILD。成功生成debug版本 在“D:\Sourc...

Alexabc3000的专栏 1895

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的博客 605

网络安全与黑客攻防常见设备:前置机、跳板机、堡垒机与肉鸡

前置机、跳板机、堡垒机和肉鸡,这些看似冷僻的技术名词,实则是网络安全与黑客攻防战中的关键角色。它们有的守护着企业的数字Pltform,保卫网络安全;有的则成为黑客的跳板,游走于灰色地带。

网络技术联盟站 967

Spring AI Alibaba Agent开发实战:DeepResearch Agent调度系统

智能Agent调度系统通过专业化分工解决传统AI系统的三大痛点:通用模型专业性不足、处理效率低下和资源浪费。系统采用分层架构设计,核心组件包括智能调度器、Agent选择辅助器和集成工具类,实现问题分类、专业Agent匹配和搜索策略优化的全流程自动化。系统特点包括:1)配置驱动的灵活扩展;2)分层回退的容错机制;3)支持工具调用与传统搜索的智能切换。该架构通过策略模式和依赖注入等技术,在保证稳定性的同时显著提升了研究质量和效率,为企业级多Agent协作提供了完整解决方案。(149字)

wjianwei666的专栏 505

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

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

一个程序员的专栏 764

Google Earth Engine ——在 GEE 中计算面积含各类要素计算(土地分类为例)

在遥感应用中工作时,许多操作需要计算面积。例如,需要在监督分类后计算每个类所覆盖的面积,或者找出灾害后区域内受影响的面积。计算栅格和矢量的面积在大多数软件包中是一个简单的操作,但在 Google Earth Engine 中以稍微不同的方式完成 - 这可能会让初学者感到困惑。在这篇文章中,我将概述计算矢量和图像面积的方法。我们将涵盖以下主题,从简单到复杂。 特征的面积计算,即矢量数据 图像的面积计算(单类) 按类别计算图像的面积 按区域按类别计算图像的面积 按年按地区按类别计算图像的面积 准备数据

此星光明博客 4025

solr 的commit, soft commit等

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

Oliverkehl的专栏 4084

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

solr的软硬提交

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

zmywei_20160707的博客 490

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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的专栏 3783

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

理解SolrCloud的事务日志、软提交和硬提交

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

limengliang4007的博客 2764

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 418

Solr AutoSoftCommit

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

flysharkym的专栏 3106

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-

编码爱好者 292

solr(软提交和硬提交)

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

weixin_30576859的博客 477

Solr 软提交的设置方式

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

weixin_34071713的博客 364

solrclient php,PHP - Manual: SolrClient::commit (官方文档)

This will refresh the 'view' of the index in a more performant manner, but without "on-disk" guarantees. (Solr4.0+)A soft commit is much faster since it only makes index changes visible and does not f...

weixin_30245667的博客 147

solr 软提交、硬提交

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

ljz2016的博客 462

solr的硬提交软提交区别

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

allen的博客 5043
上一篇: HBase Indexer
下一篇: Hbase Indexer索引器的配置
Rita楠神
博客等级 码龄9年 27粉丝 61原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值