一、HBase中的<K,V>
在HBase中我们可以把<行键,列.列族1,列.列族2
,列.列族3
>看作是一个<K,V>类型,如下所示:
键 | 值 |
---|---|
[“2015001”,“info1”,“email1”] | “www.da.com” |
[“2015002”,“info2”,“email2”] | “www.sad.com” |
二、概念视图
HBase中的概念视图,一个表可以视为一个稀疏、多维的映射关系。如下所示,HBase表是一个稀疏的映射关系,里面存在很多的空的单元格。
三、面向列的存储
- 行式数据库使用NSM(N-ary Strorage Model)存储模型,如果每一行只有少量的数据,会浪费很多磁盘空间和内存带宽。
- 列式数据库使用DSM(Decomposition Storage Model)存储模型,缺点是执行连接操作消耗很大的元组重构代价,因为一个元组的不同属性分散到了不同的磁盘页中,当需要一个完整的元组时,就要从多个磁盘页中读取相应的字段组合起来得到一个元组。
四、NOSQL数据的产生
- 海量数据的查询效率问题:NOSQL远远快于传统的关系型数据库
- 高并发效率NOSQL更优秀
- NOSQL数据库可以通过横向扩展迅速提高读写速率,应对突发的瞬间IO读写提升
- 不要求严格的事务处理,如果一个微博用户填写了错误的信息,只需要删除原来的数据即可,不需要向传统的数据库一样进行回滚操作
- 需要求严格的实时性,比如微博增加几个粉丝,可以过几分钟更新数据。以前web1.0时代,到银行存钱希望存储以后马上可以显示出来
- 不需要大量的jion操作,用一个单表查询就行
五、CAP:C、A、P只能取其二
C(consistency):一致性。
它是指任何一个读操作总是能够读到之前完成的写操作的结果,也就是在分布中,不同服务器中的数据一致。
A(Availability):可用性。
他是指快速获取数据,可以确定的时间内返回操作结果。
P(Tolerance of Network Partition):分区容忍性。
它是指当网络中出现分区的情况时(A服务器无法与其他服务器通信),分离的系统也能正常的进行。
(1)CA(放弃分区容忍性):最简单的做法就是把所有的事务关系的内容都放在同一个机器上。传统的DBMS就是这样做的。
(2)CP(放弃可用性):当网络出现分区时,收到数据一致性影响,等待期间无法对外提供服务,Neo4J、BigTable、HBase等Nosql都采用了CP设计原则。
(3)AP(放弃一致性):用户发布数据能够及时被看到不重要,重要的是能够立刻被发出去。网站一般都是朝着AP的方向发展。Dynamo,Riak等数据库采用AP原则。
六、NoSQL到NewSQL
支持事务的可扩展数据库,spanner作为代表,实现全球一致性,有一个基于GPS和原子钟实现的时间API。