es_MySQL、HBase、ElasticSearch三者对比详解

这篇具有很好参考价值的文章主要介绍了es_MySQL、HBase、ElasticSearch三者对比详解。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

1、概念介绍

MySQL:关系型数据库,主要面向OLTP(OLTP,也叫联机事务处理(Online Transaction Processing)),支持事务,支持二级索引,支持sql,支持主从、Group Replication(MGR 是一个新的高可用与高扩展的方案,集群中的任何节点数据都是一样的,可以实现任何节点都可以写入,实现了真正意义上的多主。)架构模型(本文全部以Innodb为例,不涉及别的存储引擎)。

HBase:基于HDFS,支持海量数据读写(尤其是写),支持上亿行、上百万列的,面向列的分布式NoSql数据库。天然分布式,主从架构,不支持事务,不支持二级索引,不支持sql。

ElasticSearch:简称ES是一款分布式的全文检索框架,底层基于Lucene技术实现,虽然ES也提供存储,检索功能,但我一直不认为ES是一款数据库,但是随着ES功能越来越强大,与数据库的界限也越来越模糊。分布式,P2P架构,但不支持事务,采用倒排索引提供全文检索。

2、数据存储方式

假设有这样一张人员信息表:
es写入和mysql对比,es数据库,elasticsearch
MySQL数据库要提前定义表结构,数据表共有多少列(属性)需要提前定义好,并且同时需要定义好每个列所占用的存储空间。数据以行为单位组织在一起的,假如某一行的某一列没有数据,也需要占用存储空间。

HBase则是以列为单位存储数据,每一列就是一个key-value,HBase的表列(属性)不需要提前定义,而且列可以动态扩展,比如人员信息表中需要添加一个新的“address”字段,MySQL需要提前alter表增加字段,HBase可以直接插入即可。

ES比较灵活,索引中的field类型可以提前定义(定义mapping),也可以不定义,如果不定义,会有一个默认类型,不过出于可控性考虑,关键字段建议提前定义好。(Solr中必须提前定义好schema.xml文件)
es写入和mysql对比,es数据库,elasticsearch
上图展示了数据在MySQL和HBase中存储差异(和真实的情况还有差距),可以看到即使第二条记录的sex字段为空,MySQL依然会为该字段保留空间,因为后续有可能会有update语句来更新该记录,补上sex内容。而HBase则是把每一列都看做是一条记录,row+列名作为key,data作为value,依次存放。假如某一行的某一个列没有数据,则直接跳过该列。针对稀疏矩阵的大表,HBase能大大节省存储空间。

看到这里,大家是否会有一个疑问:使用HBase存储时,假如此时需要添加第二行的sex内容,如何实现呢,数据是否连续?后面介绍读写流程会解释。

3、不一样的ES

ES的存储方式和上面两个都不一样,MySQL和HBase是将数据按不同的方式进行存储,好歹它们存的还是数据,而ES则存的是倒排索引。我们先来了解一下什么是倒排索引,以及为什么需要倒排索引(Inverted Index):

我们肯定都会这样的经历:偶然看到一段很好的文字,但是却不知道出处,这时候去图书馆,一个一个翻找,无疑是大海捞针,这个时候便有了全文检索这项技术,而它最核心的就是倒排索引。假如有如下文档:

es写入和mysql对比,es数据库,elasticsearch

我们想要知道有哪些文档含有you这个关键字,首先可以创建一个倒排索引,格式如下:

es写入和mysql对比,es数据库,elasticsearch
前面的部分叫做dictionary(字典),里面的每个单词叫做term,后面的文档列表叫做psoting-list,list中记录了所有含有该term的文档id,两个组合起来就是一个完成的倒排索引(Inverted Index)。能够看出,假如需要查找含有“you”的文档时,根据dictionary然后找到对应的posting-list即可。

而全文检索中,创建Inverted Index是最关键也是最耗时的过程,而且真正的Inverted Index结构也远比图中展示的复杂,不仅需要对文档进行分词(ES里中文可以自定义分词器),还要计算TF-IDF,方便评分排序(当查找you时,评分决定哪个doc显示在前面,也就是所谓的搜索排名),压缩等操作。每接收一个document,ES就会将其信息更新在倒排索引中。

可以看出ES和MySQL、HBase的存储还是有很大的区别。而且ES不仅包含倒排索引,默认同时还会把文档doc存储起来,所以当我们使用ES时,也能拿到完整的文档信息,所以某种程度上,感觉就像在使用数据库一样,但是也可以配置不存储文档信息,这时只能根据查询条件得到文档id,并不能拿到完整的文档内容。

总结:

MySQL:行存储的方式比较适合OLTP业务。

HBase:列存储的方式比较适合OLAP业务,而HBase采用了列族的方式平衡了OLTP和OLAP,支持水平扩展,如果数据量比较大、对性能要求没有那么高、并且对事务没有要求的话,HBase可以考虑。

