NoSQL是非关系型数据库
两者关系,HBase是NoSQL的一种。
NoSQL特性
1.Eventual consistency(最终一致性):
写入数据库之后,
你不一定能马上读到刚写入的数据
但最终会保持一致。
2. NoSQL数据库不怕数据冗余多副本,因为成本比较低。
而且这样查询很多数据就不需要join了,很多数据在一张表里就搞定了。
关系型数据库要避免数据冗余,成本会增加不少。
关系型数据库本身硬盘是特殊的,空间就已经很贵了,column可以用成char绝对不会用varchar。
NoSQL概念解释
1. CAP理论:
Consistency:数据一致性
Availability :服务可用性(7x24小时)
Partition Tolerance:分区容错性(不同机器上分布式部署后并行处理,
并可以进行灾难恢复。也就是某台机器上服务挂了,不影响整个系统的继续处理)
可以看到关系型数据库比较侧重于数据一致性(读写随时一致)和服务7x24小时可用
Nosql数据库就比较重视一致性和容灾,虽然不是强一致性,而是最终一致性
,对于服务7x24小时可用做的也没那么好。
HBase的Availability是通过zookeeper实现的,原生不支持,但是有方案。
2. 索引自己看吧,功能比较弱。
HBase要用到HDFS
index一般建在主键上。
3. Nosql几种主流查询方式
(1)脚本语言,如js
(2)后面加了对sql语言的支持,但是优化器还没有,做的不是很好。不如hive。
(3)有些对mapreduce 代码也支持,所以mapreduce可以跨节点来计算。
4.Sharding(分片)
和hive partition是一个意思!!!
相当于把一个表,分布式存储在不同机器上,进而分布式查询。
5. 根据业务需求来选择Nosql产品
主要是四类:
(1)key-value store
最广泛但不是最流行,基于key-value。可以理解为一个大的hashmap table。
对数据结构schema没有特别要求。
产品如redis等。
数据的格式最大的特点是:都有一个key,比如说下图中row_id是key,其他列都是value。
(2)wide Column
和key-value方式唯一的区别就是宽列(column families / super column)。
Column famiilies就是一组column的集合,
以Hbase领衔,Google big table,Cassandra等。
更接近大数据的处理规模。
格式如下图所示,column families也就是多个supercolumn,supercolumn下还有column。
(3)Document Store(完全没听懂,但是不重要)
以mongoDB领衔
文档通常是json对象,本身就是一种schema。
(4)用于关系型分析,比如朋友网络如何建立的。
基于图的数据库分析会方便。