两者产品概述

 

MySQL:关系型数据库,主要面向OLTP,支持事务,支持二级索引,支持sql,支持主从、Group Replication架构模型(本文全部以Innodb为例,不涉及别的存储引擎)。

 

ElasticSearchES是一款分布式的全文检索框架,底层基于Lucene实现,天然分布式,p2p架构,不支持事务,采用倒排索引提供全文检索。

 

 

存储方式

MySQL中要提前定义表结构,也就是说表共有多少列(属性)需要提前定义好,并且同时需要定义好每个列所占用的存储空间。数据以行为单位组织在一起的,假如某一行的某一列没有数据,也需要占用存储空间。

 

ES:比较灵活,索引中的field类型可以提前定义(定义mapping),也可以不定义,如果不定义,会有一个默认类型,不过出于可控性考虑,关键字段最好提前定义好。不同的是,ES存的是倒排索引,

 

 

读写方式

Mysql :Innodb中主键即为聚簇索引,假如根据主键查询,聚簇索引的叶子节点存放就是真正的数据,可以直接查到相应的记录。

Es: 每个node都可以接收读request,然后该node会把request分发到含有该indexshard的节点上,对应的节点会查询、并计算出符合条件的文档,排序后结果汇聚到分发requestnode(所以查询请求默认会轮循的将发送到各个节点上,防止请求全部打到一个节点),由该node将数据返回给client

 

https://upload-images.jianshu.io/upload_images/6468203-aafc8beae4638971.png

 

 

 

MySQL支持事务,支持二级索引,容灾备份方案也最为成熟,所以线上核心业务Mysql是不二之选.

ES现在不仅提供全文检索,还提供统计功能.

 

 

数据量

在面对大数据量简单计算的时候es的效率原高于mysql等传统数据库,

对于相对数量较少,多表join 时,mysql优势更高

 

 

总结:

 MySQL作为开源关系型数据库,应用范围非常广泛,非常适合于结构化数据存储和查询。在数据查询场景下,默认返回所有满足匹配条件的记录;如果业务数据为结构化数据,同时不需要特别关注排名和智能分词模糊匹配查询等特性,则建议采用关系型数据库如MySQL

 

 

ES作为新生代NoSQL数据库代表之一,非常适合于非结构化文档类数据存储、更创新支持智能分词匹配模糊查询。如果业务数据为非结构化数据,同时更关注排名和需要智能分词模糊匹配的特性,则建议采用非关系型数据库如ES作为数据存储介质并使用配套搜索引擎。

 

参考链接:

https://www.cnblogs.com/IamXiaoJuRen/p/6482994.html

Logo

更多推荐