• 学前教育
  • 小学学习
  • 初中学习
  • 高中学习
  • 语文学习
  • 数学学习
  • 英语学习
  • 作文范文
  • 文科资料
  • 理科资料
  • 文档大全
  • 当前位置: 雅意学习网 > 数学学习 > 正文

    内存数据库在分布式系统中的应用_分布式内存数据库

    时间:2020-03-11 07:31:53 来源:雅意学习网 本文已影响 雅意学习网手机站

       摘要:本文通过对内存数据库的体系结构、数据存储、数据组织与事务管理等进行分析,提出了内存数据库在分布式系统中的应用案例。此方案用于解决海量数据、高并发系统的数据存储和访问问题,尤其适用于数据模型和业务规则复杂的大型互联网应用。
       关键词:内存数据库;分布式系统;网站群CMS;数据持久层
       中图分类号:TP311.13 文献标识码:A 文章编号:1007-9599 (2011) 23-0000-02
       Memory Database Applications in Distributed System
       You Liang
       (Gansu Wanwei Information Technology Co.,Ltd.,Lanzhou 730000,China)
       Abstract:Based on the memory database architecture,data storage,data organization and analysis of transaction management,etc.,made in memory database applications in a distributed system case.This program is used to solve the mass data,highly concurrent systems of data storage and access problems,especially for complex data models and business rules of large-scale Internet applications.
       Keywords:Memory databases;Distributed system;Web base CMS;Data persistence layer
       引言:2011年在主持研发公司网站群CMS V2.0产品(该产品是为网站群构建与管理提供技术支撑的平台,解决了门户网站集群的独立权限下的数据共享,提供了大型同构门户网站群分布式部署的解决方案和异构网站信息聚合的解决方案。)期间,由于在产品研发的中后期通过对前台web站点进行大用户、高并发压力测试过程中发现系统性能始终达不到前期设计要求,急需对系统架构进行调整优化。经过项目组反复认真的讨论最终决定采用内存数据库的方式以解决系统性能瓶颈,通过内存数据库选型、系统架构改造并借助自动化测试工具的大量调测,最终很好的解决了实际问题。
       一、内存数据库特点
       近年来,随着计算机硬件技术的迅猛发展,内存容量不断提高,价格不断下跌,操作系统已经可以支持更大的地址空间(计算机进入了64位时代),同时对数据库系统实时响应能力要求日益提高,充分利用内存技术提升数据库性能成为一个热点。
       其实内存数据库并不是一项新兴技术,其出现于上世纪60年代末,随着市场需求的不断增大在90年代后期开始得到快速发展。其原理就是将数据放在内存中直接操作的数据库。相对于磁盘,内存的数据读写速度要高出几个数量级,将数据保存在内存中相比从磁盘上访问能够极大地提高应用的性能。同时,内存数据库系统带来的优越性能不仅仅在于对内存读写比对磁盘读写快上,更重要的是,从根本上抛弃了磁盘数据管理的许多传统方式,基于全部数据都在内存中管理进行了新的体系结构的设计,并且在数据缓存、快速算法、并行操作方面也进行了相应的改进,从而使数据处理速度一般比传统数据库的数据处理速度快很多,一般都在10倍以上,理想情况甚至可以达到1000倍。
       内存数据库的另外一个重要特点是可以对内存中的数据实现全事务处理,相比仅仅把数据以数组等形式放在内存中是完全不同的。并且,内存数据库是与应用无关的,显然这种体系结构具有其合理性。内存引擎可以实现的查询与存档功能与磁盘数据库的使用完全相同,同时内存表与磁盘表也使用的是完全相同的存取方法。存储的选择,对于应用开发者而言是完全透明的。
       对于内存数据库而言,实现了数据在内存中的管理,而不仅仅是作为数据库的缓存。不同于其它将磁盘数据块缓存到主存中的数据库,内存数据库的内存引擎使用了为随机访问内存而特别设计的数据结构和算法,这种设计使其避免了因使用排序命令而经常破坏缓存数据库性能的问题。通过内存数据库,大大减少了磁盘I/O处理,因此能够达到以磁盘I/O为主的传统数据库无法与其相比拟的处理速度。
       二、内存数据库选型
       常见的内存数据库产品包括商业版和开源免费版两类。商业版如:Oracle TimesTen、Altibase、Berkley DB等。他们在电信、金融、证券等高性能计算应用中运用较为广泛。商业版功能强大,然而,价格比较昂贵,不适合针对中小企业提供的质优价廉的产品推广解决方案。开源领域产品主要有H2、HsqlDB、Derby等。在混合分区架构中,内存数据库将承担OLTP的职责,因此除了读写性能外,功能的完备,事务控制等都需要作为优先评估的因素。
       基于以上情况的考虑,团队通过对多款开源产品的优缺点进行横向对比,发现H2在执行效率和产品特性等方面均具有较明显的比较优势:(1)纯Java、开源、免费数据库;(2)非常高速的数据库引擎;(3)支持JDBC和ODBC API,支持SQL;(4)支持嵌入式、服务器和集群模式。支持内存数据库;(5)提供基于浏览器的管理控制台;(6)整个应用主文件本身只有1MB左右;(7)支持事务隔离;(8)支持基于代价的优化方式;(9)支持ODBC驱动;(10)支持全文本搜索;(11)加密数据库(AES或XTEA)、SHA-256密码加密。
       三、性能测试
       为了更加客观的评估内存数据块的性能特点,我们分别对SQLite和H2进行了性能测试。由于SQLite不支持JDBC,因此测试环境不尽相同。
       (一)SQLite测试方案
       1.测试环境
       主机:
       操作系统:Windows XP;CPU:Intel Dual 2.2GHZ;内存:1.99GB内存;测试目标版本:SQLite 3.6.12
       2.测试数据
       测试数据库表ip_table结构如下
       字段名 类型
       Id(PK) Integer
       Dst_ip Varchar(20)
       Agent_ip Varchar(20)
       Dst_mac Varchar(20)
       Dst_port Integer
       Dst_vlan Varchar(20)
      3.测试过程
       使用C++编写了测试工程,启动测试程序后,先分别插入50000条和1000000条数据,然后执行一系列的测试。
       (二)H2测试方案
       1.测试环境
       主机:
       操作系统:Windows Server 2003 Enterprise Edition SP2;CPU:Intel Dual-Core 2.5GHz;内存:3.99GB内存;测试目标版本:H2database 1.1.110
       2.测试数据
       测试数据库表employee结构如下:
       字段名 类型
       ID(PK) Integer
       Name Varchar(20)
       Age Varchar(20)
      departmentID Varchar(20)
       测试数据库表department结构如下:
       字段名 类型
      DeptID(PK) Integer
       Dept Varchar(20)
       mangerID Integer
       测试数据库表salary结构如下:
       字段名 类型
       ID(PK) Integer
       F1 varchar(255)
       F2 varchar(255)
       F3 varchar(255)
       F4 varchar(255)
       F5 varchar(255)
       F6 varchar(255)
       F7 varchar(255)
       F8 varchar(255)
       F9 int
      3.测试过程
       使用Java编写了测试工程,启动测试程序后:(1)50000条级别的测试:先分别插入到employee表、department表、salary表中50000、和1000、50000条数据,然后执行一系列的测试。(2)100w条级别的测试:先分别插入到employee表、department表、salary表中1000000、和1000、1000000条数据,然后执行一系列的测试。
       (三)测试结论
       SQLite和H2内存数据库在查询(包括嵌套查询)、插入、更新及删除等操作方面都比较快:(1)查询性能:查询一条记录SQLite的性能要优于H2。查询(5000或10000)条H2的性能要好于SQLite。(2)插入性能:性能差不多快,SQLite略快。(3)更新性能:更新一条记录SQLite的性能好于H2。更新多条记录(有索引),SQLite(0.04s)的性能要好于H2(0.18s)。(4)删除性能:删除一条记录.SQLite(非常小)的性能略好于H2(非常小)。删除多条记录,SQLite(0.078s)好于H2的(0.12s)。(5)启动时间:都比较快。(6)并发性能:H2的查询支持一定的并发性,要强于SQLite。更新和插入,基本上都没有并发可言。
       总的看来,SQLite的性能要好于H2,但并发性不如后者。SQLite一般使用C的API接口访问,而H2支持JDBC。并且都可以大多数主流平台上。因此对于Java应用,H2是不错的选择。
       四、在网站群系统中的应用
       在系统逻辑架构方面,我们针对系统承载的业务复杂度,从系统实现角度考虑对系统进行了不同的划分,分别包括数据层、服务层、应用层、表现层等;而从系统业务角度考虑对系统进行了业务性的划分,包括站群管理、内容管理等,使用的开源框架有Sturts、Spring、Hibernate。
      
       系统总体架构物理分布图
       (一)资源服务器
       用于存放站群所有物理文件资源,资源的更新由CMS系统负责,资源可以为前台站点提供访问。站群中的资源文件也可以放入各个站点下,站点直接访问自己的相关路径即可。远程控制台作为CMS2.0系统分布式部署的各个服务器之间的桥梁,提供了服务器之间的数据传送以及本地服务器的API调用,可以有效的实现自动化部署以及远程监控等功能,系统采用Spring进行所有对象实例的管理,提高开发效率。
       (二)CMS服务器
       基于其上部署了CMS系统,也是本产品的核心子系统,包含了站群管理、内容管理等模块以及为前台站点提供远程调用的接口和接口功能的实现,例如:网站注册等。如果前台站点调用的并发量过多,可将此应用部署为Apache+Tomcat集群式,减缓请求压力。
       (三)缓存服务器
       主要部署H2内存数据库,将系统频繁访问和更新的业务和状态数据放入其中进行统一管理和调度,以便提升访问效率。
       为满足各前台web站点对频繁访问和更新数据的需求,将首页访问量、栏目首页访问量、具体文章访问量等各类数据信息暂存在H2内存数据库中,进行与磁盘数据库功能相同的数据管理和调度;一旦内存数据表中的记录数目达到预先设定的阀值时,由CMS系统统一调度将这些数据通过数据持久层进行批量写入后台关系型磁盘数据库中,这样的方式极大的提高了前台web站点的性能,同时也减少前台使用JAVA远程调用访问后台系统的压力,从而很好的解决了系统执行效率不高的难题。
       五、结束语
       通过在网站群CMS系统架构中引入内存数据库H2,有效解决了面向公众及行业客户的大用户、高并发计算环境的性能要求。实际应用中也同样表现出较强的灵活性、适应性、稳定性和实时性。经过本次实际产品研发的成功应用,为今后面向大中型Internet/Intranet应用的设计提供了很好的指导和启示,同时也提升了整体解决方案的水平和成熟度。
       参考文献:
       [1]钱雪忠.数据库原理及应用[M].北京邮电大学出版社,2007
       [2]王珊.数据库技术与联机分析处理[M].北京科学出版社,1998
       [3]何坤.基于内存数据库的分布式数据库架构[J].CSDN杂志社,2010

    推荐访问:分布式 内存 数据库 内存数据库在分布式系统中的应用 分布式内存数据库 开源分布式内存数据库

    • 文档大全
    • 故事大全
    • 优美句子
    • 范文
    • 美文
    • 散文
    • 小说文章