内存数据库的设计与实现-精品

  • 格式:ppt
  • 大小:1.17 MB
  • 文档页数:26

下载文档原格式

  / 26
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
分包 打包
结果确认 使服务器继续执行 数据库访问操作 返回结果集的大小 客户端根据情况申请空间 准备接受确认
无返回结果集
发送数据包 接受数据包 判断是否发送完毕 接收确认
有返回结果集
2015年10月22日星期四
会话结束 返回结果集的应用
17
事务与并发控制
事务是用户定义的一个数据库操作的序列,这些操作 要么全作要么全不做,是一个不可分割的工作单位。 在关系数据库中可以是一条SQL语句,一组SQL语句 或整个程序。在本内存数据库中把每一个客户端的请 求也即SQL语句作为一个事务来处理。 数据库是一个共享的资源,可以供多个用户使用。在 这样的系统中,同一时刻并行运行的事务数可达数百 个,然而这样事务的ACID特性可能遭到破坏,为了保 证数据库的一致性,DBMS需要对并发操作进行正确 的调度――数据库的并发调度机制。 并发控制就是要用正确的方式调度并发操作,使每一 个用户事务的执行不受其他事务的干扰,采用的主要 技术是封锁机制。
左子树
Байду номын сангаас右子树
T-Node
2015年10月22日星期四
12
内 存 数 据 库 的 工 作 流 程
2015年10月22日星期四
数据库配置
启动初始化程序
运行记录文件
配置文件
更新运行记录文件
生成配置文件
数据区监视 更新到磁盘
是否第一次运行

内存数据库初始化
导入数据
启动服务

检查日志文件 日志文件

是否有脏数据
2015年10月22日星期四
4
内存数据库概述
内存数据库(MMDB Main Memory Database)与 磁盘数据库(DRDB Disk Resident Database)的区别
传统的磁盘数据库系统旨在处理永久、稳定的数据,强调维 护数据的完整性、一致性,其性能目标是提高系统的吞吐量, 尽可能多的处理事务。内存数据库则通过特殊的数据组织和 访问方式,提高内存和CPU 的利用率、数据的访问效率。 数据的访问方式不同 即使磁盘数据库有足够大的缓冲区,可以将所有的数据一次 换入到缓冲区,也仍然不会获得内存的所有优点,因为其索 引依然是按照访问磁盘来设计的。即使所有数据都在缓冲区, 每次的数据访问依然要计算数据的物理地址,检查是否在缓 冲区等
15
2015年10月22日星期四
服务器与客户端之间的通信协议
为了使内存数据库正常的工作,保证客户端与服务器 之间的通信,根据实际的工作需求制定了客户端与服务器 之间的通信协议。根据客户端请求的不同可以将通信过程 分为两类: 客户端请求连接 一类是返回结果不包含结果集的,例如 Update, Delete,Insert,Create等语句; 建立连接的过程 另一类请求是包含 Select查询语句的请求,这类请求通 常都要返回结果集以供客户端的应用程序使用。
2015年10月22日星期四
18
故障恢复
为了保证操作的完整性和数据库的ACID特性,对数据库 所做的每一个影响数据库数据的操作都将被记录到日志文 件中,对于日志文件的记录使用WAL(Write-Ahead Log) 方法,即先将对表的操作记录到日志文件中,然后才进行 数据的操作。 数据库在启动的时候将建立两个日志文件,库中的每个表 在两个日志文件的任何一个中都有自己的记录日志的空间。 日志使用内存映射日志,数据库启动时首先将其中的一个 日志文件映射到内存,这样每个表都有自己的日志空间互 不影响,空间的大小可以由用户来设置,两个日志空间使 用Ping_Pang法轮换使用。日志空间(文件)的切换发生在 以下情况: (1)日志空间满 (2)日志监视线程检查发现当前日志空间中的记录量达 到用户的预定值 19 2015 10月 22 日星期四 年 ( 3 )通过程序更改当前日志空间
2015年10月22日星期四 14
SQL语句分析
内存数据库在设计的过程中为了不改变用户使用数据 库系统的习惯,客户端的请求都以SQL语句的方式发送给 服务器,服务器接收到客户端的请求后,经过SQL语句分 析器分析,将其中的信息提取出来保存到一个设定的结构 内,以供服务器程序根据此结构中的内容执行相应的操作。
数据库故障恢复的过程




