网站首页 > 知识剖析 正文
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单之类瞬时大批量更新处理繁琐;
- 优化做法:给标志字段添加索引,从从库进行读取;
- 推荐指数 : 一般
3. Binlog 解析
- 实现思路 :读取 MySQL 的 Binlog 日志,获取指定表的日志信息;根据信息同步到 ES;
- 优点 :没有侵入;没有硬编码;性能高;业务解耦;
- 缺点 : 实现相对复杂;
- 优化做法:配合MQ,使用生产者消费者模式提高同步性能;采用 MySQL 主-从-从模式;
- 推荐指数 : 推荐 : Java生态的常规做法 开源组件:阿里 canal
- 实现依赖 MySQL , 需要先开启 Binlog 写入功能,配置 binlog-format 为 ROW 模式 授权 MySQL 连接账号,使其具有作为 MySQL slave 的权限
- 上一篇: 如何确保mysql的alter语句不锁表
- 下一篇: mysql基本sql语句(库、表)
猜你喜欢
- 2025-05-30 mysql 之json字段详解(多层复杂检索)
- 2025-05-30 SQL注入基础
- 2025-05-30 MySQL新手必看!15个高频SQL语句,让你从菜鸟变大神!
- 2025-05-30 MySQL 避坑指南之隐式数据类型转换
- 2025-05-30 MySQL进阶系列:SQL执行计划分析及执行方式
- 2025-05-30 java 培训 MySQL 一次性插入多行数据的操作
- 2025-05-30 数据库迁移有什么技巧?|分享强大的database迁移和同步工具
- 2025-05-30 全网最硬核操作:10亿数据如何最快插入MySQL?
- 2025-05-30 「SQL」MySQL之索引
- 2025-05-30 Mysql的varchar字段按照数字来排序
- 最近发表
- 标签列表
-
- xml (46)
- css animation (57)
- array_slice (60)
- htmlspecialchars (54)
- position: absolute (54)
- datediff函数 (47)
- array_pop (49)
- jsmap (52)
- toggleclass (43)
- console.time (63)
- .sql (41)
- ahref (40)
- js json.parse (59)
- html复选框 (60)
- css 透明 (44)
- css 颜色 (47)
- php replace (41)
- css nth-child (48)
- min-height (40)
- xml schema (44)
- css 最后一个元素 (46)
- location.origin (44)
- table border (49)
- html tr (40)
- video controls (49)