es 查询一定比 mysql 快吗

2021 年 12 月 18 日
 546L5LiK6ZOt

目前工作的项目中,es 是 10 分片、3 副本,上面有一个索引的文档数量是 1500 万左右,这个索引是聚合了多个库多个表的数据。我看代码里很多地方都是通过 id 来从 es 查询(当然也有些场景是复杂条件查询的)。我在想,通过 id 来查询的这种场景,能不能通过构造一张 mysql 的宽表,直接走数据库索引来查会不会更快一点呢?

为什么会有这个想法呢?直觉告诉我同样配置(或同样价格)的机器下,mysql 性能会比 es 高。理由如下:

  1. mysql 是用 C++ 写的,没有 gc ,且内存消耗比基于 Java 的 es 要低
  2. es 查询时会路由转发请求给其它数据节点,这当中会有网络 io 消耗;而 mysql 可以直接单表存储 1500 万数据

我在网上找不到关于 mysql 和 es 的 benchmark 对比,所以不是很肯定这个想法,请各位大神赐教

3417 次点击
所在节点    问与答
7 条回复
stabc
2021 年 12 月 18 日
Uber 就是用 mysql 做类似的事。
3dwelcome
2021 年 12 月 18 日
没实际测试过,我猜光查询 id ,mysql 肯定不差。
但是通常情况下,业务逻辑都会包涵复杂查询的,而这部分逻辑,基本上都是整个项目的木桶短板。
如果光一个 ID ,那无脑选 google 的 leveldb ,纯键值数据库,查询绝对最快了。
512357301
2021 年 12 月 18 日
es 不清楚,但是之前最近用 clickhouse 测试过,同样的数据量,同样的三表 join ,MySQL 一小时,clickhouse 五秒钟,这还是 MySQL 建了索引 clickhouse 没建索引的情况下
MySQL 单表性能确实不错,联查就有点吃力了,轻轻松松几十秒甚至几百几千秒
eason1874
2021 年 12 月 18 日
“我和同事们一直努力让 MySQL 优化器能够达到 2000 年初的标准设计水平,还做出了不少很好的调整,但也就是这样了。”

看看一周前的业界新闻《 Oracle 大佬离职,怒喷 MySQL “糟糕的数据库”》
https://www.infoq.cn/article/tkakzijrforgcyrhbytq
bxb100
2021 年 12 月 19 日
Es 热数据在内存里面啊
lemonf233
2021 年 12 月 19 日
@bxb100 mysql 也有数据在内存的 buffer pool
xe2vherd
2021 年 12 月 19 日
这两应用场景都不一样,没啥可比较的。

一个是搜索,主要是非结构话数据。另一个是 SQL(Struct Query Language)

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://v2ex.xtra.eu.org/t/823036

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX