您好,欢迎访问三七文档
当前位置:首页 > IT计算机/网络 > 数据库 > 内存数据库的设计与实现
2020年11月1日星期日1一个内存数据库模型的设计与实现荣垂田2020年11月1日星期日2主要内容1.课题背景2.内存数据库概述3.现有系统分析4.内存数据库服务器的设计与实现5.客户端软件开发包的设计6.系统配置与管理工具的设计与实现7.测试2020年11月1日星期日3课题背景随着电力系统的改革,电能量采集系统的地位越来越重要,系统由单纯服务于调度扩展到电力行业的计划、交易、营销等专业,数据量由单纯的电量扩展到需量、瞬时量、参变量等。为适应电力系统的发展满足电力改革的需求,决定在原有的电能量采集系统产品的基础上,研发面向未来的新一代采集系统。新系统要求系统的数据库具有高效的、稳定的实时特性。2020年11月1日星期日4内存数据库概述实现的可行性分析随着半导体工艺的提高,内存的集成度越来越高,计算机硬件也可以支持超大内存的管理,这样将整个数据库或者数据库的一部分常驻内存成为可能现代的应用需求需要高性能的数据库提供实时可靠的数据,像生产过程控制,CAD/CAM,指挥系统,航空航天,电力系统等。使内存数据库有了的用武之地。2020年11月1日星期日5内存数据库概述传统的磁盘数据库系统旨在处理永久、稳定的数据,强调维护数据的完整性、一致性,其性能目标是提高系统的吞吐量,尽可能多的处理事务。内存数据库则通过特殊的数据组织和访问方式,提高内存和CPU的利用率、数据的访问效率。数据的访问方式不同即使磁盘数据库有足够大的缓冲区,可以将所有的数据一次换入到缓冲区,也仍然不会获得内存的所有优点,因为其索引依然是按照访问磁盘来设计的。即使所有数据都在缓冲区,每次的数据访问依然要计算数据的物理地址,检查是否在缓冲区等内存数据库(MMDBMainMemoryDatabase)与磁盘数据库(DRDBDiskResidentDatabase)的区别2020年11月1日星期日6现有系统的分析当前电量采集系统分析电表电表电表电表电量采集装置电量数据采集模块原始数据数据加工模块DMIS加工数据。。。。。。。2020年11月1日星期日7现有系统的分析根据当前的形势分析,现有系统将面临以下的挑战实时数据的存储以某电网公司现有的电量数据为例,每天的电量表底数据、时段电量数据、加工统计数据就有上百万条记录,若加上需量、瞬时量、参变量等数据,每天的数据量可达到近千万级。数据访问的实时性随着实时交易、实时核算的需求,要求系统的数据采集、数据加工、系统监控等子系统都要具有较高的实时性,也就是说数据采集后要快速存入数据库以备各种统计、报表的数据加工之用;统计后的各种报表要通过快速的数据访问呈现给用户。数据库系统负荷新一代的电量系统不仅为调度专业服务,还要为电力系统的其它专业的系统提供数据,外系统对电量系统数据的访问必定增大电量系统数据库的负荷。2020年11月1日星期日8改进方案电表电表电表电表电量采集装置电量数据采集模块数据加工模块DMIS加工数据。。。。。。。内存数据库原始数据原始数据2020年11月1日星期日9内存数据库服务器的设计与实现内存数据库系统结构系统配置与数据管理客户端内存数据库访问接口软件包应用程序应用程序应用程序配置与管理服务内存数据库访问引擎系统配置内存数据库连接池数据索引字典库信息运行记录日志信息磁盘数据库访问引擎系统物理数据库系统监视进程内存数据区由系统配置和客户端管理程序生成,是对内存数据库的定制,对内存数据库的运行起决定性的作用。记录数据库的运行状况,如是否为初次启动,是否有未更新到磁盘的数据及其数量等记录所有对数据库数据有影响的操作的相关信息,这个文件能够保证所有更新的持久化即更新到磁盘数据库,以及故障后的恢复用来管理来自客户端的请求,此部分用来实现多线程并发服务器,对于客户端的每个请求只要在服务器允许的情况下都有一个线程与之对应实现客户端请求的分析和处理,包括SQL语句的处理,内存数据访问,索引的更新等应用程序需要或更新过的数据,在数据库正常工作期间常驻内存,如索引、数据库信息、数据字典等2020年11月1日星期日10物理数据组织与管理内存数据的物理组织方式是内存数据库实现的基础,其存储结构、索引结构、中间数据存储结构都必须考虑内存直接存取这一特征。本系统的数据采用段页式组织方式和行存储模型,段是逻辑段,其空间不一定连续,每个段存放一个关系,也即存放一个表的全部数据,每个段由不同的页组成,页是空间分配和回收的基本单位。2020年11月1日星期日11表信息[1..N]库信息DB_MANAGER库名称可包含的最大表数量…….此项在映射文件的起始位置库中包含的表数量分得总页数Table_Information表名是否建立了索引的标识表在映射文件中的结束位置脏数据文件(日志文件)描述符表在映射文件中的起始位置表中脏数据量表中字段数互斥操作标志表分得的第一页表分得的最后页表分得页数表中当前记录数可容纳最大记录数数据字典指针数据字典指针NormalPage前一页后一页当前页……前一页后一页当前页…………记录2记录n-1记录n记录1DataPage记录结构前一个记录记录体后一条记录2020年11月1日星期日12内存数据库的索引结构在本次设计的数据库中使用由BTree和AVL树发展来的TTree索引.TTree索引既具有BTree存储效率高的优点也有AVL树查找速度快的优点操作通常会引起以下情况:插入引起节点溢出删除引起节点合并树的平衡处理最小值数据指针1……数据指针n最大值平衡因子父节点指针左子树右子树……T-TreeT-Node2020年11月1日星期日13内存数据库的工作流程数据库配置启动初始化程序是否第一次运行内存数据库初始化是检查日志文件否日志文件是否有脏数据导入数据否更新到磁盘是启动服务配置文件生成配置文件定时器处理程序数据区监视更新到磁盘运行记录文件更新运行记录文件请求处理日志处理定时器处理程序特殊表处理暂停信号处理停止服务多线程处理2020年11月1日星期日14并发服务器的创建内存数据库服务器必须一直的工作,随时接收客户端的请求和数据,因而不能受外界信号的影响,所以把内存数据的主进程创建为守护进程。守护进程是脱离于终端并且在后台运行的进程,只要系统没有关机或者崩溃,守护进程将在系统中不间断地运行。该服务器是多线程服务器,对于客户端的每一个连接请求服务器端都有一个线程为之提供服务。线程的管理由线程池来实现,以连接为背景,主要包括:线程的创建及预创建,线程的分配,回收以及销毁。2020年11月1日星期日15SQL语句分析内存数据库在设计的过程中为了不改变用户使用数据库系统的习惯,客户端的请求都以SQL语句的方式发送给服务器,服务器接收到客户端的请求后,经过SQL语句分析器分析,将其中的信息提取出来保存到一个设定的结构内,以供服务器程序根据此结构中的内容执行相应的操作。typedefstruct{intmember_sequence1;intmember_sequence2;intoperation_type;union{intvalue_int;charvalue_str[LENGTH];}un;}Search_Parameter;structOperation{chartable_name[20];Opertion_Typetype;Search_Parametersp;};2020年11月1日星期日16服务器与客户端之间的通信协议为了使内存数据库正常的工作,保证客户端与服务器之间的通信,根据实际的工作需求制定了客户端与服务器之间的通信协议。根据客户端请求的不同可以将通信过程分为两类:一类是返回结果不包含结果集的,例如Update,Delete,Insert,Create等语句;另一类请求是包含Select查询语句的请求,这类请求通常都要返回结果集以供客户端的应用程序使用。服务器客户端客户端请求连接建立连接的过程按照通信协议通信会话结束,连接断开2020年11月1日星期日17发送SQL请求SQL语句分析SQL分析结果SQLOKACK确认使服务器继续执行服务器执行操作返回执行的结果服务器客户端服务器端客户端发送SQL请求SQL语句分析SQL语句分析结果反馈SQLOK结果确认使服务器继续执行数据库访问操作返回结果集的大小客户端根据情况申请空间准备接受确认分包打包发送数据包判断是否发送完毕接受数据包接收确认会话结束返回结果集的应用无返回结果集有返回结果集2020年11月1日星期日18事务与并发控制事务是用户定义的一个数据库操作的序列,这些操作要么全作要么全不做,是一个不可分割的工作单位。在关系数据库中可以是一条SQL语句,一组SQL语句或整个程序。在本内存数据库中把每一个客户端的请求也即SQL语句作为一个事务来处理。数据库是一个共享的资源,可以供多个用户使用。在这样的系统中,同一时刻并行运行的事务数可达数百个,然而这样事务的ACID特性可能遭到破坏,为了保证数据库的一致性,DBMS需要对并发操作进行正确的调度――数据库的并发调度机制。并发控制就是要用正确的方式调度并发操作,使每一个用户事务的执行不受其他事务的干扰,采用的主要技术是封锁机制。2020年11月1日星期日19故障恢复为了保证操作的完整性和数据库的ACID特性,对数据库所做的每一个影响数据库数据的操作都将被记录到日志文件中,对于日志文件的记录使用WAL(Write-AheadLog)方法,即先将对表的操作记录到日志文件中,然后才进行数据的操作。数据库在启动的时候将建立两个日志文件,库中的每个表在两个日志文件的任何一个中都有自己的记录日志的空间。日志使用内存映射日志,数据库启动时首先将其中的一个日志文件映射到内存,这样每个表都有自己的日志空间互不影响,空间的大小可以由用户来设置,两个日志空间使用Ping_Pang法轮换使用。日志空间(文件)的切换发生在以下情况:(1)日志空间满(2)日志监视线程检查发现当前日志空间中的记录量达到用户的预定值(3)通过程序更改当前日志空间2020年11月1日星期日20数据库故障恢复的过程1.根据系统配置文件进行数据库的重建和相关信息的初始化。2.检查运行记录文件。检查数据库是否为首次启动。根据设计的要求,在数据库初次或者经过配置重新启动前要运行初始化脚本将所有的文件信息初始化。如果是初次起动则进入3;否则,无论是用户主动暂停运行还是被动停止都要根据运行记录文件和日志文件以及系统配置文件将两个日志文件中的操作更新到磁盘上。3.根据系统配置文件,将需要的历史数据读入到内存数据库。4.将运行记录文件,日志文件映射到内存,并启动日志定时监视进程。5.进行提供服务前的初始化工作。2020年11月1日星期日21内存数据库的客户端软件开发包本内存数据库系统采用C/S模式实现,客户端的请求都以SQL语句的形式发送给服务器,为了方便用户的使用,提供客户端软件开发包。提供此开发包的目的在于减少使用者的劳动量,屏蔽一些底层的实现。其中的功能主要有:连接的建立,SQL发送前的处理,通信协议的客户端实现,返回结果的提取等。2020年11月1日星期日22系统配置与管理客户端的设计与实现本内存数据库在设计的过程中,是以传统的磁盘数据库作为内存数据库数据持久化的存储介质。内存数据库中的数据是最新的版本,是从远程装置采集来的。内存数据库中表结构的属性集合是磁盘数据库中表的属性的集合的子集由于本内存数据库和与其相关的磁盘数据库的特殊关系,在分析了现有内存数据库的配置方式的基础上,我们提供了配置工具,利用此工具可以快速对内存数据库的结构进行构造。2020年11月1日星期日23设计的原理sysobjectssyscolumnssystypes2020年11月1日星期日24配置工具的使用过程首先要选择相应的数据库;登录数据库,这时工具界面显示的是其中的表信息;根据实际的需求选择需要在内存数据库中实现的表,这时显示的是表的整体信息,如创建时间,包含的字段数等;选择相应的表,再点击选择字段菜单,即进入字段选
本文标题:内存数据库的设计与实现
链接地址:https://www.777doc.com/doc-7190786 .html