当前位置:首页 » 存储配置 » 如何理解hbase列存储

如何理解hbase列存储

发布时间: 2024-09-01 16:03:42

A. 为什么说HBase是列式数据库

Hbase是一个面向列存储的分布式存储系统,它的优点在于可以实现高性能的并发读写操作,同时Hbase还会对数据进行透明的切分,这样就使得存储本身具有了水平伸缩性。

通常,顺序读取数据要比随机访问更快。而且,硬盘寻址时间的提升比起CPU速度的进步要慢得多 (参看摩尔定律),在使用硬盘作为存储媒介的系统上这种情况很可能还会持续一段时间。

下面简单罗列了一些选择行数据库还是列数据库的权衡依据。当然,如果能够把数据全放在内存中,那么使用内存数据库性能会更好。

特点:

因为硬盘寻址时间相较于计算机上其他部件的运行速度来说不是一般的慢,所以常用相同工作负载下的硬盘访问性能来比较行数据库和列数据库。

在只需要根据某几列来聚合数据的时候按列的数据组织方式更有效。因为这样只需要读取一部分数据,要比读取全部数据更快。

当只需要修改某一列值的时候按列的数据组织方式更有效。因为可以直接找到某列数据并改,而与行中的其他列无关。

B. 解读Hadoop Hbase适合存储哪类数据

最适合使用Hbase存储的数据是非常稀疏的数据(非结构化或者半结构化的数据)。Hbase之所以擅长存储这类数据,是因为Hbase是column-oriented列导向的存储机制,而我们熟知的RDBMS都是row- oriented行导向的存储机制(郁闷的是我看过N本关于关系数据库的介绍从来没有提到过row- oriented行导向存储这个概念)。在列导向的存储机制下对于Null值得存储是不占用任何空间的。比如,如果某个表 UserTable有10列,但在存储时只有一列有数据,那么其他空值的9列是不占用存储空间的(普通的数据库MySql是如何占用存储空间的呢?)。 Hbase适合存储非结构化的稀疏数据的另一原因是他对列集合 column families 处理机制。 打个比方,ruby和python这样的动态语言和c++、java类的编译语言有什么不同? 对于我来说,最显然的不同就是你不需要为变量预先指定一个类型。Ok ,现在Hbase为未来的DBA也带来了这个激动人心的特性,你只需要告诉你的数据存储到Hbase的那个column families 就可以了,不需要指定它的具体类型:char,varchar,int,tinyint,text等等。 Hbase还有很多特性,比如不支持join查询,但你存储时可以用:parent-child tuple 的方式来变相解决。 由于它是Google BigTable的 Java 实现,你可以参考一下:google bigtable 。
解读Hadoop Hbase适合存储哪类数据,参考:http://e.51cto.com/course/course_id-3819.html

C. HBase是什么为什么要使用HBase

HBase在产品中还包含了Jetty,在HBase启动时采用嵌入式的方式来启动Jetty,因此可以通过web界面对HBase进行管理和查看当前运行的一些状态,非常轻巧。为什么采用HBase?HBase 不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库.所谓非结构化数据存储就是说HBase是基于列的而不是基于行的模式,这样方面读写你的大数据内容。 HBase是介于Map Entry(key & value)和DB Row之间的一种数据存储方式。就点有点类似于现在流行的Memcache,但不仅仅是简单的一个key对应一个 value,你很可能需要存储多个属性的数据结构,但没有传统数据库表中那么多的关联关系,这就是所谓的松散数据。 简单来说,你在HBase中的表创建的可以看做是一张很大的表,而这个表的属性可以根据需求去动态增加,在HBase中没有表与表之间关联查询。你只需要 告诉你的数据存储到Hbase的那个column families 就可以了,不需要指定它的具体类型:char,varchar,int,tinyint,text等等。但是你需要注意HBase中不包含事务此类的功 能。 Apache HBase 和Google Bigtable 有非常相似的地方,一个数据行拥有一个可选择的键和任意数量的列。表是疏松的存储的,因此用户可以给行定义各种不同的列,对于这样的功能在大项目中非常实用,可以简化设计和升级的成本。

D. 传统的行存储和(HBase)列存储的区别

列存储不同于传统的关系型数据库,其数据在表中是按行存储的,列方式所带来的重要好处之一就是,由于查询中的选择规则是通过列来定义的,因此整个数据库是自动索引化的。按列存储每个字段的数据聚集存储,在查询只需要少数几个字段的时候,能大大减少读取的数据量,一个字段的数据聚集存储,那就更容易为这种聚集存储设计更好的压缩/解压算法

传统的(Oracle)行存储和(Hbase)列存储的区别

这里写图片描a
1、数据是按行存储的
2、没有索引的查询使用大量I/O
3、建立索引和物化视图需要花费大量时间和资源
4、面对查询的需求,数据库必须被大量膨胀才能满足性能需求

这里写图片描述
1、数据按列存储–每一列单独存放
2、数据即是索引
3、只访问查询涉及的列–大量降低系统IO
4、每一列由一个线索来处理–查询的并发处理
5、数据类型一致,数据特征相似–高效压缩

热点内容
草人御魂怎么配置 发布:2024-11-25 00:30:37 浏览:737
ftp上传流程 发布:2024-11-25 00:18:27 浏览:89
安卓服光遇什么时候上线的 发布:2024-11-25 00:13:22 浏览:918
80万能买到酷路泽的什么配置 发布:2024-11-25 00:10:57 浏览:336
新浪微博中如何修改密码 发布:2024-11-25 00:10:52 浏览:100
iphone访问pc 发布:2024-11-24 23:53:43 浏览:480
编译不能显示 发布:2024-11-24 23:40:52 浏览:698
人体编程 发布:2024-11-24 23:40:51 浏览:304
谜妹缓存的文件在哪 发布:2024-11-24 23:38:12 浏览:146
服务器自动清理缓存 发布:2024-11-24 23:37:14 浏览:663