ES:ES默认对所有字段都建了索引,所以比较适合复杂的检索或全文检索。文章来源地址https://www.toymoban.com/news/detail-786326.html

到了这里,关于es_MySQL、HBase、ElasticSearch三者对比详解的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Elasticsearch(五)--ES文档的操作(上)---写入文档

    使用ES构建搜索引擎时需要经常对文档进行操作,除了简单的单条文档操作,有时还需要进行批量操作。我们这章主要学习ES文档的增删改的操作,由于涉及到的代码量会比较多,所以分为3篇文章分别说明文档的这个三个操作。那么我们对文档操作的学习除了在kibana客户端之

    2024年01月16日
    浏览(28)
  • Hbase与MySQL对比,区别是什么?

    在数据库管理系统领域,MySQL和HBase是两个最受欢迎的选择。MySQL是传统的关系数据库管理系统,而HBase是专门为大数据应用程序设计的NoSQL,面向列的数据库系统。在本文中,我们将探讨这两个数据库管理系统在架构、数据模型、可伸缩性、查询语言和用例方面的差异。 1. 

    2024年02月09日
    浏览(33)
  • ElasticSearch第十五讲 ES数据写入过程和写入原理以及数据如何保证一致性

    ES 数据并发冲突控制是基于的乐观锁和版本号的机制 一个document第一次创建的时候,它的_version内部版本号就是1;以后,每次对这个document执行修改或者删除操作,都会对这个_version版本号自动加1;哪怕是删除,也会对这条数据的版本号加1(假删除)。 对于更新操作 客户端对

    2024年02月12日
    浏览(32)
  • Elasticsearch进阶篇(一):Elasticsearch写入原理深入详解

    引用官方文档地址:分片内部原理 | Elasticsearch: 权威指南 | Elastic 索引是 Elasticsearch 存储、组织和搜索数据的逻辑容器。它类似于 MySQL 中的 数据表 ,一个 Elasticsearch 集群可以包含多个索引。从 Elasticsearch 7.x 开始,Elasticsearch 不再支持多个 type且默认为_doc,并在之后的版本中

    2024年04月10日
    浏览(39)
  • es mysql 适用场景对比

    对枚举字段的搜索 mysql创建索引的原则是对于那些区别度高字段建立索引,区别度越高的索引,在数据量大的情况下,索引效果越好。 因为mysql建立b+树时是这样,每创建一行就新建立索引字段,如果需要对枚举类型的字段进行搜索的时候比如该字段是布尔型只有两种值,对

    2024年02月06日
    浏览(25)
  • 后端接口如何提高性能?从MySQL、ES、HBASE等技术一起探讨下!(摘抄)

    谢邀,利益相关。 大多数互联网应用场景都是读多写少,业务逻辑更多分布在写上。对读的要求大概就是要快。那么都有什么原因会导致我们完成一次出色的慢查询呢? 1.1 索引 在数据量不是很大时,大多慢查询可以用索引解决,大多慢查询也因为索引不合理而产生。 MySQ

    2024年04月26日
    浏览(32)
  • Python与Pytorch系列(二) 本文(1.8万字) | 解析Opencv, Matplotlib, PIL | 三者之间的转换 | 三者对JPG和PNG读取和写入 |

    点击进入专栏: 《人工智能专栏》 Python与Python | 机器学习 | 深度学习 | 目标检测 | YOLOv5及其改进 | YOLOv8及其改进 | 关键知识点 | 各种工具教程 推荐网站 : OpenCV Matplotlib Pillow opencv的基本图像类型可以和numpy数组相互转化,因此可以直接调用 torch.from_numpy(img) 将图像转换成 t

    2024年02月03日
    浏览(41)
  • (三)elasticSearch和MySQL的对比

    1、MySQL更擅长的是事务类型的操作,可以确保数据的安全和一致性;如果是有事务要求,如商品的下单支付等业务操作,无疑使用MySQL。 2、ES更擅长的是海量数据的搜索,分析和计算;如果是复杂搜索,无疑可以使用Elasticsearch。 3、两者是一个互补而不是替代的关系。

    2024年02月16日
    浏览(29)
  • MongoDB是什么、有哪些优势、对比mysql,es、docker安装

    MongoDB是面向文档的NoSQL数据库(是一个介于关系数据库和非关系数据库之间的产品),用于大量数据存储的分布式文件存储型数据库。基于灵活的 json文档模型(BSON) ,非常适合敏捷式快速开发。 具有高可用,高水平扩展能力,处理海量、高并发的数据应用时非常有优势 。

    2024年02月11日
    浏览(34)
  • HBase Shell操作&Flink写入HBase

    1)进入HBase客户端命令行 2)查看帮助命令 3)查看当前数据库中有哪些表 1)创建表 2)插入数据到表 3)扫描查看表数据 4)查看表结构 5)更新指定字段的数据 6)查看“指定行”或“指定列族:列”的数据 7)统计表数据行数 8)删除数据 9)清空表数据 10)删除表 11)变更

    2024年02月04日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包