当业务量上升后,由于mysql对全文检索或模糊查询支持的能力不强,在系统中查询的地方,往往会出现慢sql等,拖累系统其他模块,造成性能低下。

随着ES使用普及率的升高,ES是mysql的一个有效补充。我们可以将数据发送到搜索引擎(如ES)上,由搜索引擎来提供专业的服务。

接下来,就结合工作中实际用到的场景,对数据从mysql到es的同步进行一些分析。

在实践中我总结出了以下几种方式。

第1种:同步双写

这是一种最为简单的方式,在将数据写到mysql时,同时将数据写到ES,实现数据的双写。

优点:

业务逻辑简单。

缺点:

硬编码:有需要写入mysql的地方都需要添加写入ES的代码;业务强耦合;存在双写失败丢数据风险;性能较差:本来mysql的性能就不是很高,再加写一个ES,系统的性能必然会下降。说明:

上面第3点讲到的双写失败风险,包括以下3种:

ES系统不可用;应用系统和ES之间的网络故障;应用系统重启,导致系统来不及写入ES等。针对这种情况,有数据强一致性要求的,就必须双写放到事物中来处理,但是一旦用上事物,则性能下降更加明显。

第2种:异步双写(MQ方式)

针对第一种同步双写的性能和数据丢失问题,可以考虑引入MQ,从而形成了异步双写的方案,如下图所示:

由于MQ的性能基本比mysql高出一个数量级,所以性能可以得到显著的提高。

优点:

性能高;不存在丢数据问题。缺点:

硬编码问题:依然存在业务强耦合:依然存在复杂度增加:系统中增加了mq的代码,;可能存在时延问题:程序的写入性能提高了,但是由于MQ的消费可能由于网络或其它原因导致用户写入的数据不一定可以马上看到,造成延时。第3种:异步双写(Worker方式)

上面两种方案中都存在硬编码问题,也就是有任何对mysq进行增删改查的地方要么植入ES代码,要么替换为MQ代码,代码的侵入性太强。

如果对实时性要求不高的情况下,可以考虑用定时器来处理,具体步骤如下:

数据库的相关表中增加一个字段为timestamp的字段,任何crud操作都会导致该字段的时间发生变化;原来程序中的CURD操作不做任何变化;增加一个定时器程序(京东内部叫Worker),让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取出来;逐条写入到ES中。入下图所示

优点:

不改变原来代码,没有侵入性、没有硬编码;没有业务强耦合;不改变原来程序的性能;Worker代码编写简单不需要考虑增删改查。缺点:

时效性较差,由于定时器工作周期不可能设在秒级,所以实时性没有上面2中好;对数据库有一定的轮询压力,一种改进方法是将轮询放到压力不大的重库上。第4种:Binlog 同步方式:

上面三种方案要么有代码侵入,要么有硬编码,要么有时延,第4中方案,可以利用mysql的binlog来进行同步

具体步骤如下:

1) 读取mysql的binlog日志,获取指定表的日志信息;

2) 将读取的信息转为MQ;

3) 编写一个MQ消费程序;

4) 不断消费MQ,每消费完一条消息,将消息写入到ES中。

优点:

没有代码侵入、没有硬编码;原有系统不需要任何变化,没有感知;性能高;业务解耦,不需要关注原来系统的业务逻辑。缺点:

构建Binlog系统复杂;也像方案二,存在MQ延时的风险

