一、问题发现

有段代码更新 ES中的数据状态,将未读置成已读。是查一批,更新一批,再查再更新。

public Boolean updateDealStatus(WarningQuery warningQuery) {

....省略不重要的代码

while (true) {

// 调用服务

// ES查询不分页一次就出来10条

List list = warningEsDao.findByQuery(WarningZsdRiskEsEntity.class, warningZsdRiskQuery, esSort);

// 为空或者null就不继续跑了

if (list == null || list.isEmpty()) {

break;

}

log.info("查询出来的数量" + list.getSize());

// 将一批数据都置成已读

for (WarningZsdRiskEsEntity esEntity : list) {

esEntity.setDealStatus(1);

esEntity.setModified(System.currentTimeMillis());

warningEsDao.save(esEntity);

}

}

return true;

}

在测试的时候发现有问题。

我提前看了ES里这个范围的数据就27条,结果打印查询数量的日志log.info("查询出来的数量" + list.getSize());的结果类似这样。

查询出来的数量 10

查询出来的数量 10

查询出来的数量 10

查询出来的数量 10

查询出来的数量 10

查询出来的数量 10

查询出来的数量 10

查询出来的数量 10

查询出来的数量 10

查询出来的数量 8

查询出来的数量 7

查询出来的数量 2

查询出来的数量 0

这个肯定是有问题的,27就行了,结果查了这么多次。这个问题的原因就是 –  –ES 更新数据是有延迟的,也就是搜索只能支持“近实时”。

二、ES 近实时搜索介绍

在 Elasticsearch 中,写入和打开一个新段的轻量的过程叫做 refresh 。 默认情况下每个分片会每秒自动刷新一次。这就是为什么我们说 Elasticsearch 是 近 实时搜索:

文档的变化并不是立即对搜索可见,但会在一秒之内变为可见。

这些行为可能会对新用户造成困惑: 他们索引了一个文档然后尝试搜索它,但却没有搜到。这个问题的解决办法是用 refresh API 执行一次手动刷新

POST /_refresh // 刷新(Refresh)所有的索引。

POST /blogs/_refresh // 只刷新(Refresh) blogs 索引

尽管刷新是比提交轻量很多的操作,它还是会有性能开销。当写测试的时候, 手动刷新很有用,但是不要在生产环境下每次索引一个文档都去手动刷新。 相反,你的应用需要意识到 Elasticsearch 的近实时的性质,并接受它的不足。

三、解决问题

好知道了ES 的这个特性,造成了我们的bug 那就 扬长避短。

两种解决方法:

1、更新后等1s在去查。

2、用Scroll 去查,一次查询有个快照。我们只会搂一次快照版本的数据,然后进行写操作置状态。就不用管了。不会把一次已经置了状态的再搂出来的。

第二种方法的代码 。

public Boolean updateDealStatus(WarningQuery warningQuery) {

....省略不重要的代码

// 滑轮初始设置为null

String scrollId = null;

while (true) {

// 调用服务

// ES查询

EsScrollResponse response = warningEsDao.listByQueryScroll(WarningZsdRiskEsEntity.class, warningZsdRiskQuery, scrollId, 200);

// 为空或者null就不继续跑了

if (response == null || response.getData() == null || response.getData().isEmpty()) {

break;

}

// 将一批数据都置成已读

for (WarningZsdRiskEsEntity esEntity : response.getData()) {

esEntity.setDealStatus(1);

esEntity.setModified(System.currentTimeMillis());

warningEsDao.save(esEntity);

}

scrollId = response.getScrollId();

}

return true;

}

