分布式内存数据库存储研究-通信与信息系统专业论文.docx
《分布式内存数据库存储研究-通信与信息系统专业论文.docx》由会员分享,可在线阅读,更多相关《分布式内存数据库存储研究-通信与信息系统专业论文.docx(46页珍藏版)》请在冰点文库上搜索。
华中科技大学硕士学位论文
摘要
近年来,国内外对智能电网的研究大力推进了电网的信息化进程。
随着电网系统对信息技术应用的不断深化,电网系统对于数据库的存储能力及实时性要求逐渐提高,因此比传统磁盘数据库拥有更高性能的内存数据库得到了广泛的应用。
但由于内存容量的限制,内存数据库往往以前端缓存的角色出现在电网系统中,用以缓解传统磁盘数据库的性能瓶颈。
随着智能电网的兴起,相对于传统电网,数据的交互更加频繁,数据量更加庞大,这就需要数据平台拥有更大的数据容量以及更高的数据并发性。
一方面意味着传统电网系统中的内存数据库将要承担更多的业务数据与业务应用,另一方面也对内存数据库提出了新的要求与挑战。
通过结合电网的特点以及智能电网的发展趋势,设计实现了基于分布式内存文件系统的分布式内存数据库系统。
用以解决集中式内存数据库在容量以及并发性等问题上的不足。
系统分为两层结构,下层为分布式内存文件系统,为上层提供透明的内存文件操作服务,负责将文件分块存储于分布式系统中的各个节点并映射到响应节点的进程空间中以供操作,并保证系统中各个节点的负载均衡与数据一致性,同时提供动态的节点增减功能;上层为分布式内存数据库管理系统,通过调用下层的文件服务来存储关系数据,并根据需求对这些关系数据分别建立全局索引与局部索引以供快速的查询。
两层系统采用松耦合的架构,各自负责独立的功能并进行优化。
通过测试结果可以看出,在单节点的情况下,系统的TPS(每秒执行事务量TransactionPerSecond)接近商用内存数据库;在系统中每增加一个节点,可以为整个系统提供大约0.76倍的单节点并发量(线性增长);在有节点加入或离开系统时,各节点的负载可以较快速的趋于平衡。
关键词:
分布式内存数据库;分布式内存文件系统;分布式存储;负载均衡;扩展性
II
Abstract
Inrecentyears,thedomesticandinternationalresearchesontheSmartGridvigorouslypromotetheprocessofGridinformation.WiththedeepeningoftheinformationtechnologyontheGridsystem,thepowergridsystemrequiresmorestoragecapacityandreal-timeabilityonthedatabasesystem,sothemainmemorydatabasewhichhasmorepowerfulperformancethanthetraditionaldiskdatabasehasbeenwidelyusedinthepowergridsystem.However,duetothelimitedmainmemorycapacity,mainmemorydatabasealwaysappearsastheroleofcachesysteminthepowergridsystemtoalleviatetheperformancebottleneckofthetraditionaldiskdatabase.
WiththeriseoftheSmartGrid,comparedtothetraditionalpowergridsystem,thedatainteractionismoreandmorefrequentandtheamountofdataislargerandlarger.ThisrequiresthedataplatformoftheSmartGridshouldhavegreaterdatacapacityandhigherdataconcurrency.Ontheonehandmeansthatthemainmemorydatabaseinthetraditionalgridsystemshouldbechargewithmorebusinessdataandbusinessapplications,italsosetsthenewrequirementsandchallengestothemainmemorydatabase.
WiththecharacteristicsofthegridandthetrendoftheSmartGriddevelopment,thepaperproposesthedatabasesystemwhichisadistributedmainmemorydatabaseestablishedonadistributedmainmemoryfilesystem.Tosolvetheshortageofthememorycapacityandconcurrencyincentralizedmainmemorydatabasesystem.Thesystemisdividedintotwolayers.Theloweristhedistributedmemoryfilesystem,providingthememoryfileservicestotheupperlayer,isresponsiblefortheloadbalanceandthedataconsistencyintheallnodesofthesystem.Theupperlayeristhedistributedmemorydatabasemanagementsystem.Bycallingtheservicesofthefilesystembelow,itstorestherelationaldataandtheindexofallthesedata.Thetwo-layersystemisalooselycoupledarchitecture,eachresponsibleforseparatefunctionsandoptimization.
Inthesinglenodecondition,theTPS(TransactionPerSecond)ofthedatabaseishigherthedisk1to2ordersofmagnitude;andinthesystem,eachadditionalnodecanprovideabout0.76timesthesingle-nodeconcurrency(lineargrowth);whenanodejoinsorleavesthesystem,allthenodescanbeloadbalancedinaconsiderableshorttime.
Keywords:
distributedmainmemorydatabase;distributedmainmemoryfilesystem;distributedstorage;loadbalancing;scalability
独创性声明
本人声明所呈交的学位论文是我个人在导师指导下进行的研究工作及取得的研究成果。
尽我所知,除文中已经标明引用的内容外,本论文不包含任何其他个人或集体已经发表或撰写过的研究成果。
对本文的研究做出贡献的个人和集体,均已在文中以明确方式标明。
本人完全意识到本声明的法律结果由本人承担。
学位论文作者签名:
日期:
年 月 日
学位论文版权使用授权书
本学位论文作者完全了解学校有关保留、使用学位论文的规定,即:
学校有权保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。
本人授权华中科技大学可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。
保密口,在 年解密后适用本授权书。
本论文属于 不保密口。
(请在以上方框内打“√”)
学位论文作者签名:
指导教师签名:
日期:
年 月 日 日期:
年 月 日
华中科技大学硕士学位论文
1 绪论
1.1课题研究背景
内存数据库的研究起源于20世纪80年代,相对于传统的磁盘数据库,内存数据库可以提供更短的事务响应时间和更大的事务吞吐量。
适用于有一定实时性要求的业务应用[1]。
目前在电力行业中,内存数据库已经得到了广泛的应用[2]。
例如在有较高实时性要求的电网监控自动化系统中,内存数据库往往作为前端数据库的角色出现,处理和存储短时间段内的实时数据,从而有效的提高了系统对实时数据库的处理速度;但由于内存数据库容量有限,大量的业务应用仍然由后台的磁盘数据库负责[3]。
随着近些年来智能电网的空前发展,传统电网的不足逐渐凸显,相对于传统的电网,智能电网有如下一些特点。
如表1-1所示。
表1-1智能电网与传统电网的对比
对比项目
智能电网
传统电网
通信
电网与用户采用双向通信,二者可
以进行实时的信息交互
单向通信,只有电网向用户单向传达
信息
监测
采用双向通信的智能固态表计
监测表计单向向电网发送数据
自愈
较强的自愈能力,有效抵御故障与
攻击,自适应分布式控制
较弱的自愈能力,仅仅依靠设备的冗
余
分布
供电网络为网状
供电网络为辐射状
从表中可以看出,智能电网中有更多的双向通信,这就意味着系统接收到的读写请求会更多,系统同一时间需要处理的事务量增大,系统的整体并发性需要提高。
同时由于智能电网要求有较强的自愈能力,因此需要更多的控制数据及实时数据的支持,并需要在短时间内完成对故障或攻击的捕捉,并根据实时状态重新分布电力,避免供电系统的中断。
传统的电网利用内存数据库虽然在一定程度上提高了系统的实时响应速度与并发量,但是对于智能电网海量的实时采集数据与实时监控数据[3],内存数据库仅仅作为前端缓存已经无法满足更多的实时应用需求,而应该承担系统中更多的业务服务。
而集中式的内存数据库面对智能电网海量的实时数据库与实时应用,存在以下一些问题与不足:
(1)容量。
集中式的内存数据库容量相对磁盘依然十分有限。
根据目前的市场
1
调查,仅有IBM与HP公司推出了可以支持1TB内存容量的服务器,并且价格昂贵,而市场上服务器可支持的平均最大内存容量约为256GB。
(2)并发。
通过对目前市场上内存数据库的调研与测试,集中式内存数据库的并发查询量约为每秒40000次。
而智能电网面向的是所有的用电客户以及智能终端,因此百万级的查询并发性能应该是基本的要求,而单机所提供的并发量是十分有限的。
(3)扩展性。
由于我国的智能电网还在发展阶段,因此不断会有新的用户与终端加入系统。
面对海量的不断增长的业务数据,集中式内存数据库只能通过静态增加物理内存的方式来扩充系统容量,但鉴于智能电网实时性的要求与单机内存容量的限制,这种扩充容量的方式显然并不合适。
因此,为了同时保留内存数据库高效的数据处理能力,并增加系统的内存容量,并发性能与良好的扩展性,本文给出了基于分布式内存文件系统的分布式内存数据库系统,其功能结构如图1-1所示。
用户客户端
智能终端
分布式内存数据库
数据交互
单向导入
历史数据库
图1-1分布式内存数据库的功能位置
如图1-1所示,分布式内存数据库提供与用户与智能终端的快速数据交互功能,对于非实时数据,会将数据定期导入后台的历史数据库,历史数据库同样提供对历
2
史数据的查询与统计。
整个分布式内存数据库系统可以带来以下一些优势:
(1)数据库扩展性增强。
随着实时业务数据量的不断增加,系统可以不必再重启服务器来扩展容量,而只需要动态得向系统中增加新的存储节点,然后由系统重新均衡各节点负载。
(2)数据并行处理及并行查询的能力增强。
采用分布式后,不同范围的记录由于存储在不同节点上,并行查询和并行处理的性能将得到提升。
表内并行化的查询也能得以实现。
(3)数据可靠性加强。
分布式数据库中采用多副本机制,每一条数据记录的副本都会存储在N个不同的节点中,当某个节点失效时,并不会丢失其中的任何一条数据。
同时各节点也有恢复备份的机制来保证数据的可靠性。
(4)良好的负载均衡。
由于系统划分为两层松耦合架构,下层的分布式内存文件系统采用文件分块的方式实现内存中关系数据的在各节点上的负载均衡,降低了传统分布式系统中分片分布策略容易引起节点数据倾斜的可能。
1.2分布式内存数据库研究现状
1.2.1国外研究现状
对于内存数据库的研究是最近二三十年时间内开始的,因此对于分布式内存数据库的研究时间并不长。
从现有的中英文文献可以查找到最早分布式内存数据库研究的雏形是始于1986年的PRISMADB项目[4]。
PRISMADB是一个完全并行的关系型内存数据库管理系统。
该系统设计出于两个主要目的。
其一是通过将查询过程并行化,以及将整个数据库存储于内存中来获得更高的数据库性能;其二是通过使用面向对象的编程语言来测试实现一个灵活的功能体系结构。
该系统的原型设计已经在100个节点的多处理器环境下运行,由于运行环境采用的是SN(Share-Nothing)架构,为每个节点单独分配16MB的内存空间,因此可以看作是分布式的内存数据库。
系统采用的是Hash水平分片方式分布数据,其核心模块为CC(ConcurrencyController),用来对数据库的并行访问进行控制,使用的是传统的两阶段共享互斥锁,并使用了可以预防死锁的算法。
1996年肯塔基大学的JamesGriffioen等人也对分布式内存数据库进行了研究,其项目名称为DERBY[5]。
DERBY旨在通过使用局域网内所有空闲的内存资源及网络资源,以提供高效的事务吞吐量。
DERBY采用了一种抑制负载饱和的算法来动态实现负载的重新分布,但在数据重新分布的过程中,系统对于正常事务的响应时间
16
会急剧增加,甚至暂停对较复杂事务的响应。
由于内存是易失性存储介质,系统为了避免数据由于掉电而丢失,采用为一部分节点计算机提供不间断供电的方式,以保证数据的可靠性,这些节点称为UPS(UninterruptedPowerSupply)节点。
一旦有节点失效,UPS节点会将其上的数据通过数据副本暂时保存在磁盘上以保证数据副本不会完全丢失。
近年来,PostgreSQL的创始人MichaelStonebraker博士也对分布式内存数据库进行了研究,并于2010年5月推出了其所研究的分布式内存数据库的第一个原型版本VoltDB1.0[6]。
VoltDB是一个强调优化吞吐率的高性能集群开源分布式内存数据库。
从体系结构上看,其内部是一个SN(Share-Nothing)架构的分布式内存数据库,通过并行单线程来保证事务的一致性和高性能,所有事务都被实现为Java存储过程,所有的存储过程(事务)均是全局有序的。
由于避免了锁的使用,因此可以保证每个事务在所有分区上并行执行完成后才继续执行下一个事务,事务不会乱序执行。
VoltDB的可靠性通过冗余和自动恢复来保证。
VlotDB值得关注的一个特性是其提出的自动数据分区功能,数据表会自动分配到集群内的节点上。
可以看做是传统的分片方式的升级和整合。
1.2.2国内研究现状
近些年来,国内对分布式内存数据库也有了一些研究。
东南大学的JiangHao与ZhangLi基于P2P网络架构设计了分布式内存数据库[7]。
其实现了高效的数据库操作,同时解决了集中式内存数据库容易成为并发访问系统瓶颈的问题。
研究提出了一种结构化的P2P路由算法,可以保证在数据覆盖情况稳定的分布式环境中平均查找次数不多于2次。
系统的内存数据库使用的是开源的内存数据库FastDB,并对分布式应用的接口进行了重新的封装。
北京邮电大学的魏磊等人提出了基于Chord协议的分布式内存数据库[8]。
通过使用Chord协议,抛弃了传统的B/S,C/S的模式,保证了系统的灵活性和容错性。
同时也提高了系统的运行效率和负载均衡性。
但对于Chord协议的引入也存在一定的问题。
由于Chord协议中所有节点地位平等,不存在中心节点,而同时各节点只用保存特定节点的路由信息,因此在全局事务的执行中,对数据所在节点的查找次数会增加,由此会导致多余的网络传输和其他节点的查找,降低了整体性能,抑制了分布式内存数据库的高效性。
李剑等人在电网监控领域也对分布式内存数据库进行了研究[9]。
其主要的特点是采用了主副本更新消息队列的方法来解决了分布式环境下维持多副本一致性的问
题。
并通过研究分布式数据库系统中的数据分布模型,结合电网监控系统的特性,给出了基于此应用场景下的分布模型。
其模型特点是使用两个前置机作为主副本内存数据库,后置N台后置内存数据库;后置内存数据库统一向前置内存数据库获取最新副本的数据。
1.2.3分布式内存数据库面临的挑战
通过上述介绍,可以看出目前对于分布式内存数据库的研究仅仅局限在将存储介质变为内存后如何应用原有的分布式磁盘数据库的理论,而并没有完全从内存这种存储介质的特性入手。
例如DERBY虽然考虑了内存掉电会丢失数据,但只是提供的UPS这种持续供电的方式来缓解,并没有从根本上解决问题。
内存相对于磁盘这种存储介质有以下特性:
(1)响应时间短,处理速度快。
(2)容量有限。
虽然现在内存不断增长,但相对于磁盘来说,仍然是极为有限和宝贵的,例如在电力行业中,仅仅一个城市中一个月的数据就很难完全存储于一台服务器上的内存中。
(3)对数据倾斜敏感度高。
在分布式环境下,由于内存数据处理速度极快,而每台计算机所能提供的内存又是有限的,因此一旦出现某节点的数据倾斜,该节点会在较短的时间内趋于饱和而无法再提供服务。
针对以上特性,除了从传统的分布式数据库理论进行研究,分布式内存数据库还存在以下研究方向:
(1)数据分片分布模型。
传统的数据分片分布模型都是基于分布式磁盘数据库,而磁盘对于数据倾斜的敏感度相对较低,可以给管理人员充裕的时间进行重新调整,而内存则不然。
(2)通信协议。
由于内存处理速度快,如果在各节点间的网络传输协议较复杂而使得网络延时超出内存数据处理时间过多,会使得原本内存快速响应的特点淡化。
(3)数据一致性。
为了提高系统的数据可靠性与可用性,需要保存数据的多个副本到不同存储节点上,当对这些数据进行更新时,必须尽量减少在进行数据一致性操作所需消耗的时间。
(4)全局数据的索引。
在分布式数据库中,数据存储于不同的节点中,当对其进行查询时,遍历所有的节点并不合适,因此需要全局索引对所有数据的分布情况进行管理。
(5)全局事务的优化。
对于有实时性要求的事务,其最大的特点就是要求事务
响应时间尽可能的短,尤其对于内存来说,如何更快的完成复杂事务是需要研究的问题。
结合内存数据库在传统电网及智能电网中的应用,本文重点从数据存储这方面对分布式内存数据库的存储进行了详细的讨论,并分析讨论了基于分布式内存文件系统的分布式内存数据库系统。
1.3本文研究内容及章节安排
本文主要针对在目前智能电网快速发展的背景下,传统电网监控系统中的集中式内存数据库在使用过程中出现的功能及性能上的不足和瓶颈,从分布式环境下内存数据存储的方面进行了研究,提出基于分布式内存文件系统的分布式内存数据库的实现方案。
旨在解决目前容量不足以及并发性不高的问题。
在研究过程中,参考了传统的分布式数据库理论,同时也借鉴了目前研究较为广泛的分布式文件存储机制,结合内存这种存储介质的某些特性,抛弃了传统的基于数据库记录层面上的数据分布存储策略,而是将数据的分布存储转移给数据库的数据存储层面。
设计出分布式内存文件系统,这样分布式内存数据库管理系统可以不需要考虑数据的分片分布以及各节点的负载均衡,而是完全交由分布式内存文件系统即可。
分布式内存数据库管理系统可以集中资源进行分布式数据库事务的执行。
以下为论文的安排。
第一章为绪论,介绍了本课题的业务及理论背景,并对目前分布式数据库及分布式内存数据库的研究现状进行了简单的介绍和分析。
第二章详细介绍了分布式内存数据库数据存储的理论研究,分别从分布式架构,分布式数据分片分布策略以及副本在分布式数据库如何保证数据一致性进行了介绍和分析,对各种方案的优势和劣势进行了比较,同时针对智能电网的特点以及内存这种存储介质的特性,分析了分布式内存数据库存储方面的问题。
第三章为分布式内存数据库系统的整体设计,分别从分布式内存文件系统以及分布式数据库管理系统这两方面进行了介绍和分析。
其中分布式内存文件系统负责对上层应用要求存储的数据进行分布存储,负载均衡以及数据一致的管理,向上层应用提供透明的内存文件服务。
分布式内存数据库管理系统则调用该内存文件系统对关系数据及相应索引进行存储和管理,同时对分布式数据库事务进行协调及控制。
第四章为整个系统的仿真及实验。
给出了系统测试的方案与环境。
分别从单点对比,多点并发性能以及负载均衡进行了测试与分析。
第五章为对全文的总结和展望。
2分布式内存数据库存储研究
本章主要从分布式数据库在数据存储方面的理论进行介绍及研究。
通过对现有的分布式数据库理论的研究,分别从分布式的控制,分布式数据库中数据的分片分布策略,以及分布式中数据副本的一致性进行了讨论。
结合电力系统的应用场景,进一步得出了适合内存存储介质特性的分布式内存数据库技术方案。
2.1分布式数据库的分类
分布式数据库系统从控制方式上可以分为以下三种:
(1)逻辑集中式[10,11]。
这种方式中,数据在物理上是分布存储于各个节点的,但在逻辑上是集中控制的。
全局的控制信息存储于一个中心节点上,以对整个系统进行全局的控制。
这种结构适用于需要统一管理的系统中,有助于保持数据的一致性;但也存在中心节点由于并发访问过于频繁而成为系统瓶颈的可能。
(2)联邦分散式[11]。
是指数据库系统是有许多子数据库共同构成,所有子数据库都包含一个全局控制信息的副本。
子数据库都具有本地自治性,对于数据库系统的控制是分散的。
这种系统的可用性较之集中式较强,但由于数据的管理分散在各个节点上,因此较难维护整个数据库数据一致性,需要的算法较为复杂,对系统的整体性能有一定影响。
(3)混合式[12]。
集中了前两种的方式,将唯一的中心节点扩展为所有节点中的一个子集,子集中的这些节点共同负责对整个数据库的管理,这样首先缓解了单一中心节点的性能瓶颈,同时也不需要关注对于数据一致性的控制也可以控制在一个较小的范围内进行。
当然,子集中各节点的协同也是一个不能忽视的问题。
各种的架构都有