美文网首页Search搜索引擎ES
Elasticsearch 存储设计与MySQL数据同步方案

Elasticsearch 存储设计与MySQL数据同步方案

作者: 灰气球 | 来源:发表于2021-07-02 23:53 被阅读0次

    Elasticsearch 存储设计

    Elasticsearch中index约等于MySQL的database,type约等于MySQL的table;

    虽然Elasticsearch支持一个index多个type,但是官方并不推荐如此使用,而且多个type底层其实也是用一张大表进行存储的。

    所以,Elasticsearch 中存储的数据用一个type来存储就可以了。使用nested类型保存一对多关系。

    MySQL数据同步

    1. MySQL & Elasticsearch双写

    • 实现思路 :在业务 insert & update MySQL的地方同时 insert & update Elasticsearch
    • 优点 :实现简单
    • 缺点 : 业务代码侵入;能力无法复用;业务强耦合;影响业务处理性能;
    • 优化做法:配合MQ提高吞吐量、改同步为异步
    • 推荐指数 : 一般 (可作为其他方案的补充)

    2. 定时 MySQL SELECT

    • 实现思路 :数据库的相关表中增加是否需要同步的标识字段,例如现有的类型为 timestamp 的 update_time 字段,任何更新数据表内容的操作都会使该字段的时间发生变化;增加一个定时器程序,让该程序按一定的时间周期扫描指定的表,把该时间段内发生变化的数据提取到 Elasticsearch ;

    • 优点 :实现简单;没有侵入;没有硬编码;

    • 缺点 : 时效性较差;对 MySQL Delete 操作无能为力;增大 MySQL 的压力; 无法按字段同步,只能整行同步;对SQL单之类瞬时大批量更新处理繁琐;

    • 优化做法:给标志字段添加索引,从从库进行读取;

    • 推荐指数 : 一般

    • 相关的开源组件:DataX、Logstash

    3. Binlog 解析

    • 实现思路 :读取 MySQL 的 Binlog 日志,获取指定表的日志信息;根据信息同步到 ES;

    • 优点 :没有侵入;没有硬编码;性能高;业务解耦;

    • 缺点 : 实现相对复杂;

    • 优化做法:配合MQ,使用生产者消费者模式提高同步性能;采用 MySQL 主-从-从模式;

    • 推荐指数 : 推荐 : 常规做法

      • 开源组件:阿里 canal
    • 实现依赖

      • MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式
      • 授权 MySQL 连接账号,使其具有作为 MySQL slave 的权限

    相关文章

      网友评论

        本文标题:Elasticsearch 存储设计与MySQL数据同步方案

        本文链接:https://www.haomeiwen.com/subject/pntuultx.html