刘晓丹(陕西广播电视大学,西安,710068)
分布式数据库存储子系统设计与实现
刘晓丹
(陕西广播电视大学,西安,710068)
本文通过对分布式关系型数据库的分析研究,开发了利用价值较高的分布式关系数据库系统CRDB,该系统最大限度地利用网络和磁盘的I/O能力,提高用户体验,并利用Linux 提供的API大大节约了系统开销。
分布式;数据库系统;结构化存储
互联网自诞生以来以其独特的魅力受到了世人的青睐,超强的影响力使其在全球范围内迅速普及。在2014年四月份瑞典Royal Pingdom公司研究报告显示,全球网名总量已达到了22.7亿,相较于五年前的11.5亿,这一数据可谓意味深远。其中,报告还称在亚洲人口数量多的发展中国家地区网民人数还有很大的上升空间,这就意味着网络的竞争市场只会愈演愈烈。与此同时,大众对于数据存储的需求也日益增长。美国IDC公司2011年6月的数据统计显示,仅在当年,全球的数据产生量已达到了1.8ZB,未来十年可能会增长50倍。可以说这一庞大的数字,也就意味着信息时代也是“大数据”时代。
2.1 分布式存储
相对于集中式存储而言,分布式存储是是将数据存储在一个由网络连通的多个结点构成的集群之上,向上层提供存储接口的一种存储系统。分布式存储技术具备高性能、高扩展性等优势,缓解了各个互联网公司面对海量数据存储的压力,为其提供了大规模数据的存储和访问,而且由于其本非常廉价,受到了各公司企业的极大青睐。
2.2 结构化与非结构化
存储系统按其存储数据方式和提供的存取接口,一般地可分为非结构化存储和结构化存储,键值存储系统属于典型的非结构化存储系统,它只负责基于 key-value 的存取,无法对value进行解析。而结构化存储系统则不同,典型的就是关系型数据库,它能够利用系统所提供的接口在数据上进行计算并得到计算的结果。当用户使用它所提供的存取接口也就是SQL语言时,可实现对存储的表进行各种操作,然后再将操作后的结果返回给用户。
2.3 关系数据模型
关系数据模型、层次数据模型以及网状数据模型称为三大数据模型,而关系数据模型是三者中应用最为广泛、研究也最为成熟的数据模型,数据库的类型也是根据数据模型来划分的,分布式关系数据库提供的是基于关系数据模型的数据存储。此外,经过多年的发展,SQL已成为表述关系操作的标准语言。
3.1 CRDB系统
该系统是用于存储海量结构化数据的分布式关系型数据库,与传统数据库相比较,CRDB系统能够在其基础上提供额外的高可靠性、高扩展性、高并发和对分布式事务的处理。CRDB系统主要由网关——Gateway、认证服务器——CA、本地数据库——LDB、索引服务器——IS、元数据服务器——MDSS、分布式事务执行服务器——DTE等几部分构成,各部分之间关系密切、不可分割。
本文针对LDB存储子系统重点讨论,虽然该系统在整个系统中担任最底层的存储结点的角色,但是实际上CRDB整个系统的性能在很大程度上取决于LDB存储子系统的性能。关键在于LDB负责完成用户对数据的查询。而且从性能来看,涉及到数据的操作最终都会由某个LDB来完成。
3.2 需求分析
在CRDB系统中,LDB能够在其他子系统处于运行状态时,任意时刻运行并添加到系统中。当刚启动系统时,数据存储量较小,若要满足数据存储的需求,只需底层一个LDB即可;当运行时间加长时,数据量会增大,为了避免系统一段时间内不可用,LDB必须能够动态第添加到系统中增加系统的存储能力。而且,当系统存储需求扩大时,管理员只需要针对一台新添加的服务器配置好XML文件,LDB便可动态地添加到正在运行的系统中,同时也不影响系统的正常运行。
4.1 系统模块划分
图1所示即LDB存储子系统模块图。
图1 系统模块图
观察图2可知LDB存储子系统主要包括四个模块。一是网络通信模块,该模块负责LDB子系统与其他子系统和其他LDB之间的通信,通过该模块DTE能够为LDB发起任务执行计划,接收任务并完成情况的回复。而Gateway若与LDB相连则需要通过此模块,如此LDB才可以将结果集发送给Gateway。二是任务管理模块,该模块负责对LDB接收到的任务的执行情况进行管理,一个LDB同时可能对多个来自不相同或是相同的DTE任务进行执行。此外,该模块有一个计时器子模块,主要为执行的任务计时,一旦超出预期值,该模块会将此次任务取消。三是线程调度模块,该模块主要实现的是一种异步I/O机制,笔者及团队经过分析选择了非阻塞复用I/O编程框架,并做出了自行实现异步I/O的决定。四是数据库连接池模块,当任务在执行时需要对数据库进行访问时,可由数据库连接池分配一个已建立的连接,当任务结束后,连接由数据库连接池维护,如此可大大节省由连接和关闭所带来的开销。
4.2 系统框架设计
图2所示即LDB存储子系统架构图。
观察图2我们可知,LDB对于整个分布式数据库系统来说至关重要,它负责整个系统的底层存储,而且网络模块监听了来自Gateway、DTE以及其他LDB的连接,一旦它们的被监听的连接上有了可读或者可写的事件发生,任务管理模块的TaskManager会对这个事件进行处理,并且会根据其是否是新任务对其进行不同的处理方式。
当事件的处理不涉及数据库的访问,主线程可对这个事件进行直接处理,同时对下一个事件做出监听。反之,为了避免阻塞主线程,事件的处理将会交由线程池来处理。
4.3 系统的实现
在LDB上,包括网络的读写,任务的调度以及计时器的响应都是基于epoll实现的,它对网络读写事件和管道读写事件都可进行监听。在LDB实现上,将epoll对的操作接口三种操作都封装到EpollEvent类里面,这个类对此驱动模型需要的数据的操作进行了封装。
综上所述,分布式关系型数据库的研发是一项复杂的工程,本文仅对此做出了初步的设计,最终将理论应用于实践还需要更深入的探索和研究。
牛园园.分布式数据库有关连接查询优化算法的研究[D].长沙理工大学2010
Distributed database storage subsystem design and implementation
Liu Xiaodan
(Shaanxi Radio and TV University,Xi'an,710068)
This paper analyzes the research on distributed relational database,developed the use of highervalue distributed relational database system CRDB,the system is to maximize the use of the network and disk I/O capacity,improve user experience,and using Linux API provides significant savings in overhead.
distributed;database system;structured storage
图2 LDB架构图