关系型数据库与HBase的数据储存方式区别

标签: 关系 数据库 hbase | 发表时间:2014-05-22 00:55 | 作者:cqboy1991
出处:http://blog.csdn.net

       如今Bigtable型(列族)数据库应用越来越广,功能也很强大。但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询。本文以hbase举例讲述数据模式的变化。

传统关系型数据库(mysql,oracle)数据存储方式主要如下:

图一

       上图是个很典型的数据储存方式,我把每条记录分成3部分: 主键、记录属性、索引字段。我们会对索引字段建立索引,达到 二级索引的效果。

但是随着业务的发展,查询条件越来越复杂,需要更多的索引字段,且很多值都不存在,如下图:

图二

       上图是6个索引字段,实际情况可能是上百个甚至更多,并且还需要根据多个索引字段刷选。查询性能越来越低,甚至无法满足查询要求。关系型数据里的局限也开始显现,于是很多人开始接触NoSQL。

       列族数据库很强大,很多人就想把数据从mysql迁到hbase,存储的方式还是跟图一或者图二一样,主键为rowkey。其他各个字段的数据,存储一个列族下的不同列。但是想对索引字段查询就没有办法,目前还没有比较好的基于bigtable的二级索引方案,所以无法对索引字段做查询。

      这时候其实可以转换下思维,可以把数据倒过来,如下图:

图三

        把各个索引字段的值作为rowkey,然后把记录的主键和属性值按照一定顺序存在对应rowkey的value里。上图只有一个列族,是最简单的方式。 Value里的记录可以设置成定长的byte[],多个记录集合通过移位快速查询到。

        但是上面只适合单个索引字段的查询。如果要同时对多个索引字段查询,图三的方式需要求取出所有value值,比如查询“浙江”and“手机”,需要取出两个value,再解析出各自的主键求交。如果每条记录的属性有上百个,对性能影响很大。

       接下来的变化是解决多索引字段查询的问题。我们将 主键字段和属性字段分开存储,储存在不同的列族下,多索引查询只需要取出列族1下的数据,再去最小集合的列族2里取得想要的值。储存如图四:

图四

为什么是不同列族,而不是一个列族下的两个列?

        列族数据库数据文件是按照列族分的。在取数据时,都会把一个列族的所有列数据都取出来,事实上我们并不需要把记录明细取出来,所以把这部分数据放到了另一个列族下。

       接下来是对列族2扩展,列族2储存更多的列,用来做各种刷选、计算处理。如下图:

图五

       后来我感觉这玩样越来越像搜索了。。。

作者:cqboy1991 发表于2014-5-21 16:55:27 原文链接
阅读:97 评论:0 查看评论

相关 [关系 数据库 hbase] 推荐:

非关系性分布式数据库:HBase

- - 标点符
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”. 就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力.

关系型数据库到HBase的数据储存方式变迁

- - yiihsia[互联网后端技术]_yiihsia[互联网后端技术]
我是标题党,其实本文与hbase关系不大,只是把它作为列族数据库的代表来讲. 从目前字眼上看,HBase比Bigtable无疑更具吸引力. 题目改成:RDBMS到列族的数据储存方式变迁 更恰当. 如今Bigtable型(列族)数据库应用越来越广,功能也很强大. 但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询.

关系型数据库与HBase的数据储存方式区别

- - CSDN博客云计算推荐文章
       如今Bigtable型(列族)数据库应用越来越广,功能也很强大. 但是很多人还是把它当做关系型数据库在使用,用原来关系型数据库的思维建表、存储、查询. 本文以hbase举例讲述数据模式的变化. 传统关系型数据库(mysql,oracle)数据存储方式主要如下:.        上图是个很典型的数据储存方式,我把每条记录分成3部分: 主键、记录属性、索引字段.

HBase – 基于Hadoop的分布式数据库

- - ITeye博客
  修改:dataDir=/home/ysc/zookeeper. mkdir /home/ysc/zookeeper(注:dataDir是zookeeper的数据目录,需要手动创建). hbase存在系统时间同步的问题,并且误差要再30s以内. HBase是数据库,会在同一时间使用很多的文件句柄,大多数linux系统使用的默认值1024是不能满足的,还需要修改 hbase 用户的nproc,在压力很大的情况下,如果过低会造成 OutOfMemoryError异常.

Apache HBase v1.0 发布,分布式数据库

- - 开源中国社区最新新闻
Apache HBase v1.0 发布了,这是 HBase 一个主要的里程碑. 1.0 版本经过 7 年的开发,有超过 1500 次的更改和升级. 与上一个版本 0.98.0 比较,1.0 版本值得关注的改进有:. 性能提升,同时保持之前的稳定性. 全新 API 以及重新组织客户端 API. 新的可用性保证 —— 用时间表一致地区副本读取可用性.

NOSQL数据库大比拼:Cassandra vs MongoDB vs CouchDB vs Redis vs Riak vs HBase

- - 博客园_Ruby's Louvre
话说,尽管 SQL 数据库一直是我们IT行业中最有用的工具,然而,它们这样在行业中超过15年以上的“转正”终于就要寿终正寝了. 现在,虽然关系型数据库仍然无所不在,但它越来越不能满足我们的需要了. 但是,各种 "NoSQL" 数据库之间的差异比当年众多关系型数据库之间的差异要大许多. 这就加大了人们在建设自己的应用是选择合适的数据库的难度.

创建HBASE数据库时候不得不注意的几处设置

- - 互联网 - ITeye博客
系统相关属性设置:. //日志flush的时候是同步写,还是异步写. //MemStore大小 tableDesc.setMemStoreFlushSize(256*1024*1024);. //块缓存,保存着每个HFile数据块的startKey colDesc.setBlockCacheEnabled(true);.

NoSQL数据库探讨 -- 非关系型数据库

- - ITeye博客
随着互联网web2.0网站的兴起,非关系型的数据库现在成了一个极其热门的新领域, 非关系数据库产品的发展非常迅速. 而传统的关系数据库在应付web2.0网站,特别是超大规模和高并发的SNS类型的web2.0纯动态网站已经显得力不 从心,暴露了很多难以克服的问题,例如:. 1、High performance - 对数据库高并发读写的需求.

Clustrix Sierra关系数据库集群

- 2sin18 - 风轻扬
Clustrix的Sierra数据库集群引擎是一个share-nothing架构的可伸缩关系数据库集群. 官方宣传的非常诱人,说是功能像集中式关系数据库一样强大,可伸缩性超强,不需要规划什么数据分区,可用性也非常高. 简直是集SQL和NoSQL的优点于一身. 据说最近阿里云的RDS服务很可能是基于这个,因此仔细去了解了一下,发现架构上属于软硬一体化的路子,感觉架构上还是有些问题,对硬件的要求也不低.