一种面向内存的多线程数据库设计方法技术

技术编号:17048208 阅读:24 留言:0更新日期:2018-01-17 17:50
本发明专利技术公开的一种面向内存的多线程数据库设计方法,包括以下步骤:步骤1,根据要支持的数据类型,设计并实现对应的内存容器;步骤2,设计内存数据库中键值对的组织方式;步骤3,设计与实现客户端的应用代理结构和服务管理结构;步骤4,设计客户端应用与内存数据库通信的协议解析模块;步骤5,内存数据库数据操作命令的处理解析;步骤6,设计并发模型;步骤7,实现淘汰策略和负载均衡;步骤8:设计并实现配置文件。本发明专利技术的设计方法方法在内存中重新设计了数据结构,并且在缓存、淘汰算法、并行操作方面也进行了相应的改进,提高了数据处理速度。

A memory oriented multi thread database design method

Multi thread database design method for memory is disclosed, which comprises the following steps: 1, according to the supported data types, the design and implementation of the corresponding memory container; step 2, the key to the organization design of the memory database; step 3, the design and implementation of the client application proxy structure and service management structure; step 4, protocol analysis module design and database communication client application memory; step 5, analytical processing of memory database data operation command; step 6, concurrent design model; step 7, to achieve the elimination strategy and load balancing; step 8: the design and implementation of the configuration file. The design method of the invention redesigns data structure in memory, and improves in cache, elimination algorithm and parallel operation, so as to improve data processing speed.

