前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >将 mysql 数据同步到 Elasticsearch

将 mysql 数据同步到 Elasticsearch

作者头像
凌虚
发布2020-07-17 12:04:17
2.9K0
发布2020-07-17 12:04:17
举报

上篇文章介绍了 ES 的基本概念:Elasticsearch(一)

对于 ES 来说,必须先存储有数据然后才能搜索到这些数据,而在实际业务中 ES 的数据也常常是与 mysql 保持同步的,所以这里插入这篇文章简单介绍几种同步 mysql 数据到 ES 的方式。

一、业务层直接同步:

最常见就是直接在业务代码层比如操作数据库的 ORM 中定义各种 hooks 钩子,然后在钩子里再进行 ES 的数据操作,其实这里 ES 和 DB 并没有直接关联,而这种方式的缺点就是 ES 的操作会过于分散在各个业务里,不利于扩展和管理。

当然某些情况下,系统中会设计一个数据代理层,专门集中负责有关数据的操作,这时 ES 的数据同步也会自然放到这层,但是仍然将其视为一类好了。

二、独立同步:

区别于上一种,这种方式将 ES 同步数据部分分离出来单独维护,此时业务层只负责查询即可。

如上图所示,这种方式会等到数据写入 DB 完成后,直接从 DB 中同步数据到 ES ,具体的操作又可以细分为两类:

1、插件式:

直接利用第三方插件进行数据同步,缺点是灵活度受插件限制。常用的插件有

  • logstash-input-jdbc
  • go-mysql-elasticsearch

2、脚本式:

自己写脚本,比较灵活。

最简单的比如定时轮询 mysql,根据表中的最后更新时间这个特殊字段去新增或修改 ES 的数据,但是对于删除数据则需要另外处理,当然也会有某些情况下是不存在删除操作的。

更推荐的方式是通过订阅 mysql 的 binlog 日志从而实时同步数据,在 NodeJS 中推荐使用 zongji 这个库。由于特定的场景,我更关注的点是哪个数据库的哪张表进行了插入、修改、删除操作,所以在 zongji 的基础上我自己稍微修改了一点并过滤了一下返回结果:

如上图所示,通过指定具体哪个库哪些表的增删改操作进行订阅,返回结果就会过滤掉不相干的数据,并且所有返回结果都包含以下四个维度的数据:具体哪个数据库、具体哪张表、进行了增删改哪种操作,操作的数据又是什么。

当然这只是一个 demo 版,感兴趣的可以试试。

本篇完。

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-08-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Node Python Go全栈开发 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云数据库 SQL Server
腾讯云数据库 SQL Server (TencentDB for SQL Server)是业界最常用的商用数据库之一,对基于 Windows 架构的应用程序具有完美的支持。TencentDB for SQL Server 拥有微软正版授权,可持续为用户提供最新的功能,避免未授权使用软件的风险。具有即开即用、稳定可靠、安全运行、弹性扩缩等特点。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档