重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
NoSQL不像传统关系型库那样有统一的标准,也不具有普适性。所以要根据应用和数据的存取特征来选择适合的NoSQL。
创新互联2013年开创至今,先为阿拉山口等服务建站,阿拉山口等地企业,进行企业商务咨询服务。为阿拉山口企业网站制作PC+手机+微官网三网同步一站式服务解决您的所有建站问题。
如果以前没有接触过NoSQL,MongoDB是一个比较好的选择,他支持的所以和查询能力是所有NoSQL中最强大的,缺点是索引的成本和文档大小限制。
如果是使用Hadoop大数据分析,数据基本上不存在修改,只是插入和查询,并且需要配合Hadoop的MR任务,HBase会是很好的选择。
如果要求有很强的扩展能力,高并发读写和维护方便,Casaandra则是不错的选择。
当然除了上面三个流行的NoSQL,还有很多优秀的NoSQL数据库,而且他们都有各自擅长领域,所以需要了解你们产品自身的特点然后分析选择哪种才是最适合的,往往在大型系统中不是单一的数据库,而是使用多种数据库组合。
简单来说,传统关系型数据库的修改与删除,可以快速通过主键、列或索引直接锁定到某一行或某些行,进行物理删除。
而对于Hbase来说,受到hdfs文件系统的局限(hdfs文件系统不能修改,添加也很不方便),进行CRUD的操作就会变得相对复杂。
Hbase的修改,是根据某个行键添加一行数据,并未这行数据生成一个较新的时间戳来实现,每个行键都会对应多个时间戳的数据,那么最新的时间戳就是最终修改后的内容。
而删除则是通过标记来实现,如果要删除某行记录,Hbase会添加一个带有删除标记的行,通过这个删除标记来辨认该行建的数据是否删除。
Hbase与关系型数据库的区别:
1、场景
Hbase是面向列的数据库,适合大量的插入的同时又要具备不俗的读功能,而Oracle或其他关系型数据库适合处理比较复杂的业务关系或事务处理,而且,在数据在一定量级下都会有良好的表现,并不是所有业务的数据压力都会发生比较极端的情况。
2、索引
Hbase只能做主键索引,而关系型数据库可以根据需求不同加入适合的索引机制,供用户查询。
3、瓶颈
Hbase的瓶颈是硬盘的传输速度,Oracle的瓶颈是硬盘的寻道时间(可以看做是硬盘的转数)。
4、业务
Hbase适合按照时间排序的业务,而Oracle或其他关系型数据库应用比较广泛,如OLTP或OLAP
hbase概念: 非结构化的分布式的面向列存储非关系型的开源的数据库,根据谷歌的三大论文之一的bigtable 高宽厚表 作用: 为了解决大规模数据集合多重数据种类带来的挑战,尤其是大数据应用难题。
能干什么: 存储大量结果集数据,低延迟的随机查询。
sql: 结构化查询语言 nosql: 非关系型数据库,列存储和文档存储(查询低延迟),hbase是nosql的一个种类,其特点是列式存储。
非关系型数据库--列存储(hbase) 非关系型数据库--文档存储(MongoDB) 非关系型数据库--内存式存储(redis) 非关系型数据库--图形模型(graph) hive和hbase区别? Hive的定位是数据仓库,虽然也有增删改查,但其删改查对应的是整张表而不是单行数据,查询的延迟较高。
其本质是更加方便的使用mr的威力来进行离线分析的一个数据分析工具。
HBase的定位是hadoop的数据库,电脑培训发现是一个典型的Nosql,所以HBase是用来在大量数据中进行低延迟的随机查询的。
hbase运行方式: standalonedistrubited 单节点和伪分布式? 单节点:单独的进程运行在同一台机器上 hbase应用场景: 存储海量数据低延迟查询数据 hbase表由多行组成 hbase行一行在hbase中由行健和一个或多个列的值组成,按行健字母顺序排序的存储。
Hbase是一种NoSQL数据库,这意味着它不像传统的RDBMS数据库那样支持SQL作为查询语言。Hbase是一种分布式存储的数据库,技术上来讲,它更像是分布式存储而不是分布式数据库,它缺少很多RDBMS系统的特性,比如列类型,辅助索引,触发器,和高级查询语言等待
那Hbase有什么特性呢?如下:
强读写一致,但是不是“最终一致性”的数据存储,这使得它非常适合高速的计算聚合
自动分片,通过Region分散在集群中,当行数增长的时候,Region也会自动的切分和再分配
自动的故障转移
Hadoop/HDFS集成,和HDFS开箱即用,不用太麻烦的衔接
丰富的“简洁,高效”API,Thrift/REST API,Java API
块缓存,布隆过滤器,可以高效的列查询优化
操作管理,Hbase提供了内置的web界面来操作,还可以监控JMX指标
什么时候用Hbase?
Hbase不适合解决所有的问题:
首先数据库量要足够多,如果有十亿及百亿行数据,那么Hbase是一个很好的选项,如果只有几百万行甚至不到的数据量,RDBMS是一个很好的选择。因为数据量小的话,真正能工作的机器量少,剩余的机器都处于空闲的状态
其次,如果你不需要辅助索引,静态类型的列,事务等特性,一个已经用RDBMS的系统想要切换到Hbase,则需要重新设计系统。
最后,保证硬件资源足够,每个HDFS集群在少于5个节点的时候,都不能表现的很好。因为HDFS默认的复制数量是3,再加上一个NameNode。
Hbase在单机环境也能运行,但是请在开发环境的时候使用。
内部应用
存储业务数据:车辆GPS信息,司机点位信息,用户操作信息,设备访问信息。。。
存储日志数据:架构监控数据(登录日志,中间件访问日志,推送日志,短信邮件发送记录。。。),业务操作日志信息
存储业务附件:UDFS系统存储图像,视频,文档等附件信息
不过在公司使用的时候,一般不使用原生的Hbase API,使用原生的API会导致访问不可监控,影响系统稳定性,以致于版本升级的不可控。
HFile
HFile是Hbase在HDFS中存储数据的格式,它包含多层的索引,这样在Hbase检索数据的时候就不用完全的加载整个文件。索引的大小(keys的大小,数据量的大小)影响block的大小,在大数据集的情况下,block的大小设置为每个RegionServer 1GB也是常见的。
探讨数据库的数据存储方式,其实就是探讨数据如何在磁盘上进行有效的组织。因为我们通常以如何高效读取和消费数据为目的,而不是数据存储本身。
Hfile生成方式
起初,HFile中并没有任何Block,数据还存在于MemStore中。
Flush发生时,创建HFile Writer,第一个空的Data Block出现,初始化后的Data Block中为Header部分预留了空间,Header部分用来存放一个Data Block的元数据信息。
而后,位于MemStore中的KeyValues被一个个append到位于内存中的第一个Data Block中:
注:如果配置了Data Block Encoding,则会在Append KeyValue的时候进行同步编码,编码后的数据不再是单纯的KeyValue模式。Data Block Encoding是HBase为了降低KeyValue结构性膨胀而提供的内部编码机制。
NoSQL太火,冒出太多产品了,保守估计也成百上千了。
互联网公司常用的基本集中在以下几种,每种只举一个比较常见或者应用比较成功的例子吧。
1. In-Memory KV Store : Redis
in memory key-value store,同时提供了更加丰富的数据结构和运算的能力,成功用法是替代memcached,通过checkpoint和commit log提供了快速的宕机恢复,同时支持replication提供读可扩展和高可用。
2. Disk-Based KV Store: Leveldb
真正基于磁盘的key-value storage, 模型单一简单,数据量不受限于内存大小,数据落盘高可靠,Google的几位大神出品的精品,LSM模型天然写优化,顺序写盘的方式对于新硬件ssd再适合不过了,不足是仅提供了一个库,需要自己封装server端。
3. Document Store: Mongodb
分布式nosql,具备了区别mysql的最大亮点:可扩展性。mongodb 最新引人的莫过于提供了sql接口,是目前nosql里最像mysql的,只是没有ACID的特性,发展很快,支持了索引等特性,上手容易,对于数据量远超内存限制的场景来说,还需要慎重。
4. Column Table Store: HBase
这个富二代似乎不用赘述了,最大的优势是开源,对于普通的scan和基于行的get等基本查询,性能完全不是问题,只是只提供裸的api,易用性上是短板,可扩展性方面是最强的,其次坐上了Hadoop的快车,社区发展很快,各种基于其上的开源产品不少,来解决诸如join、聚集运算等复杂查询。
hadoop的hdfs支持海量数据量存储
mapreduce支持对海量数据的分布式处理
oracle虽然可以搭建集群
但是当数据量达到一定限度之后查询处理速度会变得很慢
且对机器性能要求很高
其实这两个东西不是同类
hadoop是一个分布式云处理架构,倾向于数据计算
而oracle是一个关系型数据库,倾向于数据存储。要说比较可以比较hbase与oracle。
hbase是一种nosql数据库,列式数据库,支持海量数据存储,支持列的扩展,但是查询操作较复杂,不如oracle这类关系型数据库简单,且只支持一个索引,但是Hbase在表结构设置合理情况下,查询速度跟数据量大小没有太大关系,即数据量的大小不会影响到查询速度,顺便说句Hbase查询速度可以达到ms级