es mysql 适用场景对比

问题一

全文检索毫无疑问直接上es,那么除了这种场景,什么时候该选es?为啥mysql不行?

对枚举字段的搜索

mysql创建索引的原则是对于那些区别度高字段建立索引,区别度越高的索引,在数据量大的情况下,索引效果越好。

因为mysql建立b+树时是这样,每创建一行就新建立索引字段,如果需要对枚举类型的字段进行搜索的时候比如该字段是布尔型只有两种值,对这种值进行搜索即使建立了索引效果仍然不好,如果一张表有千万数据,其中有

五百万数据是该值为true,需要搜索表中为true的数据,即使扫描索引,也要扫描500万次。

而es则不同,es建立的倒排索引是索引值后面跟了一个倒排列表,也就是只需要最多扫描两次便能找到数据。

复杂条件的搜索

当搜索的条件足够复杂后,比如10多个条件字段的搜索,由于b+树的特性,不可能同时对这10多个字段建立联合索引,此时用上es就很合适。es可以将10多个条件字段求出各自的bitmap,然后求交集。

问题二

抛开问题一的两种场景,当数据量越来越大时,应该选用es作为存储吗?

es针对海量数据的存储与搜索的好处在于,其水平扩容的便捷性。

mysql在数据量大了以后,涉及到分库分表,而分库分表带来的问题的是什么?其一是分库分表时,数据的迁移,需要考虑迁移过程中业务是否受到影响。其二在于 分库分表后业务系统的改动,比如翻页逻辑,可能需要去到每个库或表中查出前n条数据,然后进行翻页。

而es将扩容部分的这些都做了,es存数据是天然的分片存储,在海量数据查询时,可以通过增加副本的机制分担读压力。

那是不是在选用数据存储时,直接选用es就好了呢,这样以后可以不用担心扩容问题?

当然不是,来说说选用es的问题。

es比较吃系统资源。

来看一组数据,虽然环境有差异,可能不太准确,但能说明一定问题。

一台4c8g的 linux 云数据库,能支持大约上万qps,内存占用大概6g。

而我用一台mac m1 的8c 16g机器去做查询压测,当qps达到3700时,cpu就已经去到480% 超过了4核。

所以在产品并发量不高的情况下,只从数据存储而言,选用mysql会更节约成本。

但是单机的性能的确有限,如果产品对数据库的qps需要去到好几万,即使选用最高配的机器也是无法支撑的,这时选用多台便宜的机器来做将数据做分布式存储将更有优势。

所以我认为,当查询量越来越大以后,选用es来做海量数据存储,将不会担心数据查询问题,随着查询压力的上涨,可以通过增加副本来解决,虽然mysql可以通过分库分表解决,但是正如前面而言,分库分表的成本是比较大且风险是高于es扩容的,es增加副本带来的分片数据迁移工作,是由es集群自身完成,这样对于整个架构的扩展性来说是最高效便捷的。

感叹一句,架构就是这样,有得必有失,带来了架构的便捷性,但是可能对于mysql分库分表方案会更贵一点。