es同步mysql方案_ES数据同步方案相关推荐

  1. MySQL异构同步_详解MySQL数据库异构数据同步

    本文主要向大家介绍了MySQL数据库异构数据同步,通过具体的内容向大家展现,希望对大家学习MySQL数据库有所帮助. 在实现levelDB挂载成MySQL引擎时,发现在实际存储是key-value格式 ...

  2. 使用canal解决Mysql和Redis数据同步问题

    前言 千呼万唤始出来,停了好个月,终于又开始动手写文章了,今天带给大家的是阿里的一个工具Canal,这个工具是企业做数据同步使用的比较多的方案,希望对你有所帮助,喜欢的话请给个好评 工作原理分析 我们 ...

  3. es mysql 同步插件_[es和数据库怎么同步]mysql与elasticsearch实时同步常用插件及优缺点对比(ES与关系型数据库同步)...

    目前mysql与elasticsearch常用的同步机制大多是基于插件实现的,常用的插件包括:elasticsearch-jdbc,elasticsearch-river-MySQL,go-mysql ...

  4. Canal 实现 Mysql数据库实时数据同步

    简介 1.1 canal介绍 Canal是一个基于MySQL二进制日志的高性能数据同步系统.Canal广泛用于阿里巴巴集团(包括https://www.taobao.com),以提供可靠的低延迟增量数 ...

  5. MySQL的异构数据同步

    前言 当MySQL操作完数据后如果将数据同步到ElasticSearch中,或者还要同步到MongoDB中,而且操作MySQL和ElasticSearch和MongoDB的分属于多个部门应该怎么办,如 ...

  6. mysql sync es 异步双写_mysql数据同步es方案思考

    在线QQ客服:1922638 专业的SQL Server.MySQL数据库同步软件 大体计划 1.双写 矫捷长处:简略. 错误谬误: a.停业代码耦合严重. b.如何保证双写成功 c.同步双写会增加响 ...

  7. MySQL主从同步配置及存量数据同步方案

    实践准备: 准备两台服务器: 主:192.168.8.10 备:192.168.8.11 MySQL的版本最好保持一致. 步骤一: 授权给从服务器 创建一个专门的同步账号: GRANT REPLICA ...

  8. 外网数据同步到内网方案_数据同步之解决方案

    关于数据同步的需求,想必是开发人员都可能遇到!下面就聊聊关于数据同步的解决方案: 一.使用中间表:数据生产者将数据放在一个中间库,数据消费方定时的去这个中间库取数据,用来消费这些数据, 但是这中方案并 ...

  9. Mysql和Redis数据同步策略

    为什么对缓存只删除不更新 不更新缓存是防止并发更新导致的数据不一致. 所以为了降低数据不一致的概率,不应该更新缓存,而是直接将其删除, 然后等待下次发生cache miss时再把数据库中的数据同步到缓 ...

最新文章

  1. spring计划任务
  2. nyoj 61 传纸条(一) (双线动归)nyoj 探寻宝藏
  3. mysql多个on_在多个查询中插入多行的MySQL ON DUPLICATE KEY UPDATE
  4. 试试这个Excel知识测验,得分超过80分算你赢
  5. spring mvc响应数据方式
  6. Mysql数据库的分离和附加转
  7. 容器与devops_容器和DevOps如何改变杜克大学的IT部门
  8. iPhone13 系列售价曝光:没有涨价;曝华为P50系列7月29日发布;丁磊称专业比学校更重要:你同意吗?|极客头条...
  9. mysql longbolb_MySql基本数据类型及约束
  10. 生态功能区划方法之一:生态敏感性分析法
  11. GD32F303调试小记(零)之工程创建与编译
  12. 安道麦四季度以最佳年度销售额和EBITDA收官全年
  13. 如何设置浏览器标签图标
  14. Win10下怎么查看WIFI密码
  15. [激光原理与应用-30]:典型激光器 -2- 气体激光器 (连续激光器)
  16. python字符串赋值_【python】字符串变量赋值时字符串可用单或双引号
  17. ZDNS赋能创新型高等学府——清华大学深圳国际研究生院
  18. Excel如何快速给自家的男宝宝起名字
  19. 临沂计算机公司排名2015,临沂有哪些大企业 临沂百强企业排名2015
  20. 2023年房地产投资-租金和IRR研究报告

热门文章

  1. js中alert的换行问题
  2. 实现Excel行插入行删除特殊处理,单元格合并及动态条件单元格公式自动计算功能的VBA 宏示例
  3. windows安装gcc
  4. 浅谈分布式全闪存储自动化测试平台设计
  5. MySQL数据库(11):数据类型-enum 枚举类型
  6. 新疆大学生回收二手书平台的选择(适合新疆宝宝的平台)
  7. python Anaconda教程
  8. 7年苹果笔记本码农告诉你,Macbook笔记本M1芯片当前还不适合搞代码
  9. mybatis plus 实体类多加个属性
  10. 关于zealer的mx3和小米3评测的一点看法