数据存储:关系型数据管理系统2

本文转载自:http://www.cnblogs.com/gardenofsjw/p/6917599.html


关系型数据管理系统2:数据库系统与数据存储访问
目录

一、数据库系统架构

二、数据存储与访问

1.数据库与文件系统对比总结

2.存储单位

  2.1 硬盘

  2.2 文件系统

  2.3 RDSBM

3.访问策略

  3.1 顺序访问

  3.2 Indexing

  3.3 Buffer Pool

  3.4 join运算三种Query Plan 

(本文是中科院陈世敏老师课程学习笔记) 

--------------------------------------------

一、数据库系统架构

  DBMS-Database  Management System 数据库管理系统

  RDBSM -关系型数据库系统

  主流商用系统:Oracle 、Microsoft  SQL、IBM DB2

  开源:PostgreSQL、MySQL、sqlite 

 

   

Parser:语法解析、语法检查、表名、列名、类型检查

Optimizer:产生可行query plan -> 估计运行时间和空间代价 -> 选择最佳query plan;

                 优化内容包括访问方式、实现的算法、多个连接的次序等等

Execution Engine:根据query plan -> SQL语句 完成运算和操作

Buffer pool:内存中缓存

Data Storage and Indexing:数据存储策略与高效访问策略

Transaction management:事务管理,保证ACID,进行logging、locking保证事务之间的正确性

ACID:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)


二、数据存储与访问

 1.先一张wondeful的对比总结:

 

  可以看出数据库的接口应该是在文件系统提供的基本编程接口上实现的

2.存储单位

2.1硬盘:扇区 512B

2.2文件系统:4KB

2.3RDSMS:database page size 4KB,8KB,16KB...(文件系统的整数倍),一个Page占一段一维的地址空间

  slot用指针记录着每个记录,之所以这么做是因为每个记录都是不定长的,不能用size*第n页+起始->推出每条记录的首地址。

  记录前面存储定长,后面存储变长,len=定长+变长 

  


三.访问策略

3.1顺序访问

  select Name,GPA from Student where Major='计算机';

  顺序读取student每个page

  对每个page顺序访问每个tuple

  检查条件是否成立

  对于成立的读取Name和GPA

  这对一些情况来说效率会很低,经常要把所有数据遍历一遍。

3.2 Index建立索引

  Tree based:有序,支持点查询和范围查询

  Hash based:无序,只支持点查询

3.2.1 Hash Indexing

  bucket = page

  当链过长时候需要进行renew hash

3.2.2B+ Tree Indexing

3.2.2.1 结构 

 

                  内部节点:                        

                

                                                        叶子节点:

  key1<key2<key3...

  subtree0<key1≤sbtree1<key1...  ptr=recordID,sibling=page ID(是为了连接叶节点,和存储数据的page不一样)

  大体流程:查询某个键值-> 进入为该键建立的索引B+树->内部节点->叶子节点(可包含多个值)->找到键值对应的指针,得到page Id和In-   page tuple   slot ID->page管理结构->page header->page slot->tuple,获取记录信息

3.2.2.2 四种操作

(1)Search 

  共有N个Key,树高O(logBN) = 总I/O数

  每个节点内部二分查找O(log2B)总比较次数=O(log2B)*O(logBN) =O(log2N)

  eg.search 20

(2)Insert

                       

                  

  注意:在插入满格需要分裂时候,要向上一级呈递自己最小key,且内部节点不再保留该key,叶子节点需要保留。

(3)Delete

  search到之后delete,删除后节点为空,进行node merge操作,或者完全不进行merge.

(4)Range Scan

  先由内部节点找到起始叶节点,通过child sibling pointer沿着叶往下读,一直到范围终止。

3.3 Buffer Pool

-目的

  减少I/O,提高性能

-原理

(1)Temporal Locality 时间局部性

 同一数据可能在一段时间内被访问多次

(2)Spatial Locality 空间局部性

 位置相同的数据可能会被在一起访问

-访问过程

  检查page 是否在buffer pool中

 (1)hit:找到,直接访问

 (2)miss:在buffer中找到一个可用的frame ,从硬盘中读取,放入frame

-替换策略

  buffer满了,需要替换frame

 (1)random 随机替换

 (2) FIFO 先进先出

 (3)LRU 最近最少使用

-LRU详解

  用次数作为标记,按次数排成链表,需要替换时候标记数最小首当其冲,代价O(1)

 

-clock算法

  LRU队列遇到多线程共享队头,等待临界区浪费很多时间。所以把一个共享变量,变成一圈。

                                

  开始,frame空白,R为空

  frame读入数据,R=1

  R全为1,所有frame都有数据了

  顺时针转圈,没访问的修改R=0,中间被访问了R会被设置为1

  再来一圈,R=0的,上一圈没被访问过,选为victim被替换

3.4 join运算实现详解

-join的三种实现思路

(1)loop

  两层循环,时间代价二次,两个改进版本                          

(2) hash

  比内存大的时候进行hash分块,,代价线性,读2MR+2MS

(3)sorting

  通常是两边数据都是排好序的才这么用。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 关系数据关系数据库是指采用了关系来组织数据数据系统。它通过表格的形式来表示数据,每个表格包含多个行和多个列。行表示数据记录,列表示数据属性。关系数据库最大的优点是数据结构清晰、易于理解和管理,广泛应用于企业级应用中。 2. 键值数据:键值数据库是一种非关系数据库,它的数据结构是由一个键和一个值组成的简单数据结构,键值对之间没有固定的关系。这种数据库适合于存储非结构化数据和缓存数据,比如Web应用中的Session数据和缓存。 3. 列式数据:列式数据库是一种非关系数据库,它将数据按列存储,而不是按行存储。列式数据库适用于对大量数据进行聚合计算和分析,因为它可以快速地读取一列数据,并对该列进行操作。列式数据库在数据仓库、报告和分析等场景中得到广泛应用。 4. 图数据:图数据库是一种非关系数据库,它的数据结构是由节点和边组成的图形数据结构。图数据库适用于存储复杂的关系数据,比如社交网络、物流网络、知识图谱等。图数据库可以快速地查询节点之间的关系和路径,以及进行复杂的图形数据分析。 5. 文档数据:文档数据库是一种非关系数据库,它采用了类似于JSON的文档格式来存储数据。文档数据库适用于存储半结构化和非结构化的数据,比如日志、博客、文章等。文档数据库支持丰富的查询和索引功能,可以快速地查找和处理文档数据

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值