内存数据库系统及实现内存数据库的方法和装置的制作方法

文档序号:6609265阅读:209来源:国知局
专利名称:内存数据库系统及实现内存数据库的方法和装置的制作方法
技术领域
本发明涉及计算机及通信领域的数据库技术,特别涉及一种内存数据库技术。
背景技术
目前的内存数据库是通过将系统中常用数据库表中的数据全部映射到主 机共享内存中,通过使用 一个固定的数据结构数组将每个固定的数据库表保存 在共享内存中,也就是将内存中的一个存储区作为一个数据库表的表空间,根
据表记录的实际大小将该存储区划分为多个内存块来保存数据库表中的数据;
在数据库表中的关^:字段上建立内存索引,通过该内存索引对关^:数据进行实 时访问。内存系统提供用于对内存数据库表中的数据进行修改和检索的应用编
程接口 API (Application Programming Interface )接口 ,应用程序在访问这些数 据库表时,通过调用内存数据库的API来访问共享内存中的数据,而不是直接 访问物理数据库表中的数据,因此,能够提高系统对关4定数据的实时访问性能。 由于通过使用 一个固定的数据结构数组将每个固定的数据库表保存在共 享内存中,所述数据的存储和数据库表记录的结构之间耦合度较大,导致不能 灵活创建和管理数据库表。例如,在内存数据库中增加数据库表时,必须修改 内存数据库的底层(即需要重新编写或修改代码);又如,在对数据库的表结 构进行变更时,也需要修改内存数据库的底层。因此,现有内存数据库存储方 式难以实现数据表空间的动态扩充;另外,由于采用固定的数据结构保存表记 录,所以对于带有变长字段的数据库表的表空间浪费也比较严重。

发明内容
本发明实施例提供一种内存数据库系统及实现内存数据库的方法和装置,以降低内存数据库中数据存储与内存数据库的表结构之间的耦合度提高创建、 管理数据库的灵活性。
一种内存数据库系统,包括
通信接口 ,用于接收请求操作数据库的各种消息和输出操作结果;
创建装置,用于在共享内存中建立存储数据库的描述信息的第 一存储区、 存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,以 及将数据库的描述信息保存到所述第一存储区,其中,所述第三存储区包括与 表记录大小匹配的存储单元,每个存储单元存储一条数据库表记录,相同大小 并且在物理空间上连续的存储单元构成一个物理块, 一个物理块或多个相同的 物理块关联成一个逻辑块;
写操作装置,用于在所述操作需要向数据库表中添加表记录时,查询所述 描述信息以选择包含的存储单元大小与所述表记录的大小匹配的一个逻辑块, 以及将表记录写入选择的逻辑块中空闲的存储单元内,并将表记录的位置信息 写入到所述索引信息中;
查询操作装置,用于在所述操作需要从数据库查询表记录时,查询所述索 引信息和根据查询结果从第三存储区中相应的存储单元读取表记录,并选择满 足查询条件的表记录;
释放操作装置,用于在所述操作需要从数据库表删除指定的表记录时,从 第三存储区释放存储所述指定的表记录的存储单元,并从第二存储区中删除所 述与指定的表记录相关的索引信息。
一种创建内存数据库的方法,包括步骤
确定数据库表结构及各数据库表中表记录的大小;
在共享内存中建立存储数据库的描述信息的第 一存储区、存储用于定位表
记录的索引信息的第二存储区和存储表记录的第三存储区,其中,所述第三存 储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记 录,相同大小并且在物理空间上连续的存储单元构成一个物理块, 一个物理块或多个相同的物理块关联成一个逻辑块;
将数据库的描述信息保存到所述第一存储区,所述数据库的描述信息包括 各数据库表的描述信息,所述数据库表的描述信息包括各数据库表关联的所述 逻辑块和各逻辑块中存储单元大'J 、。
一种创建内存数据库的装置,包括
确定单元,用于确定数据库表结构及各数据库表中表记录的大小;
创建单元,在共享内存中建立存储数据库的描述信息的第一存储区、存储 用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,其中, 所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数 据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一 个物理块或多个相同的物理块关^:成一个逻辑块;
保存单元,用于将数据库的描述信息保存到所述第一存储区,所述数据库 的描述信息包括各数据库表的描述信息,所述数据库表的描述信息包括各数据 库表关联的所述逻辑块和各逻辑块中存储单元大小。
一种访问内存数据库系统的方法,包括步骤
接收操作内存数据库的请求消息;
当所述操作需要向数据库表中添加表记录时,根据该数据库表查询所述第 一存储区中的描述信息以选择一个逻辑块,该逻辑块包含的存储单元大小与所 述表记录的大小相匹配,并且,将所述表记录写入选择的逻辑块中空闲的存储 单元内,以及在第二存储区中保存表记录的位置信息;
或者,当所述操作需要从数据库查询表记录时,根据该数据库表和查询条 件中的字段查询第一存储区中的描述信息确定对应的索引信息,并且,从第二 存储区查询确定的索引信息和根据查询结果从第三存储区中相应的存储单元 读取表记录,选择满足所述查询条件的表记录;
或者,当所述操作需要从数据库表删除指定的表记录时,从第三存储区释 放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与指定的表记录相关的索引信息。
一种访问内存数据库系统的装置,所述装置包括
逻辑块选择单元,用于在访问内存数据库系统的操作需要向数据库表中添 加表记录时,根据该数据库表查询第一存储区中数据库的描述信息以选择一个 逻辑块,该逻辑块包含的存储单元大小与所述表记录的大小相匹配;
写操作单元,用于将表记录写入选择的逻辑块中空闲的存储单元内,以及 将存储表记录的位置信息写入到第二存储区的索引信息中。
索引信息查询单元,用于在访问内存数据库系统的操作需要从数据库查询 表记录时,根据该数据库表和查询条件中的字段查询第一存储区中的描述信息 确定对应的索引信息;
索引单元,用于从第二存储区查询所述索引信息查询单元确定的索引信息 和根据查询结果从第三存储区中相应的存储单元读取表记录,并选择满足所述 查询条件的表记录;
释放单元,用于在所述操作需要从数据库表删除指定的表记录时,从第三 存储区释放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与 指定的表记录相关的索引信息。
一种内存数据库中建立多索引的方法,所述方法包括步骤
在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应 的特征值表;
将数据库表的表记录存储到存储单元后,在该数据库表的各索引字段下获 取所述表记录中对应的键值,并根据所述键值得到相应的特征值;
利用各特征值分别查询相应的索引字段所关联的特征值表,若特征值表中 存在该特征值,则在该特征值关联的索引树上增加包含表记录位置信息的节 点,否则,将所述特征值加入特征值表并创建与该特征值关联的并包含表记录 位置信息的节点。
一种在内存数据库中建立多索引的装置,所述装置包括定义模块,用于在数据库表中定义多个索引字段,并在第二存储区中建立
各索引字段对应的特征值表;
第一模块,用于根据表记录所在数据库表查询第一存储区中相应的描述信 息,获得该数据库表预先定义的多个索引字段;
第二模块,用于从所述表记录中提取各索引字段对应的键值,并获得各键 值对应的特征值;
第三模块,用于根据各特征值分别查询第二存储区中相应的特征值表,若 特征值表中存在该特征值,则在该特征值关联的索引树上增加包含表记录位置 信息的节点,否则,将特征值加入特征值表和创建与该特征值关联的包含表记 录位置信息的节点。
一种利用多索引查询表记录的方法,包括步骤
根据需要操作的数据库表和索引字段查询数据库表的描述信息确定需要 查询的特征值表;
根据查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该 特征值关联的索引树;
搜索所述索引树中的节点和从节点关联的存储单元读取表记录,并将表记 录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表 记录。
一种利用多索引查询表记录的装置,包括
特征值表确定模块,用于根据需要操作的数据库表和字段查询第一存储区 确定需要在第二存储区中查询的特征值表;
特征值表查询模块,用于根据查询条件中的键值获得对应的特征值并查询 确定的特征值表,得到该特征值关联的索引树;
索引模块,用于搜索所述索引树中的节点和从第三存储区读取节点关联的 表记录,将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所 述查询条件的表记录。本发明实施例中,在共享内存中建立存储数据库的描述信息的第 一存储 区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储 区,通过描述信息确定索引信息,通过索引信息确定表记录,因而实现了内存 数据库表结构与数据存储结构的松耦合,可以灵活创建和管理内存数据库。在 第三存储区分配与数据库表中表记录的大小相匹配的存储单元,因此,可以实 现不同长度的表记录的灵活存储,从而降低共享内存的资源占用。


