栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 前沿技术 > 大数据 > 大数据系统

【简介】分布式NoSQL数据库

【简介】分布式NoSQL数据库

分布式NoSQL数据库 基本概念 什么是NoSQL?

NoSQL是一些分布式非关系型数据库的统称,它采用非关系的数据模型,弱化模式或表结构、弱化完整性约束、弱化甚至取消事务机制,可能无法支持,或不能完整的支持SQL语句。

目的是实现强大的分布式部署能力——一般包括分区容错性、伸缩性和访问效率(可用性)。

什么是Hbase?

全称Hadoop Database,它是Google BigTable的开源实现,是一个高可靠、高性能、可伸缩、实时读写、列式存储的分布式NoSQL数据库。所以,它与Hive不同的是,它更适合存储非结构化、半结构化数据,其次是完全的列式存储,并且支持实时读写;当然它们都是分布式的大数据产品,就一定支持集群的动态伸缩、可靠性高、性能优异的特点。

Hbase数据以Key-Value形式存储,以二维表方式组织,所以对于Hbase表的操作,和关系型数据库的数据表有些类似,但底层存储形式截然不同;而且Hbase只能通过API操作,不支持SQL。

Hbase更适合存储半结构化、非结构化数据。当然Hbase也支持结构化数据存储,但相对于关系型数据库而言,它们的侧重点有所不同。关系型数据库更侧重于小规模数据的在线事务处理(OLTP),而Hbase侧重于海量数据的实时读写。

Hbase底层采用HDFS作为文件存储系统,数据的可靠性由HDFS来保证。

Hbase特点
  1. 海量数据存储:Hbase作为大数据NoSQL数据库,能够存储PB级别以上的数据;而且因为底层是以Key-Value形式存储,不支持SQL,所以更适合非结构化、半结构化数据存储。
  2. 列式存储:在大数据领域,列式存储可以更好的提升性能,因为减少了数据量的抽取。例如在单独对某几列数据进行运算时,如果是基于行式存储,则需要将表中的每行数据读取到内存中,然后再对需要的列数据进行抽取,而列式存储则直接将需要的列加载到内存中即可;这在海量数据的背景中,对性能有质的提升。

  1. 稀疏性:正因为列式存储的方式,所以Hbase允许数据的稀疏存储,即值为空的数据不占用存储空间。对于行式存储,因为每行数据的大小是固定的,所以即使某一行的某个字段,数据为空,也必须使用占位符代替;但列式存储而言,每一列数据存放在一起,且对每列数据单独建立索引,如果某个字段数据为空,则可以不进行存储,没有行式存储的限制。列式存储带来的稀疏性,在海量数据背景下,对磁盘空间的利用率有了很大提升。

  2. 数据实时随机读写:虽然Hbase数据存储在HDFS中,但它作为一个数据库而言,使用LSM树,将数据缓存到内存中,可以保证数据进行实时的读写,缓存达到阈值后才会存储到HDFS中。可是HDFS并不支持对数据进行修改,Hbase其实将数据的修改操作,转换为了追加操作,将修改后的数据打上时间戳,这样在读取数据时,只获取最新时间戳的数据即可;这样的话,数据冗余就会越来越多,Hbase会定期将HDFS中的数据进行合并,删除过期数据。

  3. 数据强一致性:数据一致更新,所有数据变动都是同步的,这里的同步是指客户端和服务端两个层面。这样就意味着,数据一旦写入到Hbase中,所有的客户端看到的数据都是最新的,Hbase服务端集群中的各个节点保存的数据也是最新的。因为,虽然Hbase的数据是分布在不同节点中的,但对于某一条特定的数据,一定是位于某一个从节点中的;只要这个节点的数据更新后,意味着之后的访问都可以获取到最新数据;那在分布式集群中,这个从节点宕机怎么办?数据可靠性如何保证?Hbase的数据最终是存储到HDFS中的,而HDFS有副本机制可以保证,而Hbase则不需要关心数据的可靠性。

  4. 高并发、高可靠、高扩展:首先Hbase是高并发的,主要面向高并发读,可以支持多用户查询,这也是它的应用场景之一;其次在大数据产品中,高可靠、高扩展是它必须具备的两个特性,保证服务是可靠的,是容灾的,而且集群要随着数据和处理规模的变化,进行动态的扩缩容。

所以,总结起来,Hbase作为一个存储系统,必然能够进行海量数据的存储;对于这些存储起来的海量数据,因为它的列式存储特性,抽取的数据量减少,处理性能有了很大的提升,而且列式存储直接带来了稀疏的特性,提升磁盘利用率。其次,Hbase作为数据库,能够满足数据的实时随机读写,并提供数据强一致性保证。最后,它作为大数据系统,有高可靠、高扩展的特性,并且具有高并发的优势。

适用场景

一般在企业生产中,会在以下4个场景中使用Hbase。

  1. 实时读写:因为Hbase本身使用缓存机制,数据立即写入缓存之后,客户端便可以立即从缓存中进行读取,并且有数据强一致性的保证,这是像Hive这类专门用于数据批处理的产品所无法提供的。所以,Hbase一般会用于实时流处理场景中,对结果数据,或者中间数据进行存储;流处理场景的数据实时性很高,当前数据的处理结果要实时写入,并且写入后要立即能够满足下一批到达的数据进行读取,这都是Hbase可以提供的特性。
  2. 并发查询:如果在海量数据场景中,有高并发查询的要求,比如需要保证1000人同时进行数据查询,那一定会考虑Hbase。但要注意,只能满足简单条件的查询,因为Hbase只有单个主键(RowKey),而对于其它字段进行条件查询时均会进行全表扫描,所以对于RowKey的优化是Hbase性能提升的关键,这也是为什么Hbase在复杂查询场景中性能不好的原因。
  3. 半结构化和非结构化数据存储:Hbase本身是NoSQL数据库,不像关系型数据库一样有多种数据类型,它所有的数据都是字节数组Byte[],所以能够满足半结构化、非结构化数据的存储,如JSON、日志、图片、音频的存储。对于小于100K的数据,Hbase有较好的优化,对于100K-10M的数据,则需要开启MOB功能(这里先留个印象),超过10M的文件,性能上会有折损。
  4. 动态DDL结构化数据存储:Hbase虽然本质是Key-Value数据库,但它使用二维表的形式进行组织,所以也可以用于存储结构化数据。而且因为Hbase列式存储的特性,所以表字段的变化对数据不造成影响,比如对表临时增加一个字段、删除一个字段,而在行式存储的数据库中,会造成很大的性能影响。这也就使得Hbase极其适合表结构动态变化的场景,适应频繁的DDL操作,这在互联网场景业务不确定的情况下会有很大的帮助。
访问方式

Hbase可以使用Shell命令直接进行操作,它和SQL语法不同,需要一定的学习成本,这是使用最多的一种方式。但如果集成了Apache Phoenix,则支持在Hbase上直接使用SQL进行操作,Phoenix会自动完成转换操作,这种方式学习成本低,易用性强,很受企业开发者的青睐。当然对于开发人员,Hbase也提供编程接口Hbase API,来完成对Hbase的操作。

基本对Hbase有一个认识后,接下来学习一下Hbase的数据模型和系统架构的内容。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/303060.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号