es mysql 适用场景对比的更多相关文章

  1. MySQL存储引擎对比

    MySQL存储引擎对比 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.MySQL的存储引擎 大家应该知道MySQL的存储引擎应该是表级别的概念,因为我们无法再创建databas ...

  2. 三个流行MySQL分支的对比

    MySQL是历史上最受欢迎的免费开源程序之一.它是成千上万个网站的数据库骨干,并且可以将它(和Linux)作为过去10年里Internet呈指数级增长的一个有力证明. 那么,如果MySQL真的这么重要 ...

  3. Swoole 协程 MySQL 客户端与异步回调 MySQL 客户端的对比

    Swoole 协程 MySql 客户端与 异步回调 MySql 客户端的对比 为什么要对比这两种不同模式的客户端? 异步 MySQL 回调客户端是虽然在 Swoole 1.8.6 版本就已经发布了, ...

  4. 超越MySQL:三个流行MySQL分支的对比(转)

    导读:尽管MySQL是最受欢迎的程序之一,但是许多开发人员认为有必要将其拆分成其他项目,并且每个分支项目都有自己的专长.该 需求以及Oracle对核心产品增长缓慢的担忧,导致出现了许多开发人员感兴趣的 ...

  5. MQTT 与 RocketMQ 的应用场景对比

    本文主要在什么是微消息队列 MQTT?的基础上介绍微消息队列 MQTT 和传统消息中间件的关联和区别,并针对实际应用场景下的产品选型给出建议. 背景信息 传统的消息中间件,例如消息队列 RocketM ...

  6. MySQL和Mongodb的区别与应用场景对比

    MySQL是关系型数据库 优势: 在不同的引擎上有不同 的存储方式. 查询语句是使用传统的sql语句,拥有较为成熟的体系,成熟度很高. 开源数据库的份额在不断增加,mysql的份额页在持续增长. 缺点 ...

  7. Mysql、MongoDB对比和使用场景

    MongoDB: 更高的写入负载 默认情况下,MongoDB更侧重高数据写入性能,而非事务安全,MongoDB很适合业务系统中有大量“低价值”数据的场景.但是应当避免在高事务安全性的系统中使用Mong ...

  8. Mongodb学习总结(2)——MongoDB与MySQL区别及其使用场景对比

    对于只有SQL背景的人来说,想要深入研究NoSQL似乎是一个艰巨的任务,MySQL与MongoDB都是开源常用数据库,但是MySQL是传统的关系型数据库,MongoDB则是非关系型数据库,也叫文档型数 ...

  9. Solr与MySQL查询性能对比

    本文简单对比下Solr与MySQL的查询性能速度. 测试数据量:10407608     Num Docs: 10407608 这里对MySQL的查询时间都包含了从MySQL Server获取数据的时 ...

  10. mysql各种引擎对比、实战

    1)存储引擎概述: (2)MySQL各大存储引擎: (3)InnoDB和MyIsam使用及其原理对比: (4)InnoDB和MyIsam引擎原理: (5)剩余引擎的使用DEMO(主要是Mrg_Myis ...

随机推荐

  1. 【备忘录】 主定理 Master Theorem (转载)

    备忘录 https://zhuanlan.zhihu.com/p/113406812

  2. 可靠消息最终一致性【本地消息表、RocketMQ 事务消息方案】

    更多内容,前往IT-BLOG 一.可靠消息最终一致性事务概述 可靠消息最终一致性方案是指当事务发起方执行完成本地事务后并发出一条消息,事务参与方(消息消费者)一定能够接收消息并处理事务成功,此方案强调 ...

  3. DOM属性节点加其他节点的操作

     节点属性 nodeType 返回值为数值                 节点类型(nodeType)    节点名字(nodeName)    节点值(nodeValue)        元素节点 ...

  4. 明解STM32—GPIO理论基础知识篇之寄存器原理

    ​ 一.前言 在之前的STM32的GPIO理论基础知识中,分别对基本结构和工作模式进行了详细的介绍.GPIO基本结构中主要对GPIO内部的各个功能电路逐一的进行的分析:GPIO工作模式中主要介绍GPI ...

  5. Java19新特性

    本文已经收录到Github仓库,该仓库包含计算机基础.Java基础.多线程.JVM.数据库.Redis.Spring.Mybatis.SpringMVC.SpringBoot.分布式.微服务.设计模式 ...

  6. Redis系列12:Redis 的事务机制

    Redis系列1:深刻理解高性能Redis的本质 Redis系列2:数据持久化提高可用性 Redis系列3:高可用之主从架构 Redis系列4:高可用之Sentinel(哨兵模式) Redis系列5: ...

  7. 数据挖掘系统聚类—R实现

    系统聚类法 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,最后的结果是希望同类之间的差异性尽可能小,不同类之间的差异性尽可能大.不同的类具有能够表达异于其他类的指标,这样针对不同的类,后续就 ...

  8. 图与网络分析—R实现(四)

    三 最短路问题 最短路问题(short-path problem)是图论理论的一个经典问题.寻找最短路径就是在指定网络中两结点间找一条距离最小的路.最短路不仅仅指一般地理意义上的距离最短,还可以引申到 ...

  9. windows如何拉取一个文件夹下的所有文件名

    问题描述:遇到一个问题,是说一个文件夹下的文件太多了,如何去批量的拉去文件名呢,今天用CMD+DIR的方式拉取 1.文件目录也很深,就从文件导航栏进入CMD窗口 2.在当前目录中输入cmd,然后回车 ...

  10. 升级:Logical Upgrade升级MySQL5.6.26

    升级需谨慎,事前先备份 MySQL升级的实质是对数据字典的升级,数据字典有:sys.mysql.information_schema.performance_schema . MySQL升级的两种方式 ...