0%

NoSQL数据库理论

NoSQL

Not Only SQL

可扩展性: 纵向扩展(垂直扩展):装备升级(成员不增加,提升单位成员的效率) 横向扩展(水平扩展):增加更多的成员(装备不一定升级;成员之间通讯增加,算力不是线性增长,近线性增长)

为什么NoSQL: 1. 计算和存储可扩展性; 2. 模式(schema)的可自定义;(模式指的是数据库中对象的集合,例如:表、视图、存储过程;元数据,对数据的描述) 3. Web 2.0下关系数据库的事务、范式等特性可放宽。

NoSQL与数据库间的比较

  1. 没有统一的数据模型;
  2. 横向扩展;
  3. 模式定义灵活;
  4. 弱一致性(最终一致性);
  5. 没有标准的查询语言。

NoSQL数据库分类

键值数据库:Redis、Amazon DynamoDB 列族数据库:HBase、Cassandra 文档数据库:MongoDB; 图数据库:Neo4J

自包含(self-contained):数据和数据的定义在一起,数据与关联的数据也是在一起。(即无其它依赖项。) e.g. age:25, name:xiaoming sex:m age:28, name:xiaoli sex:f university:kmust

NoSQL数据库原理

CAP: 一致性(Consistency):任何一个节点读到(或写到)的某个数据是相同的; 可用性(Availability):可快速读到(或写到)数据; 分区容忍性(Partition tolerance):可分区,可容错

e.g. CA:MySQL、SQL Server CP:HBase、Neo4J、MongoDB AP:DynamoDB、Cassandra

BASE: Basically Avaible:基本可用,允许分布式系统一部分出错 Soft state:软状态,允许有一段时间数据是不一致的

Eventually consistent:最终一致性,保证数据最终是一致的(弱一致性的特例)

给定N(数据副本数)、W(写数据需要完成的节点数)、R(读数据需要完成的节点数) 强一致性:W+R>N,达到强一致性;e.g.HDFS、HBase 弱一致性:W+R<=N,达到弱一致性

事务型应用:OldSQL(传统关系数据库) 互联网应用:NOSQL 分析型应用:NewSQL(关系模型,强一致性、高可扩展性),e.g. Amazon RDS, Micsoft SQL Azure

数据仓库设计与开发

数据仓库设计

系统设计差异

操作型数据库 数据仓库
面向应用 面向分析
确定的应用需求 不确定的分析需求
事务处理性能 数据的全局一致性
数据来自组织外部 数据来自系统内部

数据仓库设计原则

面向主题原则、数据驱动原则、原型法设计原则

数据仓库设计步骤

​ 1、明确主题

​ 2、概念模型设计

​ 3、技术准备

​ 4、逻辑模型设计

​ 5、物理模型设计

​ 6、数据仓库生成

​ 7、数据仓库的运行与维护

数据仓库设计方法论

DM(数据集市) --> DW(数据仓库) (自底向上)(成本小,收益大)

DW(数据仓库) -->DM(数据集市) (自顶向下)(成本大,收益小)

数据仓库开发

数据粒度

粒度:数据综合程度高低的一个度量

粒度越粗,综合程度越高,存储空间越小,回答的查询种类越多,查询效率越高;

粒度越细,综合程度越低,存储空间越大,回答的查询种类越少,查询效率越低。

年(粗)-->月-->日(细)

分割(分区)

划分方式:水平划分和垂直划分

分区类别::

  • 范围分区:按时间分割,按单位分割。(分布式数据库)

  • 哈希分区:(polarDB-X数据库)

  • 列表分区:按职业、学历分区

分布式数据库HBase理论

介绍

HDFS:分布式文件系统。它是Google的GFS的开源实现。

HBase:分布式数据库,存储半结构化或非结构化数据,提供了高效访问。它是Google的BigTable的开源实现。

Zookeeper:分布式协调管理框架。它是Google的Chubby的开源实现。

Hadoop MapReduce:分布式计算框架。它是Google的MapReduce的开源实现。

大数据/云计算计算模式

批处理计算(离线计算):小时级响应, e.g. Hadoop (HDFS, MapReduce) 交互计算(在线计算):秒级、分钟级响应 实时计算(流数据计算):毫秒、秒级响应 e.g. HBase

HBase与传统数据库

传统数据库的问题(两个可扩展性差): 1)计算可扩展性差,例如:Oracle RAC扩展多达到100台机器。 2)数据库定义可扩展性差,例如:增加列属性不便且有限。

HBase访问接口

1)Java API 2)Shell命令 3)SQL语句:Hive,Pig

HBase数据模型

传统关系数据库:(行、列)-> (单元格)值 HBase:(行键、列族、列(限定符)、时间戳)-> (单元格)值

e.g.

id=20 姓名:张三(time stamp 1)

id=20 姓名:李四 (time stamp 2)

存储方式

