`
yiihsia
  • 浏览: 68356 次
  • 性别: 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数据库设计.doc

    2. **列导向**:与传统的关系型数据库不同,HBase以列族为单位存储数据,这使得数据读取更加高效,尤其适合大数据分析场景。 3. **实时读写**:HBase支持实时的数据读写操作,适合在线服务和大数据实时处理。 4. **...

    后关系型数据库管理系统

    后关系型数据库提供三种方式访问数据:对象访问、SQL访问、直接对多维数据数组访问。而且三种访问方式能够并发访问同一数据。多维数据结构和多种数据库访问方式构成了后关系型数据库的基础。从目前来看,后关系型...

    SQL Server数据库到HBase数据库的模式转换和数据迁移研究.pdf

    转换的难点在于如何在不丢失数据关系的前提下,将SQL Server中的关系型数据模式转换为HBase的列族模式。文章提出了解决方案,其中关键步骤包括: 1. 模式转换:需要将SQL Server中的表结构转换为HBase的表结构,这...

    山东大学 软件学院 非关系型数据库ppt.zip

    非关系型数据库(NoSQL)是一种不同于传统的关系型数据库的数据存储模型。在信息化时代,随着大数据、云计算和互联网应用的快速发展,NoSQL数据库因其高可扩展性、高性能、灵活的数据模型等特点,逐渐受到广泛的关注...

    大数据环境下使用Sqoop实现HBase与关系型数据库间的数据迁移

    文档具体讲解了 Sqoop 搭配 Hadoop、HBase 使用时的基本准备流程,详尽解析利用 Sqoop 把 MySQL 等关系型数据库中的记录迁移到 HBase 表的操作步骤及命令参数含义,并简述了逆向导出的可能性及其限制条件。...

    分布式数据库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. 其他差别 - 扩展性:非关系型数据库具有更好的水平扩展性,能应对大规模数据和高并发。 - 数据一致性:关系型数据库数据一致性高,非...

    Lucene与关系型数据库对比

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

    关系型数据库习题与解答

    关系型数据库基于关系模型,其中数据以表格形式存储,每个表格称为一个表,表由行(记录)和列(字段)组成。表与表之间可以通过主键和外键建立关联,形成多表关系。例如,员工表和部门表可以通过部门ID关联,实现...

    关系型数据库和非关系型数据库.pdf

    关系型数据库是基于关系模型的数据存储方式,它的核心概念是二维表格,其中数据以行和列的形式组织。关系模型由埃德加·科德在1970年提出,这种数据库系统提供了强大的数据一致性、完整性和事务处理能力。常见的关系...

    阿里云分布式关系型数据库DRDS-最佳实践-D.docx

    阿里云分布式关系型数据库 DRDS 是一种云原生、分布式的关系型数据库,它提供了高性能、可扩展、安全可靠的数据存储和处理能力。为了帮助开发者更好地使用 DRDS,阿里云提供了 DRDS 最佳实践指南,旨在帮助开发者更...

    关系型数据库与NoSQL数据库_张华强.pdf

    例如,在需要高性能和高扩展性的场景下,可以使用NoSQL数据库来存储大规模数据,而在需要ACID事务和强一致性的场景下,可以使用关系型数据库来存储关键数据。 关系型数据库和NoSQL数据库都是数据库技术的重要组成...

    Hbase实验报告.pdf

    在本实验中,我们主要聚焦于HBase,这是一个基于谷歌Bigtable设计的开源NoSQL数据库,广泛应用于大数据存储场景。实验旨在让参与者熟练掌握HBase的Shell操作,包括创建表、输入数据以及进行特定查询。以下是详细步骤...

Global site tag (gtag.js) - Google Analytics