一种主机系统下的内存数据库的实现方法

文档序号:8299176阅读:277来源:国知局
一种主机系统下的内存数据库的实现方法
【技术领域】
[0001] 本申请涉及数据处理技术领域,特别涉及一种主机系统下的内存数据库的实现方 法。
【背景技术】
[0002] 目前,大型商业银行仍主要以IBM主机系统,处理行内交易,在银行业应用的主机 系统受限于IBM平台,故广泛应用的是关系型数据库管理系统DB2数据库。但是,类似于 DB2等关系型数据库最擅长处理的是集合而非单条记录。当处理相同数量的记录时,逐条循 环处理和批量处理之间的效率差异呈几何单位。
[0003] 而实际应用中,为了提高小表访问的效率,DB2提供了缓冲池bufferpool来籍此 减少对磁盘进行I/O访问时的开销。
[0004] 但是从目前DB2数据库的应用现状来看,其数据访问效率并不能满足应用对访问 热表时的性能要求。

【发明内容】

[0005] 有鉴于此,本申请提供一种主机系统下的内存数据库实现方法,以解决现有技术 中的数据库的数据访问效率并不能满足应用对访问热表时的性能要求的问题。技术方案如 下:
[0006] -种主机系统下的内存数据库实现方法,该方法包括:
[0007] 对初始数据进行数据整理;
[0008] 将进行整理后的数据进行哈希计算,将哈希计算的结果按照内存数据库中预先建 立的内存表规则进行建立,生成内存表源文件,组织生成内存表;
[0009] 加载所述内存表源文件;
[0010] 设定下载指令CICSLOAD,当客户信息控制系统区域CICSRegion内的程序调用内 存数据库时,通过CICSLOAD将所述内存表源文件的入口地址发送给所述程序,以作为该程 序解析获取内存表地址的依据;
[0011] 为所述内存表建立结构化查询语言SQL语句映射。
[0012] 优选的,所述数据整理为:将所述初始数据导入预先建立的物理表内。
[0013] 优选的,所述预先建立的内存表规则为:内存表为N+1级哈希结构,其中,前N级只 存储下一级哈希表所在位置,即索引,第N+1级用于存储数据。
[0014] 优选的,所述内存表的第N+1级存储的数据包括,目标数据和离散数据,其中所述 目标数据是基于初始数据构成,所述离散数据由动态新增的数据构成。
[0015] 优选的,按照内存数据库中预先建立的内存表规则进行建立,生成内存表源文件 的过程包括:
[0016] 将所述整理后的数据进行N+1级哈希计算,将得到的N+1级哈希表按照所述内存 表规则,将第N+1级用于存储数据,其余N级用于存储索引,生成相应的数据结构;
[0017] 组织数据结构按照预先设定的形式生成内存表的高级语言源文件。
[0018] 优选的,所述索引中的各级哈希表包含有Offset和Num两个参数,其中,Offset代 表下一级哈希表与内存的相对地址,Num代表下一级哈希表内的元素数量,当某一级哈希表 中包含有H1个元素时,那该级哈希表以集合的形式进行表述为:
[0019]{{Offset1,Numl},{Offset2,Num2},???,{OffsetHl,NumHl}}〇
[0020] 优选的,所述目标数据包括多个数据块,所述数据块包括:单条记录的访问结果 VAL及访问该条记录时的索引字符串Key。
[0021] 优选的,所述目标数据还包括:指针Pointer,用于指向所述存储到离散数据中的 新增数据。
[0022] 优选的,所述内存表中的起始地址为4KB的倍数,通过调整所述索引中各级哈希 表的偏移量使得任一连续数据存储在同一虚拟页。
[0023] 优选的,所述SQL语句包括:访问、更新、删除、插入和游标。
[0024] 优选的,所述内存表的访问过程包括:
[0025] 步骤一:定义用于索引的字符串为Key;
[0026] 步骤二:根据拆分集合SkSet内的元素Ski划分Key,得到字符串集合,从所述集 合中获得用于第一级哈希索引的字符串,定义为Keyl;
[0027] 步骤三:确定索引中的第一哈希级为当前待访问哈希级,所述Keyl为当前待索引 字符串;
[0028] 步骤四:调用哈希函数,对所述当前待索引字符串进行哈希计算,并获得当前哈希 值;
[0029] 步骤五:获得哈希因子集合HSet内的与所述当前待索引字符串对应的元素,确定 对应的当前级哈希表索引为:当前哈希值对所述当前待索引字符串对应的元素的取余结 果;
[0030] 步骤六:判断当前哈希级表索引的参数中的Num值是否等于0,如果是,则记录不 存在,访问失败,否则,进入步骤七;
[0031] 步骤七:当所述当前哈希级表索引具有下一哈希级时,确定当前哈希级表索引的 下一级哈希表为当前待访问哈希级,并确定字符串集合中的下一字符串为当前待索引字符 串,返回执行步骤四,直到索引表访问结束或中断,执行步骤八;
[0032] 步骤八:根据当前哈希级表索引确定目标数据中与其对应的数据,遍历所述数据, 并顺序比较所述索引字符串Key的值,如果匹配,则访问成功,否则进入步骤九;
[0033] 步骤九:判断当前结构Pointer指针指向的位置,沿着指针开始逐步比较离散数 据,如果匹配,则访问成功,否则,访问失败。
[0034] 优选的,所述内存表的删除操作包括:
[0035] 访问待删除目标记录;
[0036] 当访问到所述待删除目标记录后,将该待删除目标记录对应的最后一级哈希表内 的Num值自动减1;
[0037] 当所述待删除目标记录存在于离散数据区时,直接调用客户信息控制系统CICS 命令FreeMain释放内存,并设定Pointer的指针指向所述待删除目标记录的上一条记录;
[0038]当所述待删除目标记录不存在于离散数据区时,将其对应的VAL的值清空为零。
[0039] 优选的,所述内存表的插入过程包括:
[0040] 当主机采用联机类交易处理状态时,所述新增内存表数据的过程包括:
[0041] 设置标志位的状态为更新状态,调用预先建立的内存表锁保护程序,所述标识位 为预先在所述内存区域中保留的预设个数的字节;
[0042] 判断目标数据区域内是否存在已被清空的记录项,若存在,则将所述待插入数据 填充至所述记录项中VAL项中,并将所述记录项对应的Num的值进行累加操作,若不存在, 则CICS命令GETMAIN申请内存空间,将所述待插入数据添加至该内存空间,并将原始的最 后一项离散数据的Pointer指针指向新增记录处;
[0043] 设置所述标志位的状态为完成插入。
[0044] 优选的,所述内存表的更新过程包括:
[0045] 当主机采用联机类交易处理状态时,所述更新内存表数据的过程包括:
[0046] 访问待更新目标记录;
[0047] 当访问到所述待更新目标记录后,设置标志位的状态为更新状态,调用预先建立 的内存表锁保护程序,所述标识位为预先在所述内存区域中保留的预设个数的字节;
[0048] 更新目标记录中的VAL项的数据,重新计算索引的值,然后更新索引记录;
[0049] 设置所述标志位的状态为完成更新。
[0050] 优选的,所述标志位为:
[0051] 预先在共享内存中保留的预设个数的字节,当所述字节为1时,则表明内存表正 处于更新或插入数据的状态,不可读取。
[0052] 优选的,所述内存表锁保护程序为:
[0053] 用于占用系统的时间片而预先建立的循环程序,其中,所述循环程序的周期为主 机时钟周期的倍数,所述循环程序的循环次数,根据所述访问操作对应的最长时钟周期而 决定。
[0054] 优选的,当主机采用批量类交易处理状态时,所述插入或更新所述内存表数据的 过程包括:
[0055] 将待更新或待插入数据记录到预先建立的物理表中;
[0056] 利用批量更新程序从所述物理表中读取各条记录;
[0057] 将所述各条记录中的数据存储于预先设定高级语言源程序内;
[0058] 运行所述程序生成更新后的内存表。
[0059] 本申请实施例公开的内存数据库的实现方法中,内存数据库中的索引和数据均是 存储于内存表中,访问过程中减少了内存与磁盘数据交换之间的性能开销,因此,访问性能 要高于数据库访问,因此能够进一步的满足应用对访问热表时的性能要求。
【附图说明】
[0060] 为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使 用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于 本领域普通技术人员来讲,在不付出创造性劳动性的前提下,还可以根据这些附图获得其 他的附图。
[0061]图1是本申请实施例公开的一种主机系统下的内存数据库的实现方法流程图;
[0062] 图2是本申请实施例公开的Load Module文件的数据段实例;
[0063] 图3是本申请实施例公开的内存表的结构示意图;
[0064] 图4是本申请实施例公开的内存表优化方法流程图;
[0065] 图5是本申请实施例公开的内存表查找过程的流程图;
[0066] 图6是本申请实施例公开的内存表删除过程的流程图;
[0067] 图7是本申请实施例公开的内存表插入过程的流程图;
[0068] 图8是本申请实施例公开的内存表
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1