行存储(Row Storage): 高事务处理效率 适用OLTP(联机事务处理),e.g.传统数据库 列存储(Column Storage):高压缩率、高查询效率,适用OLAP(联机分析处理),e.g. HBase HTAP(混合行列存储):

e.g. 25 28 30 32 36

run length code:25 3 2 2 4

select xh, name from student;

HBase实现

一主多从架构,例如: HDFS(NameNode, DataNodes), HBase(HMaster, HRegionServer), MapReduce(Master, Slaves)

HBase的表由多个Region组成。

HBase的寻址访问: .Meta:Data Region id -> Region Server .Root:Root id -> Meta Region id

形成了三级寻址访问结构: .Root -> .Meta -> Data

HBase架构

客户端:提供HBase的访问接口; Zookeeper:提供集群的协调管理服务; HMaster:元数据管理;数据的管理(增删改查请求,负载均衡、Region的管理) HRegionServer:提供了实际数据的读写访问

HRegionServer存储结构: 包括10 - 1000个Region和一个HLog,每个Region包括:MemStore、StoreFile(HFile)

启动HBase命令

start-hbase.sh stop-hbase.sh

确认启动成功: jps Web UI:http://master:60010

hbase shell:进入hbase的shell交互界面 exit:退出hbase的shell交互界面

create:创建表,create '表名','列族名1','列族名2','列族名N'

put:添加记录,put '表名','rowkey','列族:列','值'

get:查看记录rowkey下的所有数据,get '表名','rowkey' ( get:获取某个列族,get '表名','rowkey','列族' get:获取某个列族的某个列,get '表名','rowkey','列族:列')

list:查看所有表
desc:描述表信息,desc '表名' scan:查看所有记录,scan '表名' (scan:查看某个表某个列中所有数据,scan '表名',{COLUMNS=>'列族名:列名'})

count:查看表中的记录总数,count '表名'

delete:删除记录,delete '表名','行名','列族:列' (删除整行,deleteall '表名','rowkey') drop:删除一张表
(先要屏蔽该表,才能对该表进行删除:第一步 disable '表名',第二步 drop '表名') truncate:清空表,truncate '表名'

更新记录 就是重新一遍,进行覆盖,hbase没有修改,都是追加

exists:判断表存在,exists '表名'

is_enabled / is_disabled:判断是否禁用启用表 is_enabled '表名' is_disabled '表名'

status:查看hbase状态

数据仓库原理

数据仓库系统结构

数据库与数据仓库对比

数据库 数据仓库
细节的 综合或提炼的
在存取时准确的 代表过去的数据
可更新的 不更新
一次操作数据量小 一次操作数据量大
面向应用 面向分析
支持管理 支持决策
用于事务处理 主要用于分析数据

数据仓库与数据库的区别

本质上主要为异构和同构的差别

事务型数据库(操作型):TP事务处理,以写为主

分析型数据库:AP分析处理,以读为主

DW、ODS、DM属性

DW(数据仓库)(侧重于计算能力) ODS(操作型数据存储)(能够实时报表分析)
A、面向主题的 A、面向主题的
B、集成的 B、集成的
C、时变的 C、当前的
D、非易失的/稳定的 D、易失的

DM(数据集市)

(Data Mart)

1、独立的数据集市

2、从属的数据集市:

  • 面向部门的数据仓库

  • 为满足用户特定需求而创建的数据仓库

  • 数据仓库的子集

Data Lake(数据湖)

(侧重于数据存储能力)

A、 保存原始的、细节的数据

B、 结构化数据、非结构化数据均存在(多模态)

发展趋势

1、 一体化:比如湖仓一体(Lakehouse):融合了数据湖的存储能力和数据仓库的计算能力

2、多模态:既能处理关系表数据,也能处理时序数据、图数据

3、云原生:数据库迁移到云上(提升数据库存储和计算的拓展性)

数据仓库的数据模型

数据仓库模型和数据库模型对比

数据仓库模型
A、概念模型:分析主题(边界、主题、维度、类别、指标、事实)
B、逻辑模型:星型模型、雪花模型、星座模型
C、物理模型:
数据库模型
A、概念模型:ER(实体关系模型)
B、逻辑模型:关系模型、网状模型、层次模型
C、物理模型:

数据仓库模型

销售分析的概念模型

信息包: 销售分析

日期 销售地点 销售产品 年龄组别 性别
年(10) 国家(15) 产品类(6) 年龄组(8) 性别组(2)
季度(40) 区域(45) 产品组(48)
月(120) 城市(280) 产品(240)
区(880)
商店(2000)
度量和事实: 预测销售量、实际销售量、预测误差

销售分析的逻辑模型(星型模型)

数据抽取、转换和装载

ETL

(Extraction、Transformation、Loading)

数据抽取、数据清洗、数据转换、数据加载、数据更新。

数据更新:

  • 全量更新:数据库建立时期
  • 增量更新:数据库维护