【技术实现步骤摘要】
一种面向内存的多线程数据库设计方法
本专利技术属于数据存储与处理方法
,具体涉及一种面向内存的多线程数据库设计方法。
技术介绍
传统关系数据库在一些数据敏感的服务中表现出了较差的性能,例如为海量数据创建索引、高并发访问,高流量网站的网页服务、以及新兴的流式媒体直播以及视频服务。关系型数据库主要适用于执行规模小而读写频繁或者大批量极少写访问的事务处理,因而在高并发访问情况下性能会很差,究其原因,有以下几点:(a)关系型数据库的数据模型一般是按照行存储,例如一条用户的信息要用多个字段存储,但是频繁修改的可能就其中一两个字段;(b)关系型数据库中的IO(输入输出)问题,由于磁盘的IO速度总是落后于内存,当每秒十万、百万甚至更多的用户同时发起请求时,磁盘的处理速度就满足不了需求;(c)在业务开发方面,基于行的存储可能会使得开发人员在数据获取与存储时,把重点转移到一些与业务无关的行为上,例如需要考虑如何从获取到的sql行数据中拆分出自己的数据模型;(d)数据是碎片化的,查询数据库的操作很不友好,为了适应关系型数据库的逻辑会使代码变得复杂而与业务不相关,利用单个SELECT和多个JOIN语句查询联系人数据不太实际,当数据在多张表里面分布存储时,会导致多表查询的问题;(e)全文搜索很困难,如果有人输入字符串“positionSitePoint”,操作者必须检查所有的表,看看它是否为联系人名字、电话、E-mail或者住址的一部分,并且需要做相应的排序。由上可知,相对于基于磁盘存储的传统关系型数据库,内存数据库将数据保存在内存中能够极大地提高应用的性能;同时内存数据库抛弃了关系型数据库基于行、表的存储方式,而是在内存中重新设计了数据结构,并且在缓存、淘汰算法、并行操作方面也进行了相应的改进,所以数据处理速度比传统数据库的数据处理速度要快很多。
技术实现思路
本专利技术的目的是提供一种面向内存的多线程数据库设计方法,解决了现有关系型数据库开发和运维比较复杂,网络服务的实时性低、响应慢、数据量小的问题。本专利技术所采用的技术方案是,一种面向内存的多线程数据库设计方法,包括以下步骤:步骤1:根据需要支持的数据类型,选择对应的内存容器;步骤2:确定内存数据库中键值对的组织方式;步骤3:确定客户端应用代理结构和服务管理结构;步骤4:确定步骤3中客户端应用代理结构与步骤2中内存数据库的通信协议解析模块;步骤5:内存数据库数据操作的命令处理设定;步骤6:设计并发模型;步骤7:通过backend线程实现淘汰策略和负载均衡;步骤8:实现配置文件。本专利技术的特征还在于,步骤1的具体为:步骤1.1,确定数据类型,数据类型为字符串、链表、字典或集合中任意一种或多种;步骤1.2,根据步骤1中数据类型,确定操作API、实现数据结构;步骤1.3,确定对象系统,将封装底层数据结构作为一个对象,每个对象均有所属类型且由不同的数据结构编码。步骤3具体包括:(1)客户端应用代理结构的确定客户端应用代理结构是管理客户端应用输入输出的代理结构,客户端应用代理结构嵌入命令与参数字段,且包括查询缓冲区以及发送缓冲区;(4)服务管理结构的确定服务管理结构是根据客户端应用代理结构进行内存数据库资源的分配,服务管理结构包括客户端应用代理链表和统计信息的数据结构。步骤4的具体为:步骤4.1,读取所有报文数据如命令和参数、到客户端应用代理结构的缓冲区;步骤4.2,将缓冲区按照\n拆分;步骤4.3,按照协议将对应的数据复制到客户端应用代理结构的命令与参数中。步骤5的具体为:步骤5.1:步骤4中的协议解析模块将需要执行的命令、参数复制到步骤3的客户端应用代理结构中;步骤5.2:根据步骤5.1的客户端应用代理结构命令字段查找命令表,找到对应的函数指针并调用;步骤5.3:将返回值复制到客户端应用代理的输出缓冲区中。步骤6的并发模型通过创建一个Master线程和多个worker线程处理并发的事件,具体包括:步骤6.1:选用多线程+IO复用的并发框架;步骤6.2:封装底层的IO复用,实现一个类似libevent的事件库;步骤6.3:封装线程以及线程通信的消息队列,不同角色的线程通过其结构内部的事件触发器来注册与监听,并且处理对应的事件;步骤6.4:通过管道和消息队列两个渠道设计master与worker通信的协议,基本流程为:worker线程会监听管道的读事件,由master将新客户端句柄压入到消息队列后向管道中写入字符;worker线程通过事件触发器监听到管道中读到写入的字符,会创建一个客户端结构,然后与客户端进行交互。步骤7淘汰策略有两种:backend定时扫描和惰性策略;负载均衡通过backend线程对内存数据库键值对重新hash实现。步骤8的具体为:步骤8.1,选择ini文件作为配置文件,快速读取到配置选项;步骤8.2,设计并实现配置树,将所有的配置选项插入到配置树中,当执行写入配置文件的命令时,会将配置树的数据全部序列化到配置文件中。本专利技术的有益效果是:本专利技术一种面向内存的多线程数据库设计方法通过在内存中重新设计了数据结构,并且在缓存、淘汰算法、并行操作方面也进行了相应的改进,相对于传统的关系型数据库提高了数据处理速度、开发和运维比较简单,网络服务的实时性高、响应快、数据量大,有很好的实用价值。附图说明图1是本专利技术内存数据库服务器端运行过程示意图;图2是本专利技术内存数据库服务器端初始化过程;图3是本专利技术并发框架启动流程图;图4是本专利技术master启动流程图;图5是本专利技术worker线程启动流程图;图6是本专利技术并发框架的流程图。具体实施方式下面结合附图和具体实施方式对本专利技术进行详细说明。本专利技术一种面向内存的多线程数据库设计方法,包括以下步骤:步骤1:根据需要支持的数据类型,选择对应的内存容器;步骤1.1,确定数据类型,数据类型为字符串、链表、字典或集合中任意一种或多种;步骤1.2,根据步骤1中数据类型,确定操作API、实现数据结构;编码实现链表、字符串等数据类型,此处字典使用两张hash表实现,使用拉链法解决hash冲突,第二张hash表用来进行负载均衡;步骤1.3,确定对象系统,将封装底层数据结构作为一个对象,每个对象均有所属类型且由不同的数据结构编码;一个对象结构中使用void*类型存储多种底层的数据结构,并且使用一个编码属性用来指示底层数据结构类型,最后还有一个属性对象类型,而对象和编码的关系是1对多。步骤2:确定内存数据库中键值对的组织方式;内存数据库其实就是使用一种数据结构来管理内存存储的数据,本专利技术的设计方法中使用字典对象来管理所有对象;内存数据库中键值对的组织是通过两个hash对象实现,第一个hash对象存储数据,第二个存储键及其过期时间,数据的核心操作就是对这两个hash对象进行操作。步骤3:确定客户端应用代理结构和服务管理结构;(1)客户端应用代理结构的确定客户端应用代理结构主要存储前面的命令结构,并且内置一个输出缓冲区以及查询缓冲,分别用来存储输出和输入的报文,其是管理客户端应用输入输出的代理结构,客户端应用代理结构嵌入命令与参数字段,且包括查询缓冲区以及发送缓冲区;(4)服务管理结构的确定服务管理结构主要是用来管理命令表如静态函数指针数组启动时会被存储为字本文档来自技高网
...
一种面向内存的多线程数据库设计方法

