数据库系统原理之数据管理技术的发展

Posted 小乔的博客

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库系统原理之数据管理技术的发展相关的知识,希望对你有一定的参考价值。

数据管理技术的发展

第一节 数据库技术发展概述

  • 数据模型是数据库系统的核心和基础
  • 以数据模型的发展为主线,数据库技术可以相应地分为三个发展阶段:
    • 第一代的网状、层次数据库系统
    • 第二代的关系数据库系统
    • 新一代的数据库系统

一、第一代数据库系统

  • 层次数据库系统 层次模型
  • 网状数据库系统 网状模型
  • 层次模型是网状模型的特例

第一代数据库系统有如下两类代表:

  • 1969年IBM公司研制的层次模型数据库管理系统 IMS。
  • DBTG 报告

这两类数据库系统具有的共同特点:

  • 支持三级模式(外模式、模式、内模式)的体系结构。模式之间具有转换(或称为映射)功能。
  • 用存取路径来表示数据之间的联系。
  • 独立的数据定义语言。
  • 导航的数据操纵语言。

二、第二代数据库系统

支持关系数据模式的关系数据库系统是第二代数据库系统。

20世纪70年代是关系数据库理论研究和原型开发的时代。

经过大量高层次的研究和开发取得了以下主要成果:

  • 奠定了关系模型的理论基础,给出了人们一致接受的关系模型的规范说明。
  • 研究了关系数据语言,有关系代数、关系演算、SQL语言及QBE等。
  • 研制了大量的 RDBMS的原型,攻克了系统实现中查询优化、并发控制、故障恢复等一系列关键技术。

关系数据库是以关系模型为基础的,而关系模型是由数据结构、关系操作和数据完整性三部分组成。

第二代关系数据库系统具有模型简单清晰、理论基础好、数据独立性强、数据库语言非过程化和标准化等特点。

三、新一代数据库系统

从20世纪80年代开始,数据库界广泛开展了面向对象数据库系统(OODBS)的研究。

从面向对象(OO)模型、面向对象数据库管理系统(OODBMS)实现技术、OODBMS产品研发和应用等各个层面进行了大量的创新工作。

由于面向对象数据模型中许多功能难以实现,面向对象数据库系统过于复杂不易使用,尽管开发出许多面向对象数据库产品,但是成熟度低,最终没有被市场普遍接受。

1990 年高级 DBMS 功能委员会发表了 《第三代数据库系统宣言》的文章,提出了第三代数据库系统应具有的三个基本特征,《宣言》中称为三条基本原则。

这三个基本特征如下:

  • 第三代数据库系统应支持数据管理、对象管理和知识管理。
    • 第三代数据库系统应该是以支持面向对象数据模型为主要特征的数据库系统
    • 只支持面向对象模型的系统不能称为第三代数据库系统
    • 第三代数据库系统还应具备其他特征
  • 第三代数据库系统必须保持或继承第二代数据库系统的技术
  • 第三代数据库系统必须对其他系统开发

既然对于第三代数据库系统并没有形成一致的认识,因而通常把第二代以后的数据库系统称为新一代数据库系统。

数据库与其他计算机技术相结合,是数据库技术发展的一个显著特征。

数据仓库、工程数据库、统计数据库、空间数据库、科学数据库等多种数据库

第二节 数据仓库与数据挖掘

一、从数据库到数据仓库

计算机系统中存在着两类不同的数据处理工作:

  • 操作型处理,也称为联机事物处理(Online Transaction Processing,OLTP)
  • 分析型处理,也称为联机分析处理(Online Analytical Processing,OLAP)

20世纪80年代数据仓库(Data Warehouse,DW)技术应运而生。

传统的数据库技术为操作型处理服务

数据仓库为分析型处理服务

数据仓库是面向主题的、集成的、稳定的、随时间变化的数据集合,用以支持管理决策的过程。

数据仓库用于支持决策,面向分析型数据处理,不同于提供业务效率的操作型数据库。

数据仓库对分布在组织或企业中的多个异构数据源集成,按照决策主题选择数据并以新的数据模型存储。

存储在数据仓库中的数据一般不能修改。

  • 数据仓库主要有以下特征:

    • 面向主题
    • 集成性
    • 数据的非易失性
      • 数据经加工和集成进入数据仓库后是极少更新的,通常只需要定期加载和更新。
    • 数据的时变性
  • 粒度是指数据仓库的数据单位中保存数据的细化或综合程度的级别,细化程度越高,粒度级就越小,相反地,细化程度越低,粒度级就越大。

    • 在数据仓库中的数据量大小与查询的详细程度之间要做出权衡。
  • 分割是将数据分散到各自的物理单元中,以便能分别处理,以提高数据处理的效率。

    • 数据分割后的单元称为切片
  • 维是人们观察数据的特定角度,是考虑问题时的一类属性。

    • 维可以有细节程度的不同描述方面(维的层次)