图1A为本发明实施例中内存数据库的存储空间示意图1B为本发明实施例中内存数据库系统的结构示意图2为本发明实施例中存储单元与物理块的关系示意图3A为本发明实施例中存储单元的存储结格式意图3B为本发明实施例中空闲存储单元的链表结构示意图4A为本发明实施例中创建内存数据库的流程图4B为本发明实施例中创建内存数据库的装置结构示意图4C为本发明实施例中内存数据库访问共享内存空间的关系示意;
图5A为本发明实施例中访问内存数据库的流程图5B为本发明实施例中动态扩充物理块的示意图6为本发明实施例中多索引结构的示意图7为本发明实施例中叶子节点树的结构示意图8A、图8B、图8C为本发明实施例中访问内存数据库的装置的相关结 构示意图9为本发明实施例中创建多索引的流程图10为本发明实施例中利用多索引查询表记录的流程图11为本发明实施例中创建多索引的装置的结构示意图12为本发明实施例中利用多索引查询表记录的装置的结构示意图。
具体实施例方式
在本发明实施例中,根据内存数据库在共享内存中的存储空间的功能,将
所述存储空间划分为第一存储区、第二存储区和第三存储区,如图1A所示。 其中,第一存储区存储数据库的描述信息(或称数据库系统定义信息),第二 存储区存储用于定位表记录的索引信息,第三存储区用于存储数据库表的表记 录。第一存储区、第二存储区和第三存储区在物理空间上可以连续分布,也可 以是非连续分布;同样的,第一存储区、第二存储区和第三存储区中的每个存 储区在物理空间上可以是连续分布的,也可以是非连续分布的。
本实施例中一种内存数据库系统的结构如图1B所示,包括通信接口 10、 创建装置11、写操作装置12、查询操作装置13和释放操作装置14;为了能够 动态的扩充存储空间,内存数据库系统还进一步包括一个扫描装置15。
通信接口 10作为数据库与外部应用进程之间的接口,用于接收访问数据 库的各种消息和输出操作结果,通信接口可以包括操作界面和/或应用编程接口 API;所述的操作包括增加记录、删除记录、查询记录和编辑记录等;创建装 置11在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位 表记录的索引信息的第二存储区和存储表记录的第三存储区,以及将数据库的 描述信息保存到所述第一存储区;写操作装置12在访问数据库的操作需要向 数据库表中添加表记录时,查询第一存储区中的描述信息以选择包含的存储单 元大小与所述表记录的大小匹配的一个逻辑块,然后将表记录写入选择的逻辑 块中空闲的存储单元内,以及将表记录的位置信息写入到第二存储区的索引信 息中;查询操作装置13在访问数据库的操作需要从数据库查询表记录时,查 询第二存储区的索引信息和根据查询结果从第三存储区中相应的存储单元读 取表记录,并选择满足查询条件的表记录;释放操作装置14在访问数据库的 操作需要删除表记录时,通过查询操作装置13定位到第三存储区中存储指定 的表记录的存储单元,释放该存储单元并从第二存储区中删除该表记录的索引 信息;扫描装置15扫描逻辑块中空闲的存储单元,如果发现逻辑块中空闲的存储单元小于阈值时,产生提示信息,由网管通过手动方式为逻辑块分配物理
块,以保证内存数据库需要的存储空间;在保证扫描装置15能够获得共享内 存空间的场景下,也可以由扫描装置15为该逻辑块分配一个物理块并将其关 联到所述逻辑块。
参阅图2所示,第三存储区中包括与数据库表的表记录大小匹配的存储单 元Slot,该存储单元是内存数据库的最小存储单元,每个存储单元存储一条数 据库表记录。大小(即存储容量)相同并且在物理空间上连续的存储单元构成 一个物理块Extent,每个物理块包含的存储单元数量可以不同; 一个物理块 Extent或多个相同的物理块Extent关联(或称绑定)成一个逻辑块Chunk。在 本实施例中,物理块是绑定到逻辑块的基本单元。
在一个实例中,第二存储区中也可以采用类似于第三存储区的存储结构, 大小(即存储容量)相同并且在物理空间上连续的存储单元构成一个物理块 Extent,每个物理块包含的存储单元数量可以不同; 一个物理块Extent或多个 相同的物理块Extent关联(或称绑定)成一个逻辑块Chunk。这样, 一个表记 录的位置信息即可存储在一个存储单元Slot中。将第二存储区和第三存储区域 的存储结构统一,可以简化管理和维护。在另一实例中,第二存储区域采用普 通的存储结构,即按现有存储方式存储信息,例如,分配在物理空间上连续并 且大小统一的存储单元存储表记录的位置信息。
在本实施例中,根据实际需要可以限定组成一个逻辑块的最大物理块数 量,例如, 一个逻辑块最多关联40个物理块。相应的,也可以设置物理块支 持的寻址位数,以确定每个物理块包含存储单元的最大数量;例如,每个物理 块支持24位寻址空间,则每个物理块最多包括16777216个(224)存储单元。
第一存储区中的数据库的描述信息包含了实现数据库功能需要的信息,例 如,系统锁、存储空间的描述信息、数据库表的描述信息等;其中,系统锁在 使用数据库维护进程对数据库中的数据库表进行调整(如备份和恢复表记录过 程或调整表记录间的关联关系)时加载到相应的数据库表中,以防止其他应用进程访问该数据库表。存储空间的描述信息包含逻辑块的数量、各逻辑块包含
的物理块数量、物理块包含的存储单元数量和存储单元的大小(即存储容量); 数据库表的描述信息包含表锁、表索引定义信息等,表索引定义信息包含构成 索引的字段,各索引在第二存储区中对应的索引信息和索引锁等,其中的表锁 用于防止两个进程同时对同 一条记录进行修改,表索引锁可防止索引不被其他 进程操作。
第二存储区中的索引信息可以采用多种索引类型,例如,数组、索引树等。 索引树也可以釆用多种树结构,例如,二叉树,平衡树,以及特征值表与叶子 节点树。在特征值与叶子节点树结构中,索引字段对应的键值的特征值构成特 征值表(特征值表中的特征值不同),每个特征值对应一个叶子节点树,叶子 节点树由存储表记录位置信息的叶子节点构成,通过遍历树上的叶子节点定位 到相应的存储单元。所述特征值可以根据需要选择各种算法得到,典型的,采 用哈希Hash运算。
通过数组类型组织索引信息时,可采用直线整数线性索引方式,该索引方 式下索引字段采用4字节大小的整数(索引字段的键值连续并唯一),并提供 两个整数型的参数,第一个整数代表索引字段4定值的最小值,第二个整数代表 索引字段键值的最大值;内存数据库系统创建索引时直接把索引字段建成一个 没有哈希冲突的整数数组,数据组中的每个元素指向一个存储表记录的存储单 元。由于各键值是唯一的,所以可以通过直接访问函数进行快速存取。通过哈 希表与叶子节点树组织索引信息时,可采用二进制字节串索引方式,该方式将 被索引字段当成一个二进制字节串,并对该二进制字节串进行哈希Hash运算, 该索引方式提供一个表示表大小的整数,该整数影响着哈希表中哈希值散列的 效果。在本实施例中以哈希表与叶子节点树记录表记录位置信息的结构为例进 行说明。
第三存储中的存储单元为内存数据库中的最小存储单位,为了方便维护和 管理, 一个存储单元存储的信息可由多个字段构成。如图3A所示, 一个存储单元包括头信息字段和数据字段。当存储单元存储表记录后,数据字段则存储 表记录内容,头信息字段可以描述表记录的所属数据库表的信息和该表记录的 实际长度等。头信息字段占用的字节数根据需要存储的信息量预先确定,例如,
头信息字段占用8个字节。当存储单元为空闲时,头信息可以用于存放当前逻 辑块中另一个空闲存储单元的位置信息,该位置信息可以包括逻辑块标识、物 理块标识和存储单元标识;这样, 一个逻辑块内所有空闲存储单元通过自身的 头信息连接成一个空闲链表。当需要从逻辑块中申请存储单元时,则从该空闲 链表中的表头位置取出一个存储单元;当释放一个表记录时,就将对应的存储 单元添加到空闲链表的尾部。在这种空闲链表结构中,指向空闲存储单元的指 针始终指向链表的表头位置的空闲存储单元,由于访问和释放存储单元的时间 和周期不同,所以该空闲链表在物理空间上可能不是连续的。如图3B所示的 一实例中, 一个逻辑块Chunk中的物理块有n个物理块Extent 1至Extent n, 物理块Extent 1和物理块Extent n中有空闲存储单元,这些空闲存储单元形成 空闲链表。
在第三存储区采用逻辑块、物理块和存储单元存储结构后,内存数据库的 数据库表存储区域的分配可以采用多种方式。在一个实施例中,采用表绑定逻 辑块方式分配数据库表的存储区域,即,将一个数据库表映射到指定的一个或 多个逻辑块中,当在数据库表中增加表记录时,每次在该数据库表绑定的逻辑 块中寻找空闲并且大小与表记录匹配的存储单元以存放指定的表记录。在另一 个实施例中,通过表动态分配逻辑块方式分配数据库表的存储区域,即,不固 定数据库表绑定的逻辑块,当在数据库表中增加表记录时,根据待存储表记录 的大小选择包含的存储单元大小与表记录大小匹配的逻辑块,然后在逻辑块中 选择存储单元存储表记录;如果存在多个逻辑块可供选择时,则从这些逻辑块
中选择空闲空间最大的一个逻辑块存储表记录,以平衡使这些逻辑块中被占用 的存储单元的数量。
由于一个数据库表可以关联到多个逻辑块,而且不同的逻辑块包含的存储单元大小可以不相同,例如,绑定在同一数据库表上的逻辑块A、 B;其中逻 辑块A包含的存储单元的大小为20字节,而逻辑块B包含的存储单元大小为 25字节,因此,对于带有变长字段的表记录可以根据实际大小选择匹配的逻辑 块,从而能够实现按表记录大小分配表存储空间,节约共享内存中数据库表的 存储资源。
参阅图4A所示,本实施例中创建内存数据库的处理流程如下 步骤400、确定数据库表结构(如,数据库表包括的字段)及各数据库表 中表记录的大小。
步骤401、在共享内存中申请存储区,并在申请到的存储区中建立存储数 据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区
和存储表记录的第三存储区。
步骤402、将数据库的描述信息保存到所述第一存储区。所述数据库的描 述信息包括各数据库表的描述信息,所述数据库表的描述信息包括各数据库表 关联的所述逻辑块和各逻辑块中存储单元大小。
相应的, 一种创建内存数据库的装置如图4B所示,包括确定单元40、 创建单元41和保存单元42;其中,确定单元40确定数据库表结构及各数据库 表中表记录的大小;创建单元41根据所述确定单元40的得到的结果,在共享 内存中建立所述第一存储区、第二存储区和第三存储区;保存单元42将数据 库的描述信息保存到所述第 一存储区。
内存数据库创建后,内存数据库应用编程接口 API实例化时会产生一个进 程内的内存数据库地址映射数据结构ChunkMap,用于保存所有物理块映射到 本进程后的虚拟内存地址BaseAddr,同时也记录下与逻辑块的对应关系。当内 存数据库API需要定位指定的表记录或空闲的存储单元时,通过逻辑块标识 Chunkld和物理块标识Extentld,查找到物理块映射到本进行的虚拟内存地址 BaseAddr,然后根据存储单元的标识Slot Id结合存储单元大小SlotSize计算出 相对于虛拟内存地址BaseAddr的偏移量Offset,然后得到存储单元真实的进程虚拟内存地址RecPtr,进行数据访问。这样,实现了内存数据库程序对共享内 存的访问,其关系如图4C所示。
本实施例中,每个逻辑块具有一个时间戳,逻辑块中增加物理块时更新该 时间戳。内存数据库的应用进程根据逻辑块的时间戳确定已映射到本应用进程 的逻辑块与第三存储区中相应的逻辑块是否同步,如果不同步则重新进行映 射,以保证每个应用进程都可以访问到最新的内存数据库的存储空间。
访问内存数据库的操作类型包括对表记录的查询操作、修改(更新)操作、 添加操作和删除操作,这些操作可归结为查询表记录、添加表记录和删除表记 录三种操作中的一种操作或多种操作。例如,删除操作和修改操作均要先查询 相应的表记录,然后再执行后续的操作。为了防止数据库的应用进程读到脏数 据,对于修改表记录操作,可以在查询到相应的表记录后,先添加修改后的表 记录,然后再删除原来的表记录。
参阅图5A所示,本实施例中,访问内存共享数据库的主要流程如下
步骤500、内存数据库接收访问内存数据库的请求消息。
步骤501、确定所述访问的操作类型,若该操作需要向数据库表中添加表 记录,则进行步骤502、若该操作需要定位表记录,则进行步骤504,若该操 作需要删除指定的表记录,则进行步骤506。
步骤502、根据需要操作的数据库表查询所述第一存储区中的描述信息, 选择包含的存储单元大小与所述表记录的大小匹配的一个逻辑块。
步骤503、将所述表记录写入选择的逻辑块中空闲的存储单元内,以及将 存储表记录的位置信息记录到所述第二存储区的索引信息中,并结构该写入处 理。
步骤504、根据需要操作的数据库表和查询条件中的字段查询第一存储区 中的描述信息确定对应的索引信息。
步骤505、从第二存储区查询确定的索引信息和根据查询结果从第三存储 区中相应的存储单元读取表记录,选择满足所述查询条件的表记录,并结束该次查询处理。
步骤506、释第三存储区中存储表记录的单元和从第二存储区中删除该表 记录的索引信息,并结束该删除处理。
在步骤502中,如果逻辑块中没有空闲的存储单元,则可以进行动态扩充, 即申请分配一个物理块。 一个动态扩充空间的处理流程如图5B所示
步骤550、根据物理块的大小从操作系统申请相应大小的共享内存空间。
步骤551、将申请到的物理块绑定到相应的逻辑块。
步骤552、更新第一存储区中存储空间的描述信息,如,该逻辑块的时间 戳,物理块信息和存储单元信息等。
步骤553、构建逻辑块中存储单元的空闲链表。
在本实施例中,内存数据库的数据库表采用多索引方式以提高查询速度和 提高数据库的整体性能,每个索引采用哈希值表与叶子节点树方式(当然也可 以采用其他运算得到的特征值表)。每个数据库表具有多个索引,数据库表的 一个索引可以包含该数据库表中的一个索引字段,也可以包含多个索引字段。 例如,对于一个具有A(如"姓名"字段)、B、 C、 D、 E、 F6个字段的数据 库表可以有3个索引,第一个索引包含A字段,第二个索引包含B、 C、 D字 段,第三个索引包含E、 F字段。当然,根据需要可以建立4个索引或更多索 引;而根据需要,其中某些字段也可以不用于建立索引。在每个索引下,表记 录对应于索引字段的键值Key (—个索引由多个索引字段组成时,键值是指各 索引字段的键值按预定的顺序组合成的键值。)通过哈希运算后得到的哈希值 构成一个哈希表,其中的每个哈希值关联到一个由存储表记录位置信息的叶子 节点构成的叶子节点树,同一叶子节点树上各叶子节点对应的表记录在对应的 索引字段下,其键值产生哈希碰撞,也就是说虽然其键值不同但其经哈希运算 后得到相同的哈希值,参阅图6所示。
采用多索引方式后,第一存储区中表索引定义信息具体包括使用一个名 称描述一个字段或几个字段的索引名、索引标识(如一个表中所有索引的编号)、索引属性(如键值是否唯一、索引方法和重键排序方法等)、索引表大小、
索引字段(包括字段在记录中的偏移量和长度的数组)、索引参数(如哈希Hash 表长、最大值、该索引所在的位置信息)、重键排序字段和索引数据叶子节点 所在逻辑块标识等。
在第二存储区中, 一个哈希表可以保存在一个存储单元中,由于在同一个 存储单元查询哈希值,能够进一步提高索引速度和数据库的整体性能。叶子节 点树上的叶子节点可以采用相同大小的存储单元存储, 一个索引树上的叶子节 点可以存储于同 一个逻辑块包含的存储单元中,也可以分别存储在多个逻辑块 包含的存储单元中。
参阅图7所示,在一个哈希值关联到的一个叶子节点树上具有第一关联关 系(图7中的横向叶子节点)和第二关联关系(图7中的纵向叶子节点)。在 同一索引下,第一关联关系中的叶子节点所对应的表记录的键值不同,第二关 联关系中的叶子节点所对应的表记录的键值相同,而哈希表中每个非零的哈希 值指向叶子节点树上第一关联关系中的头叶子节点。在叶子节点树上,每个叶 子节点可以有三个指针,其中,第一个指针用于指向第一关联关系中的后继叶 子节点,以形成一个链表,第二个指针用地指向第二关联关系中的后继叶子节 点,以形成另一个链表,第三个指针则用于指向第三存储区中存储表记录的存 储单元(图7中仅示出了哈希值1和哈希值m关联的叶子节点树,其他哈希值
关系的叶子节点树未示出)。
相应的, 一种访问内存数据库的装置如图8A所示,包括逻辑块选择单 元81、写操作单元82、索引信息查询单元83、索引单元84和释放单元85。 其中,逻辑块选择单元81在访问内存数据库系统的操作需要向数据库表中添 加表记录时,根据数据库表查询第一存储区中的描述信息来选择一个逻辑块, 该逻辑块包含的存储单元大小与待在座的表记录的大小相匹配;如,对于前述 包括头信息字段和数据字段的存储单元,相匹配是指数据字段大小与表记录大 小一致;写操作单元82将表记录写入逻辑块选择单元81选择的逻辑块中空闲的存储单元内,并将存储表记录的位置信息(即存储单元的地址)写入到所述
第二存储区的索引信息中。索引信息查询单元83在访问内存数据库系统的操 作需要从数据库查询表记录时,根据该数据库表和查询条件中的字段查询第一 存储区中的描述信息来确定对应的索引信息;索引单元84从第二存储区查询 所述索引信息查询单元83确定的索引信息和根据查询结果从第三存储区中相 应的存储单元读取表记录,并选择满足所述查询条件的表记录;释放单元85 在所述操作需要从数据库表删除指定的表记录时,从第三存储区释放存储所述 指定的表记录的存储单元,并从第二存储区中删除所述与指定的表记录相关的 索引信息;所述指定的表记录可以是访问操作请求消息中指定的记录,如果访 问操作请求消息中是删除记录的条件,则先由索引信息查询单元83和索引单 元84定位到满足条件的表记录,然后再删除。
写操作单元82可包括第一存储操作模块820和第二存储操作模块821; 第 一存储操作;溪块820从选择的一个逻辑块中获取一个空闲的存储单元,并将 待存储的表记录存储到该空闲的存储单元内;第二存储操作模块821将存储表 记录的位置信息记录到第二存储区的索引信息中。
在采用多索引方式的实施例中,写操作单元82中第二存储操作模块821 如图8B所示,包括第一模块8210、第二模块8211和第三模块8212;其中, 第一模块8210根据表记录所在数据库表查询第一存储区中相应的描述信息, 获得该数据库表预先定义的多个索引字段;第二模块8211从所述表记录中提 取各索引字段对应的键值,并获得各键值对应的特征值;第三模块8212根据 各哈希值分别查询第二存储区中相应的哈希值表,若特征值表中存在该哈希 值,则在该哈希值关联的索引树上增加包含表记录位置信息的节点,否则,将 哈希值加入哈希值表和创建与该哈希值关联的包含表记录位置信息的节点。其 中,在包含第一关联关系和第二关联关系的叶子节点树上,所述第三模块8212 在索引树上增加包含表记录位置信息的节点时,先在第一关联关系中搜索键值 相同的表记录关联的节点,若未搜索到,则在第一关联关系上增加包含表记录位置信息的节点,若搜索到,则在该节点所在的第二关联关系上增加包含表记 录位置信息的节点。
在第二关联关系上增加包含表记录位置信息的节点,可以按一定顺序进行
排序插入节点,该一定顺序可以有多种,例如按表记录插入的先后正序、按 表记录插入的先后倒序、按当前索引的排序字段的大小正序或者按当前索引的 排序字段的大小倒序。
在采用多索引方式时,图8A所示索引信息查询单元83和索引单元84的 一种结构如图8C所示,索引信息查询单元83包括特征值表确定模块830,用 于根据需要操作的数据库表和字段查询第一存储区确定需要在第二存储区中 查询的哈希值表;索引单元84包括特征值表查询模块840和索引模块841; 其中,特征值表查询模块840根据所述查询条件中的键值获得对应的哈希值, 并查询特征值表确定模块830确定的哈希值表,得到该哈希值关联的叶子节点 树;索引模块841搜索所述索引树中的节点和从第三存储区读取节点关联的表 记录,将表记录中对应于索引字段的键值与所述查询条件比较,得到满足查询 条件的表记录。由于在表索引定义信息中包括索引字段在表记录中的偏移量, 因此,索引模块841在选择满足查询条件的表记录时,根据所述偏移量从读取 的记录中选择相应的键值与查询条件进行比较,其中的查询条件一般是该索引 字段中健值需要满足的条件,如,对于一个数据库表,对于其中的索引字段"性 别"而言,查询条件是性别="男",即键:值为"男";而对于其中的索引字 段"员工号,,而言,查询条件可以是员工号>123450。索引模块841在包含 第一关联关系和第二关联关系的叶子节点树上搜索节点时,先在第一关联关系 中搜索键值相同的表记录关联的节点,若未搜索到,则停止搜索,若搜索到, 则在搜索到的节点所在的第二关联关系上依次遍历各节点。
在一个具体实例中,在第二存储区中创建多索引的主要处理流程如图9所 示,包括步骤
步骤900、在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的哈希值表。在初始创建时,哈希值表为空。
步骤901、将数据库表的表记录存储到存储单元后,在该数据库表的各索 引字段下获取所述表记录中对应的键值。
步骤902、对各键值进行哈希运算,得到相应的哈希值。
步骤903、利用各特征值分别查询相应的索引字段所关联的哈希值表,若 特征值表中存在相应的哈希值,则进行步骤904,否则,进行步骤905。
步骤904、在哈希值关联的索引树上增加包含表记录位置信息的节点,并 结束该次操作。
步骤905、将哈希值加入哈希值表,创建与该哈希值关联的并包含表记录 位置信息的节点。
步骤904中,在包含第一关联关系和第二关联关系的叶子节点树上搜索节 点上增加包含表记录位置信息的节点时,先在第一关联关系中查询键值相同的 表记录关联的节点,若未查询到,则在第一关联关系上增加包含表记录位置信 息的节点,若查询到,则在该节点所在的第二关联关系上增加包含表记录位置 信息的节点。
当索引字段对应的键值与叶子节点树中某节点关联的索引字段对应的键
值相同时,可以按顺序在第二关联关系中进行排序插入节点,该顺序可以有多
种,例如按表记录插入的先后正序、按表记录插入的先后倒序、按当前索引
的排序字段的大小正序或者按当前索引的排序字段的大小倒序。
根据第二存储区中建立的多索引查询表记录的处理流程如图10所示,包
括步骤
步骤1000、根据需要操作的数据库表和索引字段查询数据库表的描述信息 确定需要查询的哈希值表。
步骤1001、对查询条件中的键值进行哈希运算获得对应的哈希值。
步骤1002、查询确定的哈希值表得到对应的索引树。
步骤1003、搜索所述索引树中的节点和从节点关联的存储单元读取表记录,并将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所述 查询条件的表记录。
在一个具体实例中创建多索引的装置如图ll所示,包括定义模块1100、 第一模块1101、第二模块1102和第三模块1103,其中,定义模块1100在数 据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的特征值
表;第一模块iioi根据表记录所在数据库表查询第一存储区中相应的描述信
息,获得该数据库表预先定义的多个索引字段;第二模块1102从所述表记录 中提取各索引字段对应的键值,并对各键值进行哈希运算获得各键值对应的哈 希值;第三模块1103根据各哈希值分别查询第二存储区中相应的哈希值表, 如果该哈希值表中存在相应的哈希值,则在该哈希值关联的索引树上增加包含 表记录位置信息的节点,否则,将哈希值加入哈希值表和创建与该哈希值关联 的包含表记录位置信息的节点。
相应的,利用多索引查询表记录的装置如图12所示,包括特征值表确 定模块1200、特征值表查询模块1201和索引模块1202,其中,特征值表确定 模块1200根据需要操作的数据库表和字段查询第一存储区确定需要在第二存 储区中查询的哈希值表;特征值表查询模块1201根据查询条件中的键值获得 对应的特征值并查询确定的特征值表,得到该特征值关联的索引树;索引模块 1202搜索所述索引树中的节点和从第三存储区读取节点关联的表记录,将表记 录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表 记录。
本实施例中,表记录的查询功能借助于表的多索引结构实现,在通过多索 引进行查询时可以保存一个游标结构到进程空间,该游标结构用于保存当前叶 子节点的位置和当前叶子节点所在第二索引关系中第一个叶子节点的位置,采 用游标方式实际上并没有取出全部数据,而是指向分支节点的标识指针,这样 能够大幅度提高查询的速度。
在使用内存数据库应用编程接口 API提供的查询函数查询表记录时,可以预先设置一个内部过滤条件对表记录进行过滤查询,该过滤条件可以采用 一个 三层数据结构,其中,最底层定义一个原子过滤条件,每个原子过滤条件通过 记录中的偏移量和长度指定一个要判断的字段,然后指定一个运算符,再指定
运算的参数,即指定一个Operator ( field, para, [, para2])这样的判断条件;
多个原子过滤条件进行"与"运算后组成一个第二层过滤条件;多个第二层过
滤条件进行"或"运算后组成了第三层过滤条件。原子过滤条件和第二层过滤
条件的最大数量可以进行限制,例如,原子过滤条件最多为8个,第二层过滤
条件最多为8个。 一个过滤条件的数据结构定义的实例如下 typedef struct
int or_item_num; 〃表示一个结构中有多少个"或"关系 struct
int and_item—num; 〃表示一个结构中有多少个"与"关系 struct
int field—offset; 〃定义字段偏移量 int field—length; 〃定义字段长度 int operator; 〃定义操作 struct
int para—length; 〃参数长度
void *paraptr; 〃定义用于指向条件中的值的指针 } op_para[2]; //定义保存运算参数值的数组 } and—items[8]; 〃定义8个比较单元,比较单元之间的关系为"与"关系 } or—items[8]; 〃定义8个比较单元,比较单元之间的关系为"与"关系 } t一Filter;
在本实施例中,可进一步对运算符和相应的参数进行定义,以使在进行条 件判断时能够得到参数返回的值。例如
大于运算如果过滤条件的字段与参数进行二进制比较后,字段大于参数时返回真;
大于等于运算如果过滤条件的字段与参数进行二进制比较后,字段大于 等于参数时返回真;
等于运算如果过滤条件的字段与参数进行二进制比较后,字段等于参数 时返回真;
不等于运算如果过滤条件的字段与参数进行二进制比较后,字段不等于 参数时返回真;
小于等于运算如果过滤条件的字段与参数进行二进制比较后,字段小于 等于参数时返回真
小于运算如果过滤条件的字段与参数进行二进制比较后,字段小于参数 时返回真
between运算如果过滤条件的字段与参数进行二进制比较后,字段大于 等于参数1小于等于参数2时返回真。
本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分步骤 是可以通过程序指令相关的硬件来完成,所述的程序可以存储于一计算机可读 取存储介质中,该程序在执行时,可执行图4A、图5A、图5B、图9和图10 所示流程中包含的处理步骤。
本实施例中提供的内存数据库实现了内存数据库表结构与数据存储结构 的松耦合,在存储表记录时,通过选取与表记录大小相匹配的逻辑块可以实现 同一个表的变长记录的存储模式,降低了共享内存中表空间资源的占用;本实 施例中动态扩充表空间的方式保证了内存数据库表结构与数据存储结构之间 不存在耦合关系,并且,在系统通过一个内存数据库进程动态扩充表空间时, 其他内存数据库应用进程更新本进程内逻辑块的时间戳与系统定义区中该逻 辑志的时间戳一致,保证了内存空间映射的同步。
本实施例提供的内存数据库能够满足对数据进行大量访问的实时性要求, 可应用在实时要求较高的系统中,例如,在一个实时计费系统中采用本实施例提供的内存数据库来提高系统的实时响应性能,数据库存储用户的相关信息及 使用业务的计费信息。
明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求 及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
权利要求
1、一种内存数据库系统,其特征在于,包括通信接口,用于接收请求操作数据库的各种消息和输出操作结果;创建装置,用于在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,以及将数据库的描述信息保存到所述第一存储区,其中,所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一个物理块或多个相同的物理块关联成一个逻辑块;写操作装置,用于在所述操作需要向数据库表中添加表记录时,查询所述描述信息以选择包含的存储单元大小与所述表记录的大小匹配的一个逻辑块,以及将表记录写入选择的逻辑块中空闲的存储单元内和将表记录的位置信息记录到第二存储区中;查询操作装置,用于在所述操作需要从数据库查询表记录时,查询第二存储区域的索引信息和根据查询结果从第三存储区中相应的存储单元读取表记录,并选择满足查询条件的表记录;释放操作装置,用于在所述操作需要从数据库表删除指定的表记录时,从第三存储区释放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与指定的表记录相关的索引信息。
2、 如权利要求1所述的内存数据库系统,其特征在于,还包括 扫描装置,用于扫描逻辑块中空闲的存储单元,并且在发现逻辑块中空闲的存储单元小于阈值时,产生提示信息或直接为该逻辑块分配一个物理块并将其关联到所述逻辑块。
3、 如权利要求1所述的内存数据库系统,其特征在于,所述第二存储区 包括与一条索引信息大小匹配的存储单元,相同大小并且在物理空间上连续的存储单元构成一个物理块, 一个物理块或多个相同的物理块关联成一个逻辑 块。
4、 如权利要求1所述的内存数据库系统,其特征在于,所述创建装置包括确定单元,用于确定数据库表结构及各数据库表中表记录的大小; 创建单元,用于在共享内存中建立所述第一存储区、第二存储区和第三存 储区;保存单元,用于将数据库的描述信息保存到所述第一存储区,所述数据库 的描述信息包括各数据库表的描述信息。
5、 如权利要求1所述的内存数据库系统,其特征在于,所述查询装置包括索引信息查询单元,用于在所述操作需要从数据库表查询表记录时查询第 一存储区中的描述信息确定索引信息;索引单元,用于从第二存储区查询确定的索引信息和根据查询结果从第三 存储区中相应的存储单元读取表记录,并选择满足所述查询条件的表记录。
6、 如权利要求1所述的内存数据库系统,其特征在于,所述写操作装置 包括逻辑块选择单元,用于在所述操作需要向数据库表中添加表记录时,根据 该数据库表查询所述第 一存储区中的描述信息以选择一个逻辑块,该逻辑块包含的存储单元大小与所述表记录的大小相匹配;写操作单元,用于将需要添加的表记录写入选择的逻辑块中空闲的存储单 元内,以及在第二存储区中保存表记录的位置信。
7、 如权利要求6所述的内存数据库系统,其特征在于,所述写操作单元 包括第一存储操作模块,用于从所述一个逻辑块中获取一个空闲的存储单元, 并将待存储的表记录存储到该空闲的存储单元内;第二存储操作模块,用于在第二存储区的索引信息中记录所述表记录的位 置信息。
8、 如权利要求7所述的内存数据库系统,其特征在于,所述第二存储操 作模块包括第一模块,用于根据表记录所在数据库表查询第一存储区中相应的描述信 息,获得该数据库表的多个索引;其中,每个索引包含一个或多个索引字段, 在每个索引下根据各表记录的键值所得到的特征值在第二存储区中分别形成 与索引关联的一个特征值表,在同 一索引下具有相同特征值的表记录的位置信 息分别存储在与该特征值关联的一个叶子节点树的叶子节点上;第二模块,用于从所述表记录中提取在各索引下对应的键值,并获得各键 值对应的特征值;第三模块,用于根据各特征值分别查询第二存储区中相应的特征值表,若 特征值表中存在该特征值,则在该特征值关联的叶子节点树上增加包含表记录 位置信息的叶子节点,否则,将特征值加入特征值表和创建与该特征值关联的 包含表记录位置信息的叶子节点。
9、 如权利要求8所述的内存数据库系统,其特征在于,所述索引信息查 询单元包括特征值表确定模块,用于根据需要操作的数据库表和字段查询第一存储区 确定需要在第二存储区中查询的特征值表; 所述索引单元包括特征值表查询模块,用于根据所述查询条件中的键值获得对应的特征值并 查询确定的特征值表,得到该特征值关联的叶子节点树;索引模块,用于搜索所述叶子节点树中的叶子节点和从第三存储区读取节 点关联的表记录,将表记录中对应于索引的键值与所述查询条件比较,得到满 足该查询条件的表记录。
10、 如权利要求9所述的内存数据库系统,其特征在于,所述数据库的描述信息中包括索引字段在表记录中的偏移量;所述索引模块在选择满足查询条 件的表记录时,根据所述偏移量从读取的记录中选择相应的键值与查询条件进 行比较。
11、 如权利要求9所述的内存数据库系统,其特征在于,在一个叶子节点 树中,在索引下具有不同键值的记录对应的叶子节点形成第一关联关系,具有 相同键值的记录对应的叶子节点形成第二关联关系。
12、 如权利要求11所述的内存数据库系统,其特征在于,所述第三模块 在叶子节点树上增加包含表记录位置信息的叶子节点时,先在第一关联关系中 搜索键值相同的表记录关联的叶子节点,若未搜索到,则在第一关联关系上增 加包含表记录位置信息的叶子节点,若搜索到,则在该叶子节点所在的第二关 联关系上增加包含表记录位置信息的叶子节点。
13、 如权利要求11所述的内存数据库系统,其特征在于,所述索引模块 在搜索叶子节点树中的叶子节点时,先在第一关联关系中搜索键值相同的表记 录关联的叶子叶子节点,若未搜索到,则停止搜索,若搜索到,则在搜索到的 节叶子点所在的第二关联关系上依次遍历各叶子叶子节点。
14、 如权利要求8-13任一项所述的内存数据库系统,其特征在于,所述 特征值为哈希值,相应的,所述特征值表为哈希表。
15、 一种创建内存数据库的方法,其特征在于,包括步骤 确定数据库表结构及各数据库表中表记录的大小;在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表 记录的索引信息的第二存储区和存储表记录的第三存储区,其中,所述第三存 储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记 录,相同大小并且在物理空间上连续的存储单元构成一个物理块, 一个物理块 或多个相同的物理块关联成一个逻辑块;将数据库的描述信息保存到所述第一存储区,所述数据库的描述信息包括 各数据库表的描述信息。
16、 如权利要求15所述的方法,其特征在于,所述第二存储区包括与一 条索引信息大小匹配的存储单元,相同大小并且在物理空间上连续的存储单元构成一个物理块, 一个物理块或多个相同的物理块关^:成一个逻辑块。
17、 如权利要求15所述的方法,其特征在于,所述存储单元包括头信息 字段和数据信息字段;当该存储单元被表记录占用时,该存储单元的头信息字 段保存该表记录所属表的信息和该表记录的实际长度;当存储单元空闲时,该 存储单元的头信息字段保存同一逻辑块中的另一个空闲存储单元的位置信息, 使该逻辑块中的空闲存储单元形成链表。
18、 如权利要求17所述的方法,其特征在于,每个所述的逻辑块具有一 个时间戳,所述逻辑块中增加物理块时更新所述时间戳;所述数据库的应用进 程根据所述时间戳确定已映射到本应用进程的逻辑块与第三存储区中相应的 逻辑块是否同步。
19、 一种创建内存数据库的装置,其特征在于,包括 确定单元,用于确定数据库表结构及各数据库表中表记录的大小; 创建单元,在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,其中, 所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数 据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一 个物理块或多个相同的物理块关^:成一个逻辑块;保存单元,用于将数据库的描述信息保存到所述第一存储区,所述数据库 的描述信息包括各数据库表的描述信息,所述数据库表的描述信息包括各数据 库表关联的所述逻辑块和各逻辑块中存储单元大小。
20、 一种访问内存数据库系统的方法,其特征在于,所述方法包括步骤 接收操作内存数据库的请求消息;当所述操作需要向数据库表中添加表记录时,根据该数据库表查询所述第 一存储区中的描述信息以选择一个逻辑块,该逻辑块包含的存储单元大小与所述表记录的大小相匹配;并且,将所述表记录写入选择的逻辑块中空闲的存储 单元内,以及将存储表记录的位置信息记录到所述第二存储区的索引信息中;或者,当所述操作需要从数据库查询表记录时,根据该数据库表和查询条 件中的字段查询第一存储区中的描述信息确定对应的索引信息;并且,从第二 存储区查询确定的索引信息和根据查询结果从第三存储区中相应的存储单元 读取表记录,选择满足所述查询条件的表记录;或者,当所述操作需要从数据库表删除指定的表记录时,从第三存储区释 放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与指定的表 记录相关的索引信息。
21、 如权利要求20所述的方法,其特征在于,选择的一个逻辑块是指包 含的存储单元大小与所述表记录的大小相匹配的所有逻辑块中空闲的存储单 元最多的逻辑块。
22、 如权利要求20所述的方法,其特征在于,所述操作为添加表记录操 作时,若查询所述第 一存储区确定需要操作的数据库表绑定了存储该数据库表 的表记录的逻辑块,则从绑定的逻辑块中选择一个逻辑块。
23、 如权利要求20所述的方法,其特征在于,所述操作为修 文表记录操 作时,在第三存储区中先添加修改后的表记录,然后再删除被修改的表记录。
24、 如权利要求20-23任一项所述的方法,其特征在于,所述存储单元包 括头信息字段和数据信息字段;当该存储单元被表记录占用时,该存储单元的 头信息字段保存该表记录所属表的信息和该表记录的实际长度;当存储单元空 闲时,该存储单元的头信息字段保存在同一逻辑块中的另 一个空闲存储单元的 位置信息,使同一个逻辑块中的空闲存储单元形成链表。
25、 如权利要求24所述的方法,其特征在于,当需要占用逻辑块中的存 储单元时,从所述链表的表头获取一个存储单元;或者,当释放所述逻辑块中 的存储单元时,将释放的存储单元加入到所述链表的尾部。
26、 如权利要求20所述的方法,其特征在于,在第二存储区中采用数据库表的多索引方式存储表记录的位置信息,该多索引方式将数据库表的多个字 段作为索引字段,在每个索引字段下根据各表记录的键值所得到的特征值分别 形成一个特征值表,在同一索引字段下具有相同特征值的表记录的位置信息分 别存储在与特征值表中所述相同的特征值关联的 一 个叶子节点树的叶子节点 上,并且在第 一存储区的数据库表描述信息中将相应的索引字段关联到对应的 特征值表。
27、 如权利要求26所述的方法,其特征在于,将存储表记录的位置信息 记录到所述第二存储区的索引信息中包括步骤根据表记录所在数据库查询第 一存储区确定该数据库表的各索引字段; 从所述表记录中提取各索引字段对应的键值,并获得各键值对应的特征值;利用各特征值分别查询第二存储区中相应的特征值表,若特征值表中存在 该特征值,则在该特征值关联的叶子节点树上增加包含表记录位置信息的叶子 节点,否则,将特征值加入特征值表和创建与该特征值关联的包含表记录位置 信息的叶子节点。
28、 如权利要求26所述的方法,其特征在于,查询第一存储区中的描述 信息确定对应的索引信息是指,根据需要操作的数据库表和字段查询第一存储 区确定需要在第二存储区中查询的特征值表;从第二存储区查询确定的索引信息并从第三存储区中相应的存储单元读 取表记录得到满足所述查询条件的表记录是指,根据所述条件中的键值获得对 应的特征值并查询确定的特征值表,得到该特征值关联的叶子节点树,以及搜 索所述叶子节点树中的叶子节点和从第三存储区读取叶子节点关联的表记录, 将表记录中对应于索引字段的键值与所述条件比较,得到满足所述查询条件的 表记录。
29、 如权利要求28所述的方法,其特征在于,数据库的描述信息中包括 索引字段在表记录中的偏移量,在选择满足查询条件的表记录时,根据所述偏移量从读取的记录中选择相应的键值与查询条件进行比较。
30、 如权利要求26-29任一项所述的方法,其特征在于,所述叶子节点树 中,在索引下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相 同键值的记录对应的叶子节点形成第二关联关系。
31、 如权利要求30所述的方法,其特征在于,在叶子节点树上增加包含 表记录位置信息的叶子节点时,先在第一关联关系中查询键值相同的表记录关 联的叶子节点,若未查询到,则在第一关联关系上增加包含表记录位置信息的 叶子节点,若查询到,则在该叶子节点所在的第二关联关系上增加包含表记录 位置信息的叶子节点。
32、 如权利要求30所述的方法,其特征在于,在搜索叶子节点树中的叶 子节点时,先在第一关联关系中搜索键值相同的表记录关联的叶子节点,若未 搜索到,则停止搜索,若搜索到,则在搜索到的叶子节点所在的第二关联关系 上依次遍历各叶子节点。
33、 一种访问内存数据库系统的装置,其特征在于,所述装置包括 逻辑块选择单元,用于在访问内存数据库系统的操作需要向数据库表中添加表记录时,根据该数据库表查询第一存储区中数据库的描述信息以选择一个 逻辑块,该逻辑块包含的存储单元大小与所述表记录的大小相匹配;写操作单元,用于将表记录写入选择的逻辑块中空闲的存储单元内,以及 在第二存储区中保存表记录的位置信息;索引信息查询单元,用于在访问内存数据库系统的操作需要从数据库查询 表记录时,根据该数据库表和查询条件中的字段查询第 一存储区中数据库的描 述信息确定对应的索引信息;索引单元,用于从第二存储区查询所述索引信息查询单元确定的索引信息 和根据查询结果从第三存储区中相应的存储单元读取表记录,并选择满足所述 查询条件的表记录;释放单元,用于在所述操作需要从数据库表删除指定的表记录时,从第三存储区释放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与 指定的表记录相关的索引信息。
34、 如权利要求33所述的装置,其特征在于,所述写操作单元包括 第一存储操作模块,用于从所述一个逻辑块中获取一个空闲的存储单元,并将待存储的表记录存储到该空闲的存储单元内;第二存储操作模块,用于在第二存储区的索引信息中记录存储所述表记录的位置信息。
35、 如权利要求34所述的装置,其特征在于,所述第二存储操作模块包括第一模块,用于根据表记录所在数据库表查询第一存储区中相应的描述信 息,获得该数据库表预先定义的多个索引字段;其中,在每个索引字段下根据 各表记录的键值所得到的特征值在第二存储区中分别形成一个特征值表,在同一索引下具有相同特征值的表记录的位置信息分别存储在与特征值表中所述 相同的特征值关联的一个叶子节点树的叶子节点上;第二模块,用于从所述表记录中提取各索引字段对应的键值,并获得M 值对应的特征值;第三模块,用于根据各特征值分别查询第二存储区中相应的特征值表,若 特征值表中存在该特征值,则在该特征值关联的叶子节点树上增加包含表记录 位置信息的叶子节点,否则,将特征值加入特征值表和创建与该特征值关联的 包含表记录位置信息的叶子节点。
36、 如权利要求34所述的装置,其特征在于,所述索引信息查询单元包括特征值表确定模块,用于根据需要操作的数据库表和字段查询第一存储区 确定需要在第二存储区中查询的特征值表; 所述索引单元包括特征值表查询模块,用于根据所述查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该特征值关联的叶子节点树;索引模块,用于搜索所述叶子节点树中的叶子节点和从第三存储区读取叶 子节点关联的表记录,将表记录中对应于索引字段的键值与所述查询条件比 较,得到满足所述查询条件的表记录。
37、 如权利要求36所述的装置,其特征在于,所述数据库的描述信息中 包括索引字段在表记录中的偏移量;所述索引模块在选择满足查询条件的表记 录时,根据所述偏移量从读取的记录中选择相应的键值与查询条件进行比较。
38、 如权利要求36所述的装置,其特征在于,所述叶子节点树中,在索 引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键 值的记录对应的叶子节点形成第二关联关系。
39、 如权利要求38所述的装置,其特征在于,所述第三模块在叶子节点 树上增加包含表记录位置信息的叶子节点时,先在第一关联关系中搜索键值相 同的表记录关联的叶子节点,若未搜索到,则在第一关联关系上增加包含表记 录位置信息的叶子节点,若搜索到,则在该叶子节点所在的第二关联关系上增 加包含表记录位置信息的叶子节点。
40、 如权利要求38所述的装置,其特征在于,所述索引模块在搜索叶子 节点树中的叶子节点时,先在第一关联关系中搜索键值相同的表记录关联的叶 子节点,若未搜索到,则停止搜索,若搜索到,则在搜索到的叶子节点所在的 第二关联关系上依次遍历各叶子节点。
41、 一种内存数据库中建立多索引的方法,其特征在于,所述方法包括步骤在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应 的特征值表;将数据库表的表记录存储到存储单元后,在该数据库表的各索引字段下获 取所述表记录中对应的键值,并根据所述键值得到相应的特征值;利用各特征值分别查询相应的索引字段所关联的特征值表,若特征值表中存在该特征值,则在该特征值关联的叶子节点树上增加包含表记录位置信息的 叶子节点,否则,将所述特征值加入特征值表并创建与该特征值关联的并包含 表记录位置信息的叶子节点。
42、 如权利要求41所述的方法,其特征在于,所述叶子节点树中,在索 引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键值的记录对应的叶子节点形成第二关联关系;并且在叶子节点树上增加包含表记录位置信息的叶子节点时,先在第一关联关 系中查询键值相同的表记录关联的叶子节点,若未查询到,则在第一关联关系 上增加包含表记录位置信息的叶子节点,若查询到,则在该叶子节点所在的第 二关联关系上增加包含表记录位置信息的叶子节点。
43、 如权利要求41或42所述的方法,其特征在于,所述特征值为哈希值, 相应的,所述特征值表为哈希表。
44、 一种在内存数据库中建立多索引的装置,其特征在于,所述装置包括 定义模块,用于在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的特征值表;第一模块,用于根据表记录所在数据库表查询第一存储区中相应的描述信 息,获得该数据库表预先定义的多个索引字段;第二模块,用于从所述表记录中提取各索引字段对应的键值,并获得各键值对应的特征值;第三模块,用于根据各特征值分别查询第二存储区中相应的特征值表,若 特征值表中存在该特征值,则在该特征值关联的叶子节点树上增加包含表记录 位置信息的叶子节点,否则,将特征值加入特征值表和创建与该特征值关联的 包含表记录位置信息的叶子节点。
45、 如权利要求44所述的装置,其特征在于,所述叶子节点树中,在索 引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键 值的记录对应的叶子节点形成第二关联关系;并且所述第三模块在叶子节点树上增加包含表记录位置信息的叶子节点时,先 在第一关联关系中搜索键值相同的表记录关联的叶子节点,若未搜索到,则在 第一关联关系上增加包含表记录位置信息的叶子节点,若搜索到,则在该叶子 节点所在的第二关联关系上增加包含表记录位置信息的叶子节点。
46、 一种在内存数据库中利用多索引查询表记录的方法,其特征在于,包 括步骤根据需要操作的数据库表和索引字段查询数据库表的描述信息确定需要 查询的特征值表;根据查询条件中的4建值获得对应的特征值并查询确定的特征值表,得到该 特征值关联的叶子节点树;搜索所述叶子节点树中的叶子节点和从叶子节点关联的存储单元读取表 记录,并将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所 述查询条件的表记录。
47、 如权利要求46所述的方法,其特征在于,在查询数据库的描述信息 中时进一步得到索引字段在表记录中的偏移量,在选择满足所述查询条件的表 记录时,根据所述偏移量从读取的记录中选择相应的键值与所述查询条件进行 比较。
48、 如权利要求46或47所述的方法,其特征在于,所述叶子节点树中, 在索引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相 同键值的记录对应的叶子节点形成第二关联关系;在搜索叶子节点树时,先在 第一关联关系中查找与查询条件中的键值相同的记录对应的叶子节点,然后遍 历该叶子节点所在的第二关联关系中依次遍历各叶子节点。
49、 一种利用多索引查询表记录的装置,其特征在于,包括 特征值表确定模块,用于根据需要操作的数据库表和字段查询第一存储区确定需要在第二存储区中查询的特征值表;特征值表查询模块,用于根据查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该特征值关联的叶子节点树;索引模块,用于搜索所述叶子节点树中的叶子节点和从第三存储区读取叶 子节点关联的表记录,将表记录中对应于索引字段的键值与所述查询条件比 较,得到满足所述查询条件的表记录。
50、 如权利要求49所述的装置,其特征在于,所迷数据库的描述信息中 包括索引字段在表记录中的偏移量;所述索引模块在选择满足所述查询条件的 表记录时,根据所述偏移量从读取的记录中选择相应的键值与所述查询条件进 行比较。
51、 如权利要求49或50所述的装置,其特征在于,所述叶子节点树中, 在索引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相 同键值的记录对应的叶子节点形成第二关联关系;并且所述索引模块在搜索叶子节点树中的叶子节点时,先在第一关联关系中搜 索键值相同的表记录关联的叶子节点,若未搜索到,则停止搜索,若搜索到, 则在搜索到的叶子节点所在的第二关联关系上依次遍历各叶子节点。
全文摘要
本发明公开了一种内存数据库系统,包括通信接口、创建装置、写操作装置、查询操作装置和释放操作装置;所述创建装置用于在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,以及将数据库的描述信息保存到所述第一存储区;所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一个物理块或多个相同的物理块关联成一个逻辑块。本发明还公开了创建内存数据库的方法、建立多索引的方法及其装置。本发明实现了内存数据库表结构与数据存储结构的松耦合,能灵活创建和管理内存数据库。
文档编号G06F17/30GK101315628SQ200710105890
公开日2008年12月3日 申请日期2007年6月1日 优先权日2007年6月1日
发明者周丹弟, 李向东 申请人:华为技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1