导语
ES 现在已经越来越火,很多公司会把 MySQL 里面的数据导入到 ES,用 ES 来做海量数据的实时查询。那为什么 MySQL 做不了海量数据的实时查询呢?为什么 ES 可以?本文将从原理上来回答这个问题。
基本分析
经过分析和对比,得出结论如下:
1、ES 天生分布式架构,天然支持海量数据的分片和查询,而 MySQL 不行;
2、MySQL 和 ES 底层索引结构导致即便是单片数据查询,ES 也更适合做查询引擎。
# 为什么 MySQL 做不了海量数据的实时查询?
MySQL 的架构就不是分布式的架构,就算基于一些开源组件或者自研组件做了分库分表,也只能解决数据的存储问题,解决不了问题的查询问题。
目前所有的分库分表中间件都会要求必须带上分库分表 id 去查询,也就是分库分表之后,你的查询,最终还是要落到某个库某张表去做单库单表的实时查询。
# ES 为什么能够做海量数据的实时查询?
ES 天生就是分布式架构,假如有一个学生表超过 10 亿条数据,导入 ES。首先第一件事情就是你要给这些数据做分片,假如分了 10 个片后,用户想基于 name 去查询,ES 是怎么做的?
这里我们假设是最简单的部署架构,ES 的节点 A 接收到查询请求后,会把请求转发到其他 datan