参考资源
http://172.16.16.164:8000/courses/81 最新的实验 前5章 理解下,能完成对数据库的操作。
HBase
http://172.16.16.164:8000/courses/81/assignments/709?module_item_id=3779
MongoDB参考:
http://172.16.16.164:8000/courses/81/assignments/711?module_item_id=3781
http://172.16.16.164:8000/courses/81/assignments/712?module_item_id=3782
数据库的模型特点:列族 文档 键值对 图
数据库的特点:官网的首页
与关系数据库对比: 逻辑结构(数据库 表 行 单元格) 操作语句对比(内容可以基本对比)
数据库场景:
数据库语句操作:数据库操作 数据表操作 表中数据操作(CRUD 索引 高级的查询)
数据库的原理:hbase的原理 mongodb存储引擎B+树
数据库的编程:java 和 python操作数据库 能连接,能完成CRUD 能完成适当的高级查询就可
综合案例:大家去完成下
HBase列族数据库
简介
Hbase-Hadoop Database是一个高可用、高性能、面向列、可伸缩、实时读写的分布式数据库 。
大:一个表可以有上亿行,上百万列。
可伸缩:可根据负载增减节点。
面向列:相对于行式数据库,空间利用率高。
稀疏:对于为空(NULL)的列,并不占用存储空间,因此,表可以设计的非常稀疏。
高可用:基于HDFS的多副本机制,WAL(Write-Ahead-Log)预写机制,Replication 机制
与关系数据库的对比
存储对比
MySQL | HBase |
数据库db | namespace |
表table | table |
列字段 | 列族+列标识 |
行 | rowkey行间 |
单元格cell | rowkey+列族+列标识+版本 |
操作语句
表级别语句
建表
mysql
CREATE TABLE exam_result ( id INT, name VARCHAR(20), chinese DECIMAL(3,1), math DECIMAL(3,1), english DECIMAL(3,1) );
hbase
#创建一张名为Student的表,包含基本信息(baseinfo)、学校信息(schoolinfo)两个列簇 create 'student','haseinfo','schoolinfo'
删除表
mysql
drop table user;
hbase
#删除表前需要先禁用表 disable 'student' #删除表 drop 'student'
表数据语句
增加
put 'student', '1','baseinfo:name','tom' put 'student', '1','baseinfo:birthday','1990-01-09' put 'student', '1','baseinfo:age','29' put 'student', '1','schoolinfo:name','Havard' put 'student', '1','schoolinfo:localtion','Boston' put 'student', '2','baseinfo:name','jack' put 'student', '2','baseinfo:birthday','1998-08-22' put 'student', '2','baseinfo:age','21' put 'student', '2','schoolinfo:name','yale' put 'student', '2','schoolinfo:localtion','New Haven' put 'student', '3','baseinfo:name','maike' put 'student', '3','baseinfo:birthday','1995-01-22' put 'student', '3','baseinfo:age','24' put 'student', '3','schoolinfo:name','yale' put 'student', '3','schoolinfo:localtion','New Haven' put 'student', '4','baseinfo:name','maike-jack'
获取指定行、指定行中的列族、列的信息
# 获取指定行中所有列的数据信息 get 'student','3'
# 获取指定行中指定列族下所有列的数据信息 get 'student','3','baseInfo'
# 获取指定行中指定列的数据信息 get 'student','3','baseinfo:name'
删除指定行、指定行中的列
# 删除指定行 delete 'student','3'
# 删除指定行中指定列的数据 delete 'student','3','baseinfo:name'
get查询
# 获取指定行中所有列的数据信息 get 'student','3' # 获取指定行中指定列族下所有列的数据信息 get 'student','3','baseinfo' # 获取指定行中指定列的数据信息 get 'student','3','baseinfo:name'
scan查询
#查询整表数据 scan 'student' #查询指定列簇的数据 scan 'student', {COLUMN=>'baseinfo'} # 查询指定列的数据 scan 'student', {COLUMNS=> 'baseinfo:birthday'} # 查看指定列两个版本的数据(3.3中我们设置了3个版本) scan 'student', {COLUMNS=> 'baseinfo:birthday',VERSIONS=>2} # 查看前3条数据 scan 'student',{LIMIT=>3}
数据库的原理
数据库的架构
region定位
数据写入
数据读取
WAL机制
minor合并-store
major合并-store
region拆分
region合并
Region负载均衡
存储结构
架构
MongoDB文档数据库
简介
MongoDB是文档型的NoSQL数据库,数据以文档(对应关系型数据库的记录)的形式在MongoDB中保存,文档实际上就是一个个JSON字符串,使用JSON的好处是非常直观,通过一系列的Key-Value键值对来表示数据,符合我们的阅读习惯。
在Java、Python中对JSON都有很好的支持,数据从MongoDB中读取出来后,可无需转换直接使用;支持丰富的数据结构,Value可以是普通的整型、字符串、数组、嵌套的子文档,使用嵌套的好处是在MongoDB中仅需一次简单的查询就能够获取到你所需的数据。
与关系数据库的对比
存储对比
MySQL | MongoDB |
数据库db | db |
表table | 集合collection |
列字段 | |
行 | document文档 |
单元格cell | 键值对k:v |
操作语句 见PPT
命名规范
数据库的原理
副本集的架构
分片集的架构