【技术保护点】
一种面向内存的多线程数据库设计方法,其特征在于,包括以下步骤:步骤1:根据需要支持的数据类型,选择对应的内存容器;步骤2:确定内存数据库中键值对的组织方式;步骤3:确定客户端应用代理结构和服务管理结构;步骤4:确定步骤3中客户端应用代理结构与步骤2中内存数据库的通信协议解析模块;步骤5:内存数据库数据操作的命令处理设定;步骤6:设计并发模型;步骤7:通过backend线程实现淘汰策略和负载均衡;步骤8:实现配置文件。

【技术特征摘要】
1.一种面向内存的多线程数据库设计方法,其特征在于,包括以下步骤:步骤1:根据需要支持的数据类型,选择对应的内存容器;步骤2:确定内存数据库中键值对的组织方式;步骤3:确定客户端应用代理结构和服务管理结构;步骤4:确定步骤3中客户端应用代理结构与步骤2中内存数据库的通信协议解析模块;步骤5:内存数据库数据操作的命令处理设定;步骤6:设计并发模型;步骤7:通过backend线程实现淘汰策略和负载均衡;步骤8:实现配置文件。2.根据权利要求1所述的一种面向内存的多线程数据库设计方法,其特征在于,所述步骤1的具体为:步骤1.1,确定数据类型,数据类型为字符串、链表、字典或集合中任意一种或多种;步骤1.2,根据步骤1中数据类型,确定操作API、实现数据结构;步骤1.3,确定对象系统,将封装底层数据结构作为一个对象,每个对象均有所属类型且由不同的数据结构编码。3.根据权利要求1所述的一种面向内存的多线程数据库设计方法,其特征在于,所述步骤3具体包括:(1)客户端应用代理结构的确定客户端应用代理结构是管理客户端应用输入输出的代理结构,客户端应用代理结构嵌入命令与参数字段,且包括查询缓冲区以及发送缓冲区;(4)服务管理结构的确定服务管理结构是根据客户端应用代理结构进行内存数据库资源的分配,服务管理结构包括客户端应用代理链表和统计信息的数据结构。4.根据权利要求1所述的一种面向内存的多线程数据库设计方法,其特征在于,所述步骤4的具体为:步骤4.1,读取所有报文数据如命令和参数、到客户端应用代理结构的缓冲区;步骤4.2,将缓冲区按照\n拆分;步骤4.3,按照协议将对应的数据复制到客户端应用代理结构的命令与参数中。5.根据权利要求1所述的一种面向内存的多线程数据...

【专利技术属性】
技术研发人员:王怀军田玲李军怀张聪
申请(专利权)人:西安理工大学
类型:发明
国别省市:陕西,61

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1