目前工作的项目中,es 是 10 分片、3 副本,上面有一个索引的文档数量是 1500 万左右,这个索引是聚合了多个库多个表的数据。我看代码里很多地方都是通过 id 来从 es 查询(当然也有些场景是复杂条件查询的)。我在想,通过 id 来查询的这种场景,能不能通过构造一张 mysql 的宽表,直接走数据库索引来查会不会更快一点呢?
为什么会有这个想法呢?直觉告诉我同样配置(或同样价格)的机器下,mysql 性能会比 es 高。理由如下:
我在网上找不到关于 mysql 和 es 的 benchmark 对比,所以不是很肯定这个想法,请各位大神赐教
1
stabc 2021-12-18 21:21:14 +08:00
Uber 就是用 mysql 做类似的事。
|
2
3dwelcome 2021-12-18 21:31:45 +08:00 via Android
没实际测试过,我猜光查询 id ,mysql 肯定不差。
但是通常情况下,业务逻辑都会包涵复杂查询的,而这部分逻辑,基本上都是整个项目的木桶短板。 如果光一个 ID ,那无脑选 google 的 leveldb ,纯键值数据库,查询绝对最快了。 |
3
512357301 2021-12-18 22:06:56 +08:00 via Android
es 不清楚,但是之前最近用 clickhouse 测试过,同样的数据量,同样的三表 join ,MySQL 一小时,clickhouse 五秒钟,这还是 MySQL 建了索引 clickhouse 没建索引的情况下
MySQL 单表性能确实不错,联查就有点吃力了,轻轻松松几十秒甚至几百几千秒 |
4
eason1874 2021-12-18 22:36:51 +08:00
“我和同事们一直努力让 MySQL 优化器能够达到 2000 年初的标准设计水平,还做出了不少很好的调整,但也就是这样了。”
看看一周前的业界新闻《 Oracle 大佬离职,怒喷 MySQL “糟糕的数据库”》 https://www.infoq.cn/article/tkakzijrforgcyrhbytq |
5
bxb100 2021-12-19 08:21:36 +08:00 via Android
Es 热数据在内存里面啊
|
7
zmxnv123 2021-12-19 16:33:17 +08:00
这两应用场景都不一样,没啥可比较的。
一个是搜索,主要是非结构话数据。另一个是 SQL(Struct Query Language) |