【HBase分布式数据库】NoSQL与数据模型

任务目的
了解什么是NoSQL,以及NoSQL类型的数据库有哪些
了解HBase的数据模型
任务清单
任务1:NoSQL简介
任务2:数据模型
任务步骤
任务1:NoSQL简介
  NoSQL(NoSQL = Not Only SQL),意为"不仅仅是SQL",即非关系型数据库。NoSQL 是一项全新的数据库革命性运动,早期就有人提出,发展至2009年趋势越发高涨。NoSQL的拥护者们提倡运用非关系型的数据存储,相对于铺天盖地的关系型数据库运用,这一概念无疑是一种全新的思维的注入。

我们可以通过第三方平台可以很容易的访问和抓取数据。用户的个人信息,社交网络,地理位置,用户生成的数据和用户操作日志已经成倍的增加。我们如果要对这些用户数据进行挖掘,那SQL数据库已经不适合这些应用了, NoSQL 数据库的发展却能很好的处理这些大的数据。关系型数据库与非关系型数据库特点如下:

NoSQL

  • 代表着不仅仅是SQL

  • 没有声明性查询语言

  • 没有预定义的模式

  • 键值对存储,列存储,文档存储,图形数据库

  • 最终一致性,而非ACID属性

  • 非结构化和不可预知的数据

  • CAP定理

  • 高性能,高可用性和可伸缩性

RDBMS

  • 高度组织化结构化数据

  • 结构化查询语言(SQL) (SQL)

  • 数据和关系都存储在单独的表中。

  • 数据操纵语言,数据定义语言

  • 严格的一致性

  • 基础事务

NoSQL的优缺点如下:

优点:

  • 高可扩展性

  • 分布式计算

  • 低成本

  • 架构的灵活性,半结构化数据

  • 没有复杂的关系

缺点

  • 没有标准化

  • 有限的查询功能(到目前为止)

  • 最终一致是不直观的程序

非关系型数据库种类很多,如图中的总结:

类型部分代表特点
列存储 HBase、Cassandra 按列存储数据,最大的特点是方便存储结构化和半结构化数据,方便做数据压缩,对针对某一列或者某几列的查询有非常大的IO优势。
文档存储 MongoDB 文档存储一般用类似json的格式存储,存储的内容是文档型的。这样也就有机会对某些字段建立索引,实现关系数据库的某些功能。
键值存储 Redis 可以通过key快速查询到其value。一般来说,存储不管value的格式,照单全收。(Redis包含了其他功能)
图存储 FlockDB 图形关系的最佳存储。使用传统关系数据库来解决的话性能低下,而且设计使用不方便。
对象存储 Versant 通过类似面向对象语言的语法操作数据库,通过对象的方式存取数据。
xml数据库 BaseX 高效的存储XML数据,并支持XML的内部查询语法,比如XQuery,Xpath。

示例-Redis
关键点:超快Blazing fast ,IM data structure engine,支持五种,Key-value最简单。只有Redis有事务机制 。
适合:不支持第二索引,在可以控制的数据库大小情况下(放得下整个内存),快速改变数据,快速写数据。
案例:股票价格系统 分析,实时数据收集,联系等等。Redis Cluster可以进行复制和手工failover。

示例-Cassandra
关键点:继承BigTable的列结构、Dynamo的最终一致性。按列查询 写快于读Map/reduce possible with Apache Hadoop
适合:当写操作多于读操作 (如logging)。
案例:银行Banking,金融系统,写必须快于都的场合,实时的数据分析等。

示例-HBase
关键点:十亿级别的行 X 百万级别的列大容量大表模型(高一致性)。Map/reduce with Hadoop 能够实时获得基于查询的优化性能的节约型网关适合。
适合:随机实时的读写操作,高吞吐量写,随机访问大数据集。
案例: Facebook 消息数据库 。

任务2:数据模型

以关系型数据的思维下会感觉,上面的表格是一个5列4行的数据表格,但是在HBase中这种理解是错误的,其实在HBase中上面的表格只是一行数据。

1.2-2
1.2-1

行键

– 与时间戳一起,决定一行数据的唯一标识。

– RowKey是按照字典顺序排序的。

– RowKey最多只能存储64k的字节数据。

列族和列

HBase表中的每个列都归属于某个列族,列族必须作为表模式(schema) 定义的一部分预先给出。
列名以列族作为前缀,每个“列族”都可以有多个列成员,新的列族成员(列)可以随后按需,动态加入。Family下面可以有多个Qualifier,所以可以简单的理解为,HBase中的列是二级列,也就是说Family是第一级列,Qualifier是第二级列。两个是父子关系。
权限控制、存储以及调优都是在列族层面进行的。
HBase把同一列族里面的数据存储在同一目录下,由几个文件保存。
目前为止,HBase的列族能能够很好处理最多不超过3个列族。
时间戳

在HBase每个cell存储单元对同一份数据有多个版本,根据唯一的时间 戳来区分每个版本之间的差异,不同版本的数据按照时间倒序排序,最新的数据版本排在最前面。
时间戳的类型是64位整型。
时间戳可以由HBase(在数据写入时自动)赋值,此时时间戳是精确到毫 秒的当前系统时间。
时间戳也可以由客户显式赋值,如果应用程序要避免数据版本冲突, 就必须自己生成具有唯一性的时间戳。
单元格

由行和列的坐标交叉决定。
单元格是有版本的(由时间戳来作为版本)。
单元格的内容是未解析的字节数组(Byte[]),cell中的数据是没有类型的,全部是字节码形式存贮。
由{row key,column(= +),version}唯一确定的单元。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不太灵光的程序员

有用的话可以请博主喝杯咖啡续命

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值