数据集市(Data Mart)的基本思想是自下而上的数据仓库的开发方法。

  • 数据集市
    • 独立的数据集市(Independent Data Mart)
    • 从属的数据集市(Dependent Data Mart)
    • 两种集市的混合

二、数据挖掘技术

数据挖掘(Data Mining)是从大量的、不完全的、有噪声的、模糊的、随机的实际应用数据中发现并提取隐藏在其中的、人们事先不知道的、但又是潜在有用的信息和知识的一种技术。

它又被称为数据库中的知识发现(Knowledge Discovery in Database,KDD),其与数据库、数理统计、机器学习、模式识别、模糊数学等诸多技术相关。

数据处理不是数据挖掘。

  • 数据挖掘具备下列几种功能:
    • 概念描述
    • 关联分析
      • 关联
        • 简单关联
        • 时序关联
        • 因果关联
      • 目的是找出数据库中隐藏的关联网。
      • 常见的关联分析算法有 Apriori、FP-Growth等。
    • 分类与预测
      • 常见的分类模型机算法
        • 决策树模型
        • 神经网络模型
        • 线性回归模型
    • 聚类
      • 常见的聚类算法有 K-Means、GMM等。
    • 孤立点检测
    • 趋势和演变分析
      • 数据挖掘的过程:
        • 确定业务对象
        • 数据的选择
          • 数据挖掘的数据主要有两种来源:
            • 从数据仓库中来
            • 从数据库中来
        • 数据的预处理
        • 建模
        • 模型评估
        • 模型部署

第三节 大数据管理技术

大数据(Big Data)时代

一、大数据的定义

目前大数据尚无统一的定义,通常被认为是数据量很大、数据形式多样化的数据。

一般意义上,大数据是指无法在可容忍的时间内用现有信息技术和软、硬件工具对其进行感知、获取、管理、处理的服务的数据集合,且其具有如下特征:

  • 数据量巨大,即大量化(Volume)
  • 数据种类繁多,即多样化(Variety)
  • 处理速度快,即快速化(Velocity)
  • 价值(Value)密度低
    • 价值密度的高低与数据总量的大小成反比
    • 大数据的本质并非在于大,而在于其价值含量

二、大数据管理技术典型代表

1 大数据存储

分布式文件系统 HDFS

2 NoSQL 数据管理系统

  • NoSQL 有两种解释:
    • Non-Relational 非关系数据库
    • Not Only SQL 数据管理技术不仅仅是 SQL

横向扩展

NoSQL 系统支持的数据存储模型通常有键值(Key-Value)模型、文档(Document)模型、列(Column)模型和图(Graph)模型等。

  • 键值(Key-Value)存储 哈希函数
    • Tokyo Cabinet/Tyrant
    • Redis
    • Oracle BDB
  • 文档存储
    • CouchDB
    • MongoDB
  • 列存储
    • Cassandra
    • HBase
  • 图存储
    • 结点、属性、边

3 MapReduce 技术

MapReduce 以 Key/Value 的分布式存储系统为基础,通过元数据集中存储、数据以 chunk 为单位分布存储和数据 chunk 冗余复制来保证其高可用性。

MapReduce 是一种并行编程模型。

MapReduce 是一种简单易用的软件框架。

通常,计算结点和存储结点是同一个节点,即 MapReduce 框架和 Hadoop 分布式文件系统运行于相同的结点集。

并发编程基础之进程

1、操作系统发展史

研究并发编程其实就是研究操作系统的底层原理,所以我们需要从操作系统的发展史开始学起

手工操作—— 穿孔卡片

1946年第一台计算机诞生-–20世纪50年代中期,计算机工作还在采用手工操作方式。此时还没有操作系统的概念。技术图片

程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。