es mysql延迟_ES 近实时搜索 更新延迟问题相关推荐

  1. ElasticSearch探索之路(五)集群与分片:选举、动态更新、近实时搜索、事务日志、段合并

    文章目录 集群内部原理 集群与节点 分片 选举 分片内部原理 索引不变性 动态更新索引 近实时搜索 事务日志 段合并 集群内部原理 集群与节点 一个运行中的Elasticsearch实例称为一个节点, ...

  2. 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步

    转载自 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步 近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台.优先 ...

  3. lucene4.5近实时搜索

    近实时搜索就是他能打开一个IndexWriter快速搜索索引变更的内容,而不必关闭writer,或者向writer提交,这个功能是在2.9版本以后引入的,在以前没有这个功能时,必须调用writer的c ...

  4. 剖析Elasticsearch集群系列第三篇 近实时搜索、深层分页问题和搜索相关性权衡之道...

    http://www.infoq.com/cn/articles/anatomy-of-an-elasticsearch-cluster-part03?utm_source=infoq&utm ...

  5. ElasticSearch近实时搜索的实现

    ElasticSearch近实时搜索的实现 1.近实时搜索 1.1 实时与近实时 实时搜索(Real-time Search)很好理解,对于一个数据库系统,执行插入以后立刻就能搜索到刚刚插入到数据.而 ...

  6. solr 近实时搜索

    摘要: Solr的近实时搜索NRT(Near Real Time Searching)意味着文档可以在索引以后马上可以被查询到.Solr不会因为本次提交而阻塞更新操作,不会等待后台合并操作(merge ...

  7. centos7时间同步_基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步

    点击蓝色"架构文摘"关注我哟 加个"星标",每天上午 09:25,干货推送! 作者:Throwable    掘金:https://juejin.im/post ...

  8. 基于 Canal 和 Kafka 实现 MySQL 的 Binlog 近实时同步

    前提 近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台.优先级比较高的一个任务就是需要近实时同步业务系统的数据(包括保存.更新或者软删除)到一个另 ...

  9. MYSQL数据库跨服务器实时同步更新实践----文献阅读(污水管网水质预测)

    文章目录 摘要 一. MYSQL 数据库主从复制,实时同步的再现 1. 1 先下载虚拟机(硬件)与lunxi系统(centos7) 1.2 在lunxi 系统安装rpm 版mysql 5.5.55 1 ...

最新文章

  1. React模式:集中式PropTypes
  2. gpu处理信号_在PyTorch中使用DistributedDataParallel进行多GPU分布式模型训练
  3. mysql的正则书写规则_MySql中正则表达式的使用方法描述
  4. 兄弟,就你这智商就别出轨了吧?
  5. 计算机应用基础知识点提纲,计算机应用基础复习提纲
  6. 补码(为什么按位取反再加一):告诉你一个其实很简单的问题(转自醍醐灌顶)...
  7. 求朋友圈的个数 Friend Circles
  8. 想把PDF论文里面的图片导出来,有什么办法
  9. 三角形箭头向右的_向右三角形特殊符号
  10. [从零开始学习FPGA编程-26]:进阶篇 - 基本组合电路-数据选择器(Verilog语言)
  11. 手机、电话号码、邮箱、域名、身份证号的测试用例
  12. 【网络安全】GitHub项目监控,teemo子域名查询
  13. Win11微软输入法打不出汉字怎么办?
  14. 桌面视频录制软件有哪些?怎么简单又快地录制视频?
  15. 校园招聘-2017美团后台开发内推笔试编程题
  16. 【Allegro_SPB_16.6安装详细教程】手把手搭建到Win10
  17. 【300+精选大厂面试题持续分享】大数据运维尖刀面试题专栏(十四)
  18. imoo c1语言设置在哪里,imoo C1学生手机怎么样?imoo C1参数配置介绍
  19. 2008年8月5号,晴,今天天气开始变热了。业精于勤,荒于嬉。—— 韩 愈《进学解》
  20. Floyd算法求无向图最小环

热门文章

  1. 6.1 无监督学习-机器学习笔记-斯坦福吴恩达教授
  2. TCL with SNPS collection_limitget_lib_pins
  3. 五 Deepin安装java
  4. AMDF换成ACF和AMDF合作算法
  5. uboot添加自定义命令
  6. Ember 3.9 发布,3.8 升级为 LTS
  7. websocketd 实现浏览器查看服务器实时日志
  8. Android Studio检测内存泄露和性能
  9. mysql操作命令梳理(3)-pager
  10. 变量的存储类别以及作用空间