- 资料收集
- 基础入门
- Elasticsearch概念与MySQL对应
- MySQL同步ES
- 几种同步方案
- 数据一致性问题主流解决方案
- 其他(TODO)
公司组件文档
公司ES组件介绍:包含最佳实践案例、SDK API介绍、多机房容灾部署、ES平台架构等,协助公司开发迅速使用。
ES官方权威指南文档
英文最新版权威指南
ES入门教程
基础入门主要学习资料:ES入门教程
全部是最基本的操作,有个感觉。
一、安装教程
二、基本概念
注意点:
- Elastic 会索引所有字段,经过处理后写入一个反向索引(Inverted Index)。查找数据的时候,直接查找该索引。
所以,Elastic 数据管理的顶层单位就叫做 Index(索引)。它是单个数据库的同义词。每个 Index (即数据库)的名字必须是小写。 - document 可以分组,比如weather这个 Index 里面,可以按城市分组(北京和上海),也可以按气候分组(晴天和雨天)。这种分组就叫做 Type,它是虚拟的逻辑分组,用来过滤 document。不同的 Type 应该有相似的结构(schema)。
三、基础命令(第三、五、六部分)
1,CRUD Index、Type、document(row)等:这部分大多数是在数据同步时候使用。
2,业务上对ES的使用主要集中在查询中
四、中文分词设置
不同组件有不同分词断句的算法
Elasticsearch概念与MySQL对应关系表
- 单个 Elastic 实例称为一个节点(node)。一组节点构成一个集群(cluster)。
- MySQL 中一个数据库下面有 N 张表(Table),等价于1个索引 Index 下面有 N 多类型(Type)。
- MySQL 中一个数据库表(Table)下的数据由多行(Row)多列(column,属性)组成,等价于1个 Type 由多个文档(document)和多 Field 组成。
- MySQL 中定义表结构、设定字段类型等价于 ES 中的 Mapping。举例说明,在一个关系型数据库里面,Schema 定义了表、每个表的字段,还有表和字段之间的关系。与之对应的,在 ES 中,Mapping 定义索引下的 Type 的字段处理规则,即索引如何建立、索引类型、是否保存原始索引 JSON 文档、是否压缩原始 JSON 文档、是否需要分词处理、如何进行分词处理等。
- MySQL 中的增 insert、删 delete、改 update、查 search 操作等价于 ES 中的增 PUT/POST、删 Delete、改 _update、查 GET。其中的修改指定条件的更新 update 等价于 ES 中的 update_by_query,指定条件的删除等价于 ES 中的 delete_by_query。
- MySQL 中的 group by、avg、sum 等函数类似于 ES 中的 Aggregations 的部分特性。
- MySQL 中的去重 distinct 类似 ES 中的 cardinality 操作。
- MySQL 中的数据迁移等价于 ES 中的 reindex 操作。
非常好的讲解一致性问题的帖子:
MySQL与ES之间的数据一致性问题
MySQL 数据实时同步到 Elasticsearch 的技术方案选型和思考
分不清谁是原创。。。
总结:
- MySQL数据库资源非常宝贵,希望DB的操作尽可能集中在复杂的CUD上,复杂的查询操作借助于ES进行实现。因此会引出一致性的问题,即DB的更新是否能立即同步到ES上。
主流的方式:数据迁移同步工具。 - 数据库去规范化对于快捷查询的好处:通过字段冗余,避免多个表之间的联合查询。也避免同步时要更新多个表。
主要内容:1,去规范化的动机。2,去规范化的几种方式(主查询表列冗余、宽表预构建/应用多写/物化视图/数据迁移同步工具)。
其中,物化视图的介绍帖子:数据库view与物化视图 - 主要的数据迁移同步模型:订阅消费模式、端到端直连模式
- 同步存在的问题:ES设计(类型选择:objected(全部扁平化的问题)、nested(保持一定的关联关系,牺牲部分写入性能)、join(影响搜索性能))。
join 适合写多读少场景,更加适合关注索引性能的场景。这意味着更新的生效会更快,但是搜索时的开销也相对大些;nested 适合读多写少的场景,保持一定关联关系的同时更加关注搜索的性能。 - MySQL 到 ES 实时数据同步实现去规范化,推荐方式:多表订阅合并预构建宽表数据
- 数据迁移同步工具选型
待学习与搜索内容
- Kibana 是为 Elasticsearch 集群上的內容提供了友好的 Web 界面,可以帮助你汇总、分析和搜索重要数据。
- ES读写数据过程