元数据

用来描述数据的数据,包含业务元数据和技术元数据

例题

销售质量

1
select sum(units_sold) from sales_fact;

不同年份的销售量

1
2
3
select sum(units_sold) from sales_fact
join time_dim on sales_fact.time_key = time_dim.time_key
group by time_dim.year;

不同年份不同商品项的销售额

1
2
3
4
5
6
7
select city as 城市,item_names as 商品项,sum(dollars_sold) as 销售额
from sales_fact a
inner join geo_dim b
on a.location_key = b.location_key
inner join item_dim c
on a.item_key = c.item_key
group by b.city,c.item_name;

2021年1~8月份各月平均销售

1
2
3
select sum(avg_sales) from sales_fact a
join time_dim b on a.time_key = b.time_key
where mouth >= 1 and mouth <= 8;

分布式文件系统HDFS操作

Hadoop安装:

Mater Hadoop虚拟机:Linux操作系统,主节点(名字节点,存储管理(元数据),作业(Job)调度)) Slave Hadoop虚拟机:Linux操作系统,从节点(数据节点:数据存储、实际计算)。

建议大家采用Hadoop分布式模式。

日志的作用

(记录了对数据增、删、改等操作): 1)数据恢复 2)提高效率

该示例中: 1)每个数据节点有多少个数据块? 每个数据节点有3-4个数据块 -> 每个数据节点存储的块的个数基本一致 -> 保证负载平衡

2)每个数据块的副本分到了几个数据节点? 每个数据块的副本分到了2个数据节点 -> 2副本冗余(Hadoop一般是3副本冗余)

3)请自己设计另一种存储方案(三个数据节点分布保存1-5数据块,每数据块是2副本)。 DN1:1 2 3 5 DN2:1 3 4 DN3:2 4 5 ...

HDFS

HDFS系统中,一个数据块一般有几个数据副本? 一个数据块一般有3个数据副本。

HDFS的一个数据块默认是多大? 64MB

Linux常用操作命令

Ctrl + Shift + T:启动命令终端
:用户主目录 / :根目录 ./:当前目录 ../:上一级目录 pwd:查看当前目录名称

ls:查看文件/目录信息 (ll:查看文件/目录详细信息) cd:进入目录 rm:删除文件 mv:移动文件 cat:查看文件内容 cp:拷贝文件

vi、vim:创建和编辑文件 gedit:创建和编辑文件 (相当于Windows的记事本)

clear:清屏 history:显示历史命令

Hadoop常用操作命令 start-all.sh (Hadoop启动批处理命令,start-dfs.sh, start-yarn.sh) stop-all.sh(Hadoop结束批处理命令) jps:查看Java进程 (master共有四个进程,如下: 5022 NameNode 5199 SecondaryNameNode 5345 ResourceManager 5664 Jps

slave共有三个进程: 4794 DataNode 4898 NodeManager 5056 Jps )

HDFS常用操作命令

hadoop dfs -ls :查看指定目录下文件信息 e.g. hadoop dfs -ls /

hadoop dfs -mkdir :创建指定目录

hadoop dfs -cat :查看制定文件的内容 e.g. hadoop dfs -cat /input-20200324/hello.txt

hadoop dfs -put :将本地文件上传到分布式文件HDFS hadoop dfs -copyfromlocal e.g. hadoop dfs -put ./logs/. /input-20200324

hadoop dfs -get :将分布式文件HDFS的指定文件下载到本地文件

hadoop dfs -rm :删除HDFS的指定目录或文件 e.g. hadoop dfs -rm /input-20200324/*.out

数据仓库与数据挖掘概述

数据仓库的兴起

数据仓库产生原因

A、 数据的大量积累

B、 关系数据库的局限(操作型数据库)

局限:TP(存取频率高、时间短)、AP(消耗资源)特性不同、数据集成度不高、质量问题、数据面向应用而非主题

C、 异构数据源共享问题(各类数据库产品增加导致异构环境数据增加)

异构数据源解决方案

一、 数据仓库

二、联邦数据库

数据仓库与联邦数据库的区别

数据仓库:

  • 优:查询速度快
  • 缺:空间占用大,安全性一般,实时更新一般

联邦数据库:

  • 优:隐私保护性好,空间占用小,实时更新较好
  • 缺:查询处理复杂,速度慢

数据仓库的概念

数据仓库的特点

一个面向主题的、集成的、时变的、非易失的数据集合。

A、面向主题的:与主题相关的数据导入数据仓库,由异构转换为同构;

B、集成的:集成的主要方法:

  • 统一:消除不一致的现象(数据清洗)
  • 综合:对原有数据进行综合和计算

C、时变的:数据仓库保存长期的字段、显/隐式时间类型数据、历史数据,而操作型数据库保留当前数据。

D、非易失的:以读为主,数据相对稳定,一般不执行“更新”操作,主要分析数据。