`
yiihsia
  • 浏览: 67898 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

 

我是标题党,其实本文与hbase关系不大,只是把它作为列族数据库的代表来讲。从目前字眼上看,HBase比Bigtable无疑更具吸引力。题目改成:RDBMS到列族的数据储存方式变迁 更恰当。

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

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

图一

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

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

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

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

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

图三

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

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

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

图四

以上图数据举例:查询“浙江”AND“手机”

1、取出“浙江”、“手机”列族1下的数据,即{1,2,5}、{2,6}

2、对数据求交后得到{2}满足条件,{2}在”手机”(最小集合)下的index为{1}

3、取出“手机”列族二的数据,根据步骤2的index,取出结果{108,2,22234,12}

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

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

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

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

这是一个很典型的通过空间换时间的方案,通过大量数据冗余来提高查询性能。同时也带来了问题,就是数据一致性的问题。所以这种方案的应用场景是对海量历史数据做实时计算上。关于应用场景可以看我之前写的一篇文章:实时计算应用场景

而处理实时更新的数据或者经常修改的数据还是难点问题,也欢迎讨论或者加入我们团队一起解决这些难题

http://www.yiihsia.com/2011/08/%E5%85%B3%E7%B3%BB%E5%9E%8B%E6%95%B0%E6%8D%AE%E5%BA%93%E5%88%B0hbase%E7%9A%84%E6%95%B0%E6%8D%AE%E5%82%A8%E5%AD%98%E6%96%B9%E5%BC%8F%E5%8F%98%E8%BF%81/

 

1
2
分享到:
评论

相关推荐

    关系型数据库的数据导入Hbase

    关系型数据库(如MySQL、Oracle、SQL Server等)与非关系型数据库(如Hbase)在数据存储和处理上有着显著的区别。关系型数据库遵循ACID(原子性、一致性、隔离性和持久性)原则,适合结构化数据的存储,而Hbase作为...

    文档型数据库与关系型数据库的比较_陈婕.pdf

    虽然可以通过BLOB等方式存储非结构化数据,但在处理这些数据时不如文档型数据库灵活。 ##### 3.2 数据库结构 - **文档型数据库**:每个文档可以有不同的结构,这意味着同一集合中的文档不必拥有相同的字段。这种...

    NoSQL非关系型数据库

    NoSQL数据库摒弃了传统关系型数据库的设计理念,如固定的表结构和复杂的事务处理机制,转而采取更为灵活的数据模型和支持水平扩展的技术方案。 #### NoSQL兴起的原因 NoSQL的兴起主要归因于传统关系型数据库无法...

    分布式关系型数据库恢复点目标测试方法.pdf

    分布式关系型数据库是指将物理上分散的多个数据库单元连接起来,并采用关系模型加以组织的一个逻辑上统一的数据库。与传统的大型集中式关系型数据库相比,分布式关系型数据库具有成本低、部署灵活、性能高等优势。...

    分布式数据库HBase安装配置与实践.doc

    - **配置hbase-site.xml**:编辑`/usr/local/hbase/conf/hbase-site.xml`,设置`hbase.rootdir`为HDFS上的存储路径,并将`hbase.cluster.distributed`设为`true`,指定HBase在分布式模式下运行。 3. **环境变量...

    非关系型数据库

    非关系型数据库(NoSQL,Not Only SQL)是一种不同于传统的关系型数据库的数据存储模型,它在近年来得到了广泛的关注和应用,特别是在大数据、实时分析、分布式系统等领域。NoSQL数据库的设计理念在于灵活性、可扩展...

    计算机课程(数据库)-关系型数据库 vs. 非关系型数据库

    - 数据存储:关系型数据库通常磁盘存储,非关系型数据库可选择内存或磁盘。 5. 其他差别 - 扩展性:非关系型数据库具有更好的水平扩展性,能应对大规模数据和高并发。 - 数据一致性:关系型数据库数据一致性高,非...

    关系型数据库和NOSQL数据库的应用设计差异

    关系型数据库和NOSQL数据库在应用设计上存在显著差异,这些差异主要来源于它们各自的设计理念、存储方式、数据模型和优化策略等方面。为了深入理解这些差异,我们可以从HBase的应用实践入手,进行分析和对比。 ...

    Lucene与关系型数据库对比

    随着技术的发展,不同的数据处理方式应运而生,其中Lucene与关系型数据库作为两种主流的信息管理工具,各自在特定场景下展现出了独特的优势。本文旨在深入探讨Lucene与关系型数据库之间的差异,尤其是它们在全文检索...

    mongoDB非关系型数据库安装以及使用指南

    MongoDB是一款流行且功能强大的非关系型数据库系统,它以其灵活的数据模型、高可用性和可扩展性而受到广泛赞誉。本教程将引导你完成MongoDB的安装过程,并介绍其基本使用方法,适合在线教育初学者。 一、MongoDB...

    如何利用opc集成DCS系统数据到关系型数据库

    如何利用opc集成DCS系统数据到关系型数据库

    关系型数据库的工作原理(翻译)

    关系型数据库是现代数据存储和管理的核心,尤其在企业级应用中占据主导地位。它们遵循一种称为关系模型的数据结构,这种模型基于数学家埃德加·科德的关系理论。本文将深入探讨关系型数据库的工作原理,包括其核心...

    DA∕T 82-2019 基于文档型非关系型数据库的档案数据存储规范.pdf

    DA∕T 82-2019 基于文档型非关系型数据库的档案数据存储规范.pdf DA∕T 82-2019 基于文档型非关系型数据库的档案数据存储规范.pdf

Global site tag (gtag.js) - Google Analytics