1.根据系统配置文件进行数据库的重建和相关信息的初始 化。 2.检查运行记录文件。检查数据库是否为首次启动。根据 设计的要求,在数据库初次或者经过配置重新启动前要 运行初始化脚本将所有的文件信息初始化。如果是初次 起动则进入3;否则,无论是用户主动暂停运行还是被动 停止都要根据运行记录文件和日志文件以及系统配置文 件将两个日志文件中的操作更新到磁盘上。 3.根据系统配置文件,将需要的历史数据读入到内存数据 库。 4.将运行记录文件,日志文件映射到内存,并启动日志定 时监视进程。 5.进行提供服务前的初始化工作。
5

2015年10月22日星期四
现有系统的分析
当前电量采集系统分析
电表 电表 。。。。。。。 电表 电表
电量采集装置
电量数据采集模块
DMIS
数据加工模块
原始数据
加工数据
2015年10月22日星期四
6
现有系统的分析
根据当前的形势分析,现有系统将面临以下的挑战
实时数据的存储
以某电网公司现有的电量数据为例,每天的电量表底数据、时段 电量数据、加工统计数据就有上百万条记录,若加上需量、瞬时量、 参变量等数据,每天的数据量可达到近千万级 。
2015年10月22日星期四 3
内存数据库概述
实现的可行性分析 随着半导体工艺的提高,内存的集成度越 来越高,计算机硬件也可以支持超大内存的 管理,这样将整个数据库或者数据库的一部 分常驻内存成为可能 现代的应用需求需要高性能的数据库提供 实时可靠的数据,像生产过程控制, CAD/CAM,指挥系统,航空航天,电力系 统等。使内存数据库有了的用武之地。
在本次设计的数据库中使 用由B Tree和AVL 树发展来 的T Tree索引. T Tree索引既 具有B Tree存储效率高的优 点也有AVL 树查找速度快的 优点 操作通常会引起以下情况: 插入引起节点溢出 删除引起节点合并 树的平衡处理
T-Tree
父节点指针 … … 平衡因子 最小值 数据指针1 … … 数据指针n 最大值
数据访问的实时性
随着实时交易、实时核算的需求,要求系统的数据采集、数据加 工、系统监控等子系统都要具有较高的实时性,也就是说数据采集后 要快速存入数据库以备各种统计、报表的数据加工之用;统计后的各 种报表要通过快速的数据访问呈现给用户。
数据库系统负荷
新一代的电量系统不仅为调度专业服务,还要为电力系统的其它 专业的系统提供数据,外系统对电量系统数据的访问必定增大电量系 统数据库的负荷。
客户端 服务器
按照通信协议通信 会话结束,连接断开
2015年10月22日星期四
16
服务器端 发送SQL请求
客户端
服务器
客户端
SQL语句分析 SQL语句分析结果反馈 SQL OK
发送SQL请求
SQL语句分析 SQL分析结果 SQL OK ACK 确认 使服务器继续执行 服务器执行操作 返回执行的结果
一个内存数据库模型的设计与实现
荣垂田
2015年10月22日星期四
1
主要内容
1. 课题背景 2. 内存数据库概述 3. 现有系统分析 4. 内存数据库服务器的设计与实现 5. 客户端软件开发包的设计 6. 系统配置与管理工具的设计与实现 7. 测试
2015年10月22日星期四
2
课题背景
随着电力系统的改革,电能量采集系 统的地位越来越重要,系统由单纯服务于 调度扩展到电力行业的计划、交易、营销 等专业,数据量由单纯的电量扩展到需量、 瞬时量、参变量等。 为适应电力系统的发展满足电力改革 的需求,决定在原有的电能量采集系统产 品的基础上,研发面向未来的新一代采集 系统。新系统要求系统的数据库具有高效 的、稳定的实时特性。
2015年10月22日星期四
7
改进方案
电表 电表 。。。。。。。 电表 电表
电量采集装置
电量数据采集模块
原始数据
数据加工模块
内存数据库 原始数据
DMIS
加工数据
8
2015年10月22日星期四
内存数据库服务器的设计与实现
内 存 数 据 库 系 统 结 构
用来管理来自客户端的请求,此 实现客户端请求的分 部分用来实现多线程并发服务器, 析和处理,包括SQL 对于客户端的每个请求只要在服 语句的处理,内存数 务器允许的情况下都有一个线程 应用程序需要或更新 与之对应 据访问,索引的更新 应用程序 应用程序 应用程序 等 过的数据,在数据库 系统配置与数据管理客户端 内存数据库访问接口软件包 正常工作期间常驻内 存,如索引、数据库 记录所有对数据库数 由系统配置和客户 记录数据库的运行 内存数据库连接池 信息、数据字典等 配置与管理服务 据有影响的操作的相 端管理程序生成, 状况,如是否为初 关信息,这个文件能 是对内存数据库的 内存数据库访问引擎 次启动,是否有未 够保证所有更新的持 定制,对内存数据 更新到磁盘的数据 久化即更新到磁盘数 内存数据区 库的运行起决定性 系 及其数量等 统 据库,以及故障后的 数据 字典 的作用。 监 恢复
Normal Page 前一页 后一页
Data Page
记录1 当前页
……
库名称 分得总页数 库中包含的表数量 此项在映射文件的起 始位置 ……. 可包含的最大表数量
记录2
……
前一页 后一页 当前页
……
记录n-1 记录n
记录结构 前一个记录 2015年10月22日星期四 记录体 后一条记录
11
内存数据库的索引结构
2015年10月22日星期四
20
2015年10月22日星期四
内存数据库的客户端软件开发包
本内存数据库系统采用C/S模式实现,客户端 的请求都以SQL语句的形式发送给服务器,为 了方便用户的使用,提供客户端软件开发包。 提供此开发包的目的在于减少使用者的劳动量, 屏蔽一些底层的实现。 其中的功能主要有:连接的建立,SQL发送前 的处理,通信协议的客户端实现,返回结果的 提取等。
更新到磁盘
暂停信号处理

