1、一个内存数据库模型的设计与实现荣垂田荣垂田2022-11-111主要内容1.课题背景2.内存数据库概述3.现有系统分析4.内存数据库服务器的设计与实现5.客户端软件开发包的设计6.系统配置与管理工具的设计与实现7.测试2022-11-112课题背景n 随着电力系统的改革,电能量采集系统的地位越来越重要,系统由单纯服务于调度扩展到电力行业的计划、交易、营销等专业,数据量由单纯的电量扩展到需量、瞬时量、参变量等。n 为适应电力系统的发展满足电力改革的需求,决定在原有的电能量采集系统产品的基础上,研发面向未来的新一代采集系统。新系统要求系统的数据库具有高效的、稳定的实时特性。2022-11-113内
2、存数据库概述n实现的可行性分析实现的可行性分析n随着半导体工艺的提高,内存的集成度越来越高,计算机硬件也可以支持超大内存的管理,这样将整个数据库或者数据库的一部分常驻内存成为可能 n现代的应用需求需要高性能的数据库提供实时可靠的数据,像生产过程控制,CAD/CAM,指挥系统,航空航天,电力系统等。使内存数据库有了的用武之地。2022-11-114内存数据库概述n传统的磁盘数据库系统旨在处理永久、稳定的数据,强调维护数据的完整性、一致性,其性能目标是提高系统的吞吐量,尽可能多的处理事务。内存数据库则通过特殊的数据组织和访问方式,提高内存和CPU 的利用率、数据的访问效率。n数据的访问方式不同 n
3、即使磁盘数据库有足够大的缓冲区,可以将所有的数据一次换入到缓冲区,也仍然不会获得内存的所有优点,因为其索引依然是按照访问磁盘来设计的。即使所有数据都在缓冲区,每次的数据访问依然要计算数据的物理地址,检查是否在缓冲区等 内存数据库(内存数据库(MMDB Main Memory Database)与)与磁盘数据库(磁盘数据库(DRDB Disk Resident Database)的区别)的区别2022-11-115现有系统的分析 n当前电量采集系统分析2022-11-116现有系统的分析根据当前的形势分析,现有系统将面临以下的挑战根据当前的形势分析,现有系统将面临以下的挑战n 实时数据的存储实时
4、数据的存储 以某电网公司现有的电量数据为例,每天的电量表底数据、时段电量数据、加工统计数据就有上百万条记录,若加上需量、瞬时量、参变量等数据,每天的数据量可达到近千万级。n 数据访问的实时性数据访问的实时性 随着实时交易、实时核算的需求,要求系统的数据采集、数据加工、系统监控等子系统都要具有较高的实时性,也就是说数据采集后要快速存入数据库以备各种统计、报表的数据加工之用;统计后的各种报表要通过快速的数据访问呈现给用户。n 数据库系统负荷数据库系统负荷 新一代的电量系统不仅为调度专业服务,还要为电力系统的其它专业的系统提供数据,外系统对电量系统数据的访问必定增大电量系统数据库的负荷。2022-1
5、1-117改进方案2022-11-118内存数据库服务器的设计与实现 内存数据库系统结构由系统配置和客户端管理程序生成,是对内存数据库的定制,对内存数据库的运行起决定性的作用。记录数据库的运行状况,如是否为初次启动,是否有未更新到磁盘的数据及其数量等记录所有对数据库数据有影响的操作的相关信息,这个文件能够保证所有更新的持久化即更新到磁盘数据库,以及故障后的恢复用来管理来自客户端的请求,此部分用来实现多线程并发服务器,对于客户端的每个请求只要在服务器允许的情况下都有一个线程与之对应实现客户端请求的分析和处理,包括SQL语句的处理,内存数据访问,索引的更新等应用程序需要或更新过的数据,在数据库正常
6、工作期间常驻内存,如索引、数据库信息、数据字典等2022-11-119物理数据组织与管理n内存数据的物理组织方式是内存数据库实现的基础,其存储结构、索引结构、中间数据存储结构都必须考虑内存直接存取这一特征。n本系统的数据采用段页式组织方式和行存储模型,段是逻辑段,其空间不一定连续,每个段存放一个关系,也即存放一个表的全部数据,每个段由不同的页组成,页是空间分配和回收的基本单位。2022-11-11102022-11-1111内存数据库的索引结构n在本次设计的数据库中使用由B Tree和AVL 树发展来的T Tree索引.T Tree索引既具有B Tree存储效率高的优点也有AVL 树查找速度快
7、的优点 操作通常会引起以下情况:n插入引起节点溢出n删除引起节点合并n树的平衡处理2022-11-1112内内存存数数据据库库的的工工作作流流程程2022-11-1113并发服务器的创建n内存数据库服务器必须一直的工作,随时接收客户端的请求和数据,因而不能受外界信号的影响,所以把内存数据的主进程创建为守护进程。守护进程是脱离于终端并且在后台运行的进程,只要系统没有关机或者崩溃,守护进程将在系统中不间断地运行。n该服务器是多线程服务器,对于客户端的每一个连接请求服务器端都有一个线程为之提供服务。线程的管理由线程池来实现,以连接为背景,主要包括:线程的创建及预创建,线程的分配,回收以及销毁。202
8、2-11-1114SQL语句分析 内存数据库在设计的过程中为了不改变用户使用数据库系统的习惯,客户端的请求都以SQL语句的方式发送给服务器,服务器接收到客户端的请求后,经过SQL语句分析器分析,将其中的信息提取出来保存到一个设定的结构内,以供服务器程序根据此结构中的内容执行相应的操作。typedef struct int member_sequence1;int member_sequence2;int operation_type;union int value_int;char value_strLENGTH;un;Search_Parameter;struct Operation cha
9、r table_name20;Opertion_Type type;Search_Parameter sp;2022-11-1115服务器与客户端之间的通信协议 为了使内存数据库正常的工作,保证客户端与服务器之间的通信,根据实际的工作需求制定了客户端与服务器之间的通信协议。根据客户端请求的不同可以将通信过程分为两类:一类是返回结果不包含结果集的,例如Update,Delete,Insert,Create等语句;另一类请求是包含Select查询语句的请求,这类请求通常都要返回结果集以供客户端的应用程序使用。2022-11-1116无返回结果集有返回结果集2022-11-1117事务与并发控制n
10、事务是用户定义的一个数据库操作的序列,这些操作要么全作要么全不做,是一个不可分割的工作单位。在关系数据库中可以是一条SQL语句,一组SQL语句或整个程序。在本内存数据库中把每一个客户端的请求也即SQL语句作为一个事务来处理。n 数据库是一个共享的资源,可以供多个用户使用。在这样的系统中,同一时刻并行运行的事务数可达数百个,然而这样事务的ACID特性可能遭到破坏,为了保证数据库的一致性,DBMS需要对并发操作进行正确的调度数据库的并发调度机制。n 并发控制就是要用正确的方式调度并发操作,使每一个用户事务的执行不受其他事务的干扰,采用的主要技术是封锁机制。2022-11-1118故障恢复n 为了保
11、证操作的完整性和数据库的ACID特性,对数据库所做的每一个影响数据库数据的操作都将被记录到日志文件中,对于日志文件的记录使用WAL(Write-Ahead Log)方法,即先将对表的操作记录到日志文件中,然后才进行数据的操作。n 数据库在启动的时候将建立两个日志文件,库中的每个表在两个日志文件的任何一个中都有自己的记录日志的空间。日志使用内存映射日志,数据库启动时首先将其中的一个日志文件映射到内存,这样每个表都有自己的日志空间互不影响,空间的大小可以由用户来设置,两个日志空间使用Ping_Pang法轮换使用。日志空间(文件)的切换发生在以下情况:n(1)日志空间满n(2)日志监视线程检查发现当
12、前日志空间中的记录量达到用户的预定值n(3)通过程序更改当前日志空间2022-11-1119数据库故障恢复的过程n1.根据系统配置文件进行数据库的重建和相关信息的初始化。n2.检查运行记录文件。检查数据库是否为首次启动。根据设计的要求,在数据库初次或者经过配置重新启动前要运行初始化脚本将所有的文件信息初始化。如果是初次起动则进入3;否则,无论是用户主动暂停运行还是被动停止都要根据运行记录文件和日志文件以及系统配置文件将两个日志文件中的操作更新到磁盘上。n3.根据系统配置文件,将需要的历史数据读入到内存数据库。n4.将运行记录文件,日志文件映射到内存,并启动日志定时监视进程。n5.进行提供服务前
13、的初始化工作。2022-11-1120内存数据库的客户端软件开发包n本内存数据库系统采用C/S模式实现,客户端的请求都以SQL语句的形式发送给服务器,为了方便用户的使用,提供客户端软件开发包。提供此开发包的目的在于减少使用者的劳动量,屏蔽一些底层的实现。n其中的功能主要有:连接的建立,SQL发送前的处理,通信协议的客户端实现,返回结果的提取等。2022-11-1121系统配置与管理客户端的设计与实现n本内存数据库在设计的过程中,是以传统的磁盘数据库作为内存数据库数据持久化的存储介质。内存数据库中的数据是最新的版本,是从远程装置采集来的。内存数据库中表结构的属性集合是磁盘数据库中表的属性的集合的
14、子集n由于本内存数据库和与其相关的磁盘数据库的特殊关系,在分析了现有内存数据库的配置方式的基础上,我们提供了配置工具,利用此工具可以快速对内存数据库的结构进行构造。2022-11-1122设计的原理2022-11-1123配置工具的使用过程n首先要选择相应的数据库;n登录数据库,这时工具界面显示的是其中的表信息;n根据实际的需求选择需要在内存数据库中实现的表,这时显示的是表的整体信息,如创建时间,包含的字段数等;n选择相应的表,再点击选择字段菜单,即进入字段选择界面,这时现实的是该表中包含的各个字段。n选择要在内存数据库中出现的字段,使需要的字段出现在右边的多选框内。n如果已经选择完毕,则可以
15、点击生成文件按钮,这样这个表的选择结束。n依次处理其他的表。2022-11-1124测试1.实时数据的存储。2.提高了系统的实时性。3.减少了外系统对电量系统访问带来的负荷。在一定程度上解决了以下问题在一定程度上解决了以下问题在100base-TX局域网网络条件下与传统的Sybase,Oracle数据库进行性能比较,电脑的基本配置为,Intel(R)Pentium(R)D CPU 2.80GHz,512MB DDR内存,80G ST380817AS硬盘。测试是在同等数据规模即在10万条记录的情况下进行的。测试结果如下表所示。2022-11-1125一个内存数据库模型的设计与实现2022-11-1126