es 查询一定比 mysql 快吗

2021-12-18 21:13:10 +08:00
 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 对比,所以不是很肯定这个想法,请各位大神赐教

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

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

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

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

https://www.v2ex.com/t/823036

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

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

© 2021 V2EX