停止服务 多 线 程 处 理
定时器处理程序
请求处理
定时器处理程序
日志处理
特殊表处理
13
并发服务器的创建
内存数据库服务器必须一直的工作,随时接收客 户端的请求和数据,因而不能受外界信号的影响, 所以把内存数据的主进程创建为守护进程。守护进 程是脱离于终端并且在后台运行的进程,只要系统 没有关机或者崩溃,守护进程将在系统中不间断地 运行。 该服务器是多线程服务器,对于客户端的每一个 连接请求服务器端都有一个线程为之提供服务。 线程的管理由线程池来实现,以连接为背景,主要 包括:线程的创建及预创建,线程的分配,回收以 及销毁。
2015年10月22日星期四
10
DB_MANAGER 表信息[1..N] 库信息
Table_Information 表名 可容纳最大记录 数 表中当前记录数 表分得页数 表分得的第一页 表分得的最后页 互斥操作标志 表中字段数 表中脏数据量 表在映射文件中 的起始位置 表在映射文件中 的结束位置 是否建立了索引 的标识 脏数据文件(日志 文件)描述符 数据字典指针 数据字典指针
视 进 程 索引 库信息
磁盘数据库访问引擎 系统配置 运行记录 日志信息
系统物理数据库
2015年10月22日星期四
9
物理数据组织与管理
内存数据的物理组织方式是内存数据库实现的基础, 其存储结构、索引结构、中间数据存储结构都必须 考虑内存直接存取这一特征。
本系统的数据采用段页式组织方式和行存储模型, 段是逻辑段,其空间不一定连续,每个段存放一个 关系,也即存放一个表的全部数据,每个段由不同 的页组成,页是空间分配和回收的基本单位。
typedef struct struct Operation { char table_name[20]; Opertion_Type type; Search_Parameter sp; }; {
int member_sequence1; int member_sequence2; int operation_type; union { int value_int; char value_str[LENGTH]; } un; }Search_Parameter;