1. 两者产品概述
- MySQL
关系型数据库,主要面向OLTP,支持事务,支持二级索引,支持sql,支持主从、Group Replication架构模型(本文全部以Innodb为例,不涉及别的存储引擎)。
- ElasticSearch
ES是一款分布式的全文检索框架,底层基于Lucene实现,天然分布式,p2p架构,不支持事务,采用倒排索引提供全文检索。
2. 存储方式
- MYSQL
MySQL中要提前定义表结构,也就是说表共有多少列(属性)需要提前定义好,并且同时需要定义好每个列所占用的存储空间。数据以行为单位组织在一起的,假如某一行的某一列没有数据,也需要占用存储空间。
- ES
ES存储方式比较灵活,索引中的field类型可以提前定义(定义mapping),也可以不定义,如果不定义,会有一个默认类型,不过出于可控性考虑,关键字段最好提前定义好。不同的是,ES存的是倒排索引。
3. 读写方式
- Mysql
Innodb中主键即为聚簇索引,假如根据主键查询,聚簇索引的叶子节点存放就是真正的数据,可以直接查到相应的记录。
- ES
每个node都可以接收读request,然后该node会把request分发到含有该index的shard的节点上,对应的节点会查询、并计算出符合条件的文档,排序后结果汇聚到分发request的node(所以查询请求默认会轮循的将发送到各个节点上,防止请求全部打到一个节点),由该node将数据返回给client。
4. 索引和检索
-
MySQL支持事务,支持二级索引,容灾备份方案也最为成熟,所以线上核心业务Mysql是不二之选.
-
ES现在提供全文检索,检索性能远高于MYSQL,还提供统计功能..
5. 数据量
在面对大数据量简单计算的时候es的效率远高于mysql等传统数据库,同时ES存储的数据是经过压缩的,压缩率远高于MYSQL。相同条目数据量,存储落盘占用空间远小于MYSQL。
对于相对数量较少,多表join 时,mysql优势更高
6. 数据结构
- 关系型数据库中的数据库(DataBase),等价于ES中的索引(Index)
- 一个数据库下面有N张表(Table),等价于1个索引Index下面有N多类型(Type),
- 一个数据库表(Table)下的数据由多行(ROW)多列(column,属性)组成,等价于1个Type由多个文档(Document)和多Field组成。
- 在一个关系型数据库里面,schema定义了表、每个表的字段,还有表和字段之间的关系。 与之对应的,在ES中:Mapping定义索引下的Type的字段处理规则,即索引如何建立、索引类型、是否保存原始索引JSON文档、是否压缩原始JSON文档、是否需要分词处理、如何进行分词处理等。
- 在数据库中的增insert、删delete、改update、查search操作等价于ES中的增PUT/POST、删Delete、改_update、查GET.
7. 适用场景及优劣势
7.1. Mysql
- 优势:MySQL作为开源关系型数据库,应用范围非常广泛。它非常适合于1.结构化数据存储和查询,同时支持2.事务处理。在数据查询场景下,默认返回所有满足匹配条件的记录;如果业务数据为结构化数据,同时不需要特别关注排名和智能分词模糊匹配查询等特性,则建议采用关系型数据库如MySQL。一些3.关系比较复杂的数据用mysql这样的关系数据库用sql很容易实现,但是es就相当复杂。
- 劣势:海量数据查询检索效率比ES低很多,数据压缩率低很多,不支持分布式。
7.2. ES
- 优势
ES作为新生代NoSQL数据库代表之一,天生支持分布式,非常适合于1.海量数据、更新频率很低的非结构化文档类数据存储,还支持2.智能分词匹配模糊查询,快速查询和3.高存储压缩比。
如果业务数据为非结构化数据,同时更关注排名和需要智能分词模糊匹配的特性,则建议采用非关系型数据库,如ES作为数据存储介质并使用配套搜索引擎。例如使用ES作为存储和检索服务器,或全文检索服务等; - 劣势:ES不是数据库,它没有事务也不适合处理并行更改数据。
- 参考链接
https://www.cnblogs.com/IamXiaoJuRen/p/6482994.html
https://blog.csdn.net/weixin_41247759/article/details/105783030
https://blog.csdn.net/qq_34599132/article/details/108879842