手工操作方式两个特点:

  (1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低。

  (2)CPU 等待手工操作。CPU的利用不充分。

  1. 1、穿孔卡片
  • 读取数据特速度别慢
  • CPU利用率极低
  • 单用户(一份代码)使用
  1. 2、批处理
  • 读取数据速度特别慢
  • CPU的利用率极低
  • 联机(多份代码)使用
  • 效率还是很低
  1. 3、脱机批处理(现代操作系统的设计原理
  • 读取数据速度提高
  • CPU的利用率提高

2、多道技术

多道技术(基于单核背景下产生的)

  • 单道:一条道,一直走 -–-–-–-–串行

    比如:a,b需要使用CPU,a先试用,b等待a使用完毕后,b才能使用CPU

  • 多道

    比如:a,b需要使用CPU,a先使用,b等待,直到a进入“IO或执行时间过长“,a会(切换+保存状态),然后b可以使用CPU,待b执行遇到”IO或执行时间过长“,再将CPU执行权限交给a,直到两个程序结束

空间上的复用:

? 多个程序使用一个CPU

时间上的复用:

? 切换 + 保存状态

? 1、当执行程序遇到IO时,操作系统会将CPU的执行权限剥夺

? 优点:CPU的执行效率提高

? 2、当执行程序时间过长,操作系统执行时间过长,操作系统会将CPU的执行权限剥夺

? 缺点:程序的执行效率低

3、并发与并行

并发:看起来像同时运行

在单核(一个cpu)情况下,当执行两个a,b程序时,a先执行,当a遇到IO时,b开始争抢cpu的执行权限,再让b执行,他们看起像同时运把正意义上的同时运行。

并行:真正意义上的同时运行

在多核(多个cpu)的情况下,当执行两个a,b程序时,a与b同时执行。他们是真正意义上的同时运行。

面试题: 在单核情况下能否实现并行? 不行

4、进程

1、什么是进程?

? 进程是一个资源单位

2、进程与程序:
程序:一对代码文件

? 进程:执行代码的过程,称之为进程

3、进程调度(了解)

1) 先来先服务调度算法(了解)
    - 比如程序 a,b,若a先来,则让a先服务,待a服务完毕后,b再服务。
    - 缺点: 执行效率低。

2) 短作业优先调度算法(了解)
    - 执行时间越短,则先先调度。
     缺点:
     导致执行时间长的程序,需要等待所有时间短的程序执行完毕后,才能执行。

现代操作系统的进程调度算法: 时间片轮转法 + 多级反馈队列  (知道)

3) 时间片轮转法
     - 比如同时有10个程序需要执行,操作系统会给你10秒,然后时间片轮转法会将10秒分成10等分。

4) 多级反馈队列:
     1级队列: 优先级最高,先执行次队列中程序。
     2级队列: 优先级以此类推
     3级队列:

5、同步与异步

同步与异步指的是“提交任务的方式”

同步(串行):

两个a,b程序都要提交并执行,假如a先提交执行,b必须等a执行完毕后,才能提交任务。

异步(并发):

两个a,b程序都要提交并执行,假如a先提交并执行,b无需等a执行完毕,就可以直接提交任务。

6、阻塞与非阻塞

阻塞(等待):

? 凡是遇到IO都会阻塞

? IOinput(),output(),time.sleep(3),数据的传输

非阻塞(不等待):

? 除了IO都是非阻塞,(比如:从1+1开始计算到100万)

7、进程的三种状态

就绪态:

? 同步与异步(提交任务的方式)

运行态:

? 程序的执行时间过长 -–-–> 将程序返回给就绪态

? 非阻塞

阻塞态:

? 遇到IO

面试题:阻塞与同步是一样的吗?非阻塞与异步是一样的吗?

  • 同步与异步:提交任务的方式
  • 阻塞与非阻塞:进程的状态
  • 异步与非阻塞,CPU的利用率最大化

8、创建进程的两种方式:

方式一:

from multiprocessing import Process
import time

def task(name):
    print(f'start{name}---')
    time.sleep(3)
    print(f'end{name}---')

if __name__ == '__main__':
    print("开始执行主进程。。。")
    #target=任务(函数地址)--->创建一个子进程
    #异步提交了3个任务
    obj1 = Process(target=task,args=('letin',))#args内是元组,注意加‘,’
    obj2 = Process(target=task,args=('letin',))
    obj3 = Process(target=task,args=('letin',))
    obj1.start()    #.start()告诉操作系统,去创建一个子进程
    obj2.start()
    obj3.start()
    # obj1.join()   #告诉主进程,等待子进程结束后,在结束
                    #主进程是当前程序(程序的执行过程)
    
结果:
开始执行主进程。。。
startletin---
startletin---
startletin---
endletin---
endletin---
endletin---

方式二:

继承Process方法

from multiprocessing import Process
import time

class MyProcess(Process):
    def run(self):
        print(f'start...{self.name}的子进程')
        time.sleep(3)
        print(f'end...{self.name}的子进程')

if __name__ == '__main__':
    list1 = []
    
    for line in range(4):
        obj = MyProcess()
        obj.start()
        list1.append(obj)

    for obj in list1:
        obj.join()

结果:
start...MyProcess-4的子进程
start...MyProcess-2的子进程
start...MyProcess-3的子进程
start...MyProcess-1的子进程
end...MyProcess-4的子进程
end...MyProcess-2的子进程
end...MyProcess-3的子进程
end...MyProcess-1的子进程
主进程

以上是关于数据库系统原理之数据管理技术的发展的主要内容,如果未能解决你的问题,请参考以下文章

《操作系统之哲学原理(第2版)》——— 操作系统的发展历史

数据管理技术的发展

数据库系统原理之SQL与关系数据库基本操作

走进科学之揭开神秘的"零拷贝"

数据存储设备的发展历史

大型网站技术架构:核心原理与案例分析阅读笔记之四