本篇文章主要谈一下MySQL,HBase,ES这几种数据存储的主要知识。
MySQL,关系型数据库。主要面向OLTP,支持事务,支持二级索引。支持sql,支持主从、Group Replication架构模型。
HBase是基于HDFS,支持海量数据读写,尤其是写。支持上亿行、上百万列的,面向列的分布式NoSql数据库,天然分布式,主从架构,不支持事务,不支持二级索引,不支持sql。
ES是一款分布式的全文检索框架,虽然ES也提供存储,检索功能,但我一直不认为ES是一款数据库,底层基于Lucene实现。但是随着ES功能越来越强大,与数据库的界限也越来越模糊,天然分布式,p2p架构,不支持事务,采用倒排索引提供全文检索。
MySQL采用行存储,HBase是面向列的NoSql数据库,解释了行、列存储的区别。至于ES,我也说不清楚它是什么存储方式,暂且叫它索引存储吧。
MySQL中要提前定义表结构,数据以行为单位组织在一起的,假如某一行的某一列没有数据,也需要占用存储空间;也就是说表共有多少列(属性)需要提前定义好,并且同时需要定义好每个列所占用的存储空间。
HBase则是以列为单位存储数据,每一列就是一个key-value,HBase的表列(属性)不用提前定义。列可以动态扩展,比如人员信息表中需要添加一个新的“address”字段,MySQL需要提前alter表,HBase的话直接插入即可。
ES比较灵活,索引中的field类型可以提前定义。也可以不定义,如果不定义,会有一个默认类型,不过出于可控性考虑,关键字段最好提前定义好。
MySQL依然会为该字段保留空间,因为后续有可能会有update语句来更新该记录,补上sex内容;简单的展示了数据在MySQL和HBase中存储差异,和真实的情况还有差距,可以看到即使第二条记录的sex字段为空,而HBase则是把每一列都看做是一条记录,row+列名作为key,data作为value,依次存放。假如某一行的某一个列没有数据,则直接跳过该列。对于稀疏矩阵的大表,HBase能节省空间。
说完MySQL、HBase,这里要重点说一下ES。ES的存储方式和上面两个都不一样,MySQL和HBase是将数据按不同的方式进行存储。好歹它们存的还是数据,而ES则存的是倒排索引。
版权声明:本文为Yun88网的原创文章,转载请附上原文出处链接及本声明。
更多产品了解
欢迎扫码加入云巴巴企业数字化交流服务群
产品交流、问题咨询、专业测评
都在这里!
2022-11-24 10:14:39
2022-11-22 09:32:31
2022-11-21 10:34:48
2022-11-22 11:07:01
2022-11-22 16:06:07
2022-11-21 10:34:58
甄选10000+数字化产品 为您免费使用
申请试用
评论列表