CN101315628A - 内存数据库***及实现内存数据库的方法和装置 - Google Patents
内存数据库***及实现内存数据库的方法和装置 Download PDFInfo
- Publication number
- CN101315628A CN101315628A CNA2007101058902A CN200710105890A CN101315628A CN 101315628 A CN101315628 A CN 101315628A CN A2007101058902 A CNA2007101058902 A CN A2007101058902A CN 200710105890 A CN200710105890 A CN 200710105890A CN 101315628 A CN101315628 A CN 101315628A
- Authority
- CN
- China
- Prior art keywords
- leaf node
- table record
- record
- database
- memory block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种内存数据库***,包括通信接口、创建装置、写操作装置、查询操作装置和释放操作装置;所述创建装置用于在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,以及将数据库的描述信息保存到所述第一存储区;所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一个物理块或多个相同的物理块关联成一个逻辑块。本发明还公开了创建内存数据库的方法、建立多索引的方法及其装置。本发明实现了内存数据库表结构与数据存储结构的松耦合,能灵活创建和管理内存数据库。
Description
技术领域
本发明涉及计算机及通信领域的数据库技术,特别涉及一种内存数据库技术。
背景技术
目前的内存数据库是通过将***中常用数据库表中的数据全部映射到主机共享内存中,通过使用一个固定的数据结构数组将每个固定的数据库表保存在共享内存中,也就是将内存中的一个存储区作为一个数据库表的表空间,根据表记录的实际大小将该存储区划分为多个内存块来保存数据库表中的数据;在数据库表中的关键字段上建立内存索引,通过该内存索引对关键数据进行实时访问。内存***提供用于对内存数据库表中的数据进行修改和检索的应用编程接口API(Application Programming Interface)接口,应用程序在访问这些数据库表时,通过调用内存数据库的API来访问共享内存中的数据,而不是直接访问物理数据库表中的数据,因此,能够提高***对关键数据的实时访问性能。
由于通过使用一个固定的数据结构数组将每个固定的数据库表保存在共享内存中,所述数据的存储和数据库表记录的结构之间耦合度较大,导致不能灵活创建和管理数据库表。例如,在内存数据库中增加数据库表时,必须修改内存数据库的底层(即需要重新编写或修改代码);又如,在对数据库的表结构进行变更时,也需要修改内存数据库的底层。因此,现有内存数据库存储方式难以实现数据表空间的动态扩充;另外,由于采用固定的数据结构保存表记录,所以对于带有变长字段的数据库表的表空间浪费也比较严重。
发明内容
本发明实施例提供一种内存数据库***及实现内存数据库的方法和装置,以降低内存数据库中数据存储与内存数据库的表结构之间的耦合度提高创建、管理数据库的灵活性。
一种内存数据库***,包括:
通信接口,用于接收请求操作数据库的各种消息和输出操作结果;
创建装置,用于在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,以及将数据库的描述信息保存到所述第一存储区,其中,所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一个物理块或多个相同的物理块关联成一个逻辑块;
写操作装置,用于在所述操作需要向数据库表中添加表记录时,查询所述描述信息以选择包含的存储单元大小与所述表记录的大小匹配的一个逻辑块,以及将表记录写入选择的逻辑块中空闲的存储单元内,并将表记录的位置信息写入到所述索引信息中;
查询操作装置,用于在所述操作需要从数据库查询表记录时,查询所述索引信息和根据查询结果从第三存储区中相应的存储单元读取表记录,并选择满足查询条件的表记录;
释放操作装置,用于在所述操作需要从数据库表删除指定的表记录时,从第三存储区释放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与指定的表记录相关的索引信息。
一种创建内存数据库的方法,包括步骤:
确定数据库表结构及各数据库表中表记录的大小;
在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,其中,所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一个物理块或多个相同的物理块关联成一个逻辑块;
将数据库的描述信息保存到所述第一存储区,所述数据库的描述信息包括各数据库表的描述信息,所述数据库表的描述信息包括各数据库表关联的所述逻辑块和各逻辑块中存储单元大小。
一种创建内存数据库的装置,包括:
确定单元,用于确定数据库表结构及各数据库表中表记录的大小;
创建单元,在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,其中,所述第三存储区包括与表记录大小匹配的存储单元,每个存储单元存储一条数据库表记录,相同大小并且在物理空间上连续的存储单元构成一个物理块,一个物理块或多个相同的物理块关联成一个逻辑块;
保存单元,用于将数据库的描述信息保存到所述第一存储区,所述数据库的描述信息包括各数据库表的描述信息,所述数据库表的描述信息包括各数据库表关联的所述逻辑块和各逻辑块中存储单元大小。
一种访问内存数据库***的方法,包括步骤:
接收操作内存数据库的请求消息;
当所述操作需要向数据库表中添加表记录时,根据该数据库表查询所述第一存储区中的描述信息以选择一个逻辑块,该逻辑块包含的存储单元大小与所述表记录的大小相匹配,并且,将所述表记录写入选择的逻辑块中空闲的存储单元内,以及在第二存储区中保存表记录的位置信息;
或者,当所述操作需要从数据库查询表记录时,根据该数据库表和查询条件中的字段查询第一存储区中的描述信息确定对应的索引信息,并且,从第二存储区查询确定的索引信息和根据查询结果从第三存储区中相应的存储单元读取表记录,选择满足所述查询条件的表记录;
或者,当所述操作需要从数据库表删除指定的表记录时,从第三存储区释放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与指定的表记录相关的索引信息。
一种访问内存数据库***的装置,所述装置包括:
逻辑块选择单元,用于在访问内存数据库***的操作需要向数据库表中添加表记录时,根据该数据库表查询第一存储区中数据库的描述信息以选择一个逻辑块,该逻辑块包含的存储单元大小与所述表记录的大小相匹配;
写操作单元,用于将表记录写入选择的逻辑块中空闲的存储单元内,以及将存储表记录的位置信息写入到第二存储区的索引信息中。
索引信息查询单元,用于在访问内存数据库***的操作需要从数据库查询表记录时,根据该数据库表和查询条件中的字段查询第一存储区中的描述信息确定对应的索引信息;
索引单元,用于从第二存储区查询所述索引信息查询单元确定的索引信息和根据查询结果从第三存储区中相应的存储单元读取表记录,并选择满足所述查询条件的表记录;
释放单元,用于在所述操作需要从数据库表删除指定的表记录时,从第三存储区释放存储所述指定的表记录的存储单元,并从第二存储区中删除所述与指定的表记录相关的索引信息。
一种内存数据库中建立多索引的方法,所述方法包括步骤:
在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的特征值表;
将数据库表的表记录存储到存储单元后,在该数据库表的各索引字段下获取所述表记录中对应的键值,并根据所述键值得到相应的特征值;
利用各特征值分别查询相应的索引字段所关联的特征值表,若特征值表中存在该特征值,则在该特征值关联的索引树上增加包含表记录位置信息的节点,否则,将所述特征值加入特征值表并创建与该特征值关联的并包含表记录位置信息的节点。
一种在内存数据库中建立多索引的装置,所述装置包括:
定义模块,用于在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的特征值表;
第一模块,用于根据表记录所在数据库表查询第一存储区中相应的描述信息,获得该数据库表预先定义的多个索引字段;
第二模块,用于从所述表记录中提取各索引字段对应的键值,并获得各键值对应的特征值;
第三模块,用于根据各特征值分别查询第二存储区中相应的特征值表,若特征值表中存在该特征值,则在该特征值关联的索引树上增加包含表记录位置信息的节点,否则,将特征值加入特征值表和创建与该特征值关联的包含表记录位置信息的节点。
一种利用多索引查询表记录的方法,包括步骤:
根据需要操作的数据库表和索引字段查询数据库表的描述信息确定需要查询的特征值表;
根据查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该特征值关联的索引树;
搜索所述索引树中的节点和从节点关联的存储单元读取表记录,并将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表记录。
一种利用多索引查询表记录的装置,包括:
特征值表确定模块,用于根据需要操作的数据库表和字段查询第一存储区确定需要在第二存储区中查询的特征值表;
特征值表查询模块,用于根据查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该特征值关联的索引树;
索引模块,用于搜索所述索引树中的节点和从第三存储区读取节点关联的表记录,将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表记录。
本发明实施例中,在共享内存中建立存储数据库的描述信息的第一存储区、存储用于定位表记录的索引信息的第二存储区和存储表记录的第三存储区,通过描述信息确定索引信息,通过索引信息确定表记录,因而实现了内存数据库表结构与数据存储结构的松耦合,可以灵活创建和管理内存数据库。在第三存储区分配与数据库表中表记录的大小相匹配的存储单元,因此,可以实现不同长度的表记录的灵活存储,从而降低共享内存的资源占用。
附图说明
图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字节大小的整数(索引字段的键值连续并唯一),并提供两个整数型的参数,第一个整数代表索引字段键值的最小值,第二个整数代表索引字段键值的最大值;内存数据库***创建索引时直接把索引字段建成一个没有哈希冲突的整数数组,数据组中的每个元素指向一个存储表记录的存储单元。由于各键值是唯一的,所以可以通过直接访问函数进行快速存取。通过哈希表与叶子节点树组织索引信息时,可采用二进制字节串索引方式,该方式将被索引字段当成一个二进制字节串,并对该二进制字节串进行哈希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需要定位指定的表记录或空闲的存储单元时,通过逻辑块标识ChunkId和物理块标识ExtentId,查找到物理块映射到本进行的虚拟内存地址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、F 6个字段的数据库表可以有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、搜索所述索引树中的节点和从节点关联的存储单元读取表记录,并将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表记录。
在一个具体实例中创建多索引的装置如图11所示,包括:定义模块1100、第一模块1101、第二模块1102和第三模块1103,其中,定义模块1100在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的特征值表;第一模块1101根据表记录所在数据库表查询第一存储区中相应的描述信息,获得该数据库表预先定义的多个索引字段;第二模块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所示流程中包含的处理步骤。
本实施例中提供的内存数据库实现了内存数据库表结构与数据存储结构的松耦合,在存储表记录时,通过选取与表记录大小相匹配的逻辑块可以实现同一个表的变长记录的存储模式,降低了共享内存中表空间资源的占用;本实施例中动态扩充表空间的方式保证了内存数据库表结构与数据存储结构之间不存在耦合关系,并且,在***通过一个内存数据库进程动态扩充表空间时,其他内存数据库应用进程更新本进程内逻辑块的时间戳与***定义区中该逻辑志的时间戳一致,保证了内存空间映射的同步。
本实施例提供的内存数据库能够满足对数据进行大量访问的实时性要求,可应用在实时要求较高的***中,例如,在一个实时计费***中采用本实施例提供的内存数据库来提高***的实时响应性能,数据库存储用户的相关信息及使用业务的计费信息。
显然,本领域的技术人员可以对本发明进行各种改动和变型而不脱离本发明的精神和范围。这样,倘若对本发明的这些修改和变型属于本发明权利要求及其等同技术的范围之内,则本发明也意图包含这些改动和变型在内。
Claims (51)
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所述的装置,其特征在于,所述第二存储操作模块包括:
第一模块,用于根据表记录所在数据库表查询第一存储区中相应的描述信息,获得该数据库表预先定义的多个索引字段;其中,在每个索引字段下根据各表记录的键值所得到的特征值在第二存储区中分别形成一个特征值表,在同一索引下具有相同特征值的表记录的位置信息分别存储在与特征值表中所述相同的特征值关联的一个叶子节点树的叶子节点上;
第二模块,用于从所述表记录中提取各索引字段对应的键值,并获得各键值对应的特征值;
第三模块,用于根据各特征值分别查询第二存储区中相应的特征值表,若特征值表中存在该特征值,则在该特征值关联的叶子节点树上增加包含表记录位置信息的叶子节点,否则,将特征值加入特征值表和创建与该特征值关联的包含表记录位置信息的叶子节点。
36、如权利要求34所述的装置,其特征在于,所述索引信息查询单元包括:
特征值表确定模块,用于根据需要操作的数据库表和字段查询第一存储区确定需要在第二存储区中查询的特征值表;
所述索引单元包括:
特征值表查询模块,用于根据所述查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该特征值关联的叶子节点树;
索引模块,用于搜索所述叶子节点树中的叶子节点和从第三存储区读取叶子节点关联的表记录,将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表记录。
37、如权利要求36所述的装置,其特征在于,所述数据库的描述信息中包括索引字段在表记录中的偏移量;所述索引模块在选择满足查询条件的表记录时,根据所述偏移量从读取的记录中选择相应的键值与查询条件进行比较。
38、如权利要求36所述的装置,其特征在于,所述叶子节点树中,在索引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键值的记录对应的叶子节点形成第二关联关系。
39、如权利要求38所述的装置,其特征在于,所述第三模块在叶子节点树上增加包含表记录位置信息的叶子节点时,先在第一关联关系中搜索键值相同的表记录关联的叶子节点,若未搜索到,则在第一关联关系上增加包含表记录位置信息的叶子节点,若搜索到,则在该叶子节点所在的第二关联关系上增加包含表记录位置信息的叶子节点。
40、如权利要求38所述的装置,其特征在于,所述索引模块在搜索叶子节点树中的叶子节点时,先在第一关联关系中搜索键值相同的表记录关联的叶子节点,若未搜索到,则停止搜索,若搜索到,则在搜索到的叶子节点所在的第二关联关系上依次遍历各叶子节点。
41、一种内存数据库中建立多索引的方法,其特征在于,所述方法包括步骤:
在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的特征值表;
将数据库表的表记录存储到存储单元后,在该数据库表的各索引字段下获取所述表记录中对应的键值,并根据所述键值得到相应的特征值;
利用各特征值分别查询相应的索引字段所关联的特征值表,若特征值表中存在该特征值,则在该特征值关联的叶子节点树上增加包含表记录位置信息的叶子节点,否则,将所述特征值加入特征值表并创建与该特征值关联的并包含表记录位置信息的叶子节点。
42、如权利要求41所述的方法,其特征在于,所述叶子节点树中,在索引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键值的记录对应的叶子节点形成第二关联关系;并且
在叶子节点树上增加包含表记录位置信息的叶子节点时,先在第一关联关系中查询键值相同的表记录关联的叶子节点,若未查询到,则在第一关联关系上增加包含表记录位置信息的叶子节点,若查询到,则在该叶子节点所在的第二关联关系上增加包含表记录位置信息的叶子节点。
43、如权利要求41或42所述的方法,其特征在于,所述特征值为哈希值,相应的,所述特征值表为哈希表。
44、一种在内存数据库中建立多索引的装置,其特征在于,所述装置包括:
定义模块,用于在数据库表中定义多个索引字段,并在第二存储区中建立各索引字段对应的特征值表;
第一模块,用于根据表记录所在数据库表查询第一存储区中相应的描述信息,获得该数据库表预先定义的多个索引字段;
第二模块,用于从所述表记录中提取各索引字段对应的键值,并获得各键值对应的特征值;
第三模块,用于根据各特征值分别查询第二存储区中相应的特征值表,若特征值表中存在该特征值,则在该特征值关联的叶子节点树上增加包含表记录位置信息的叶子节点,否则,将特征值加入特征值表和创建与该特征值关联的包含表记录位置信息的叶子节点。
45、如权利要求44所述的装置,其特征在于,所述叶子节点树中,在索引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键值的记录对应的叶子节点形成第二关联关系;并且
所述第三模块在叶子节点树上增加包含表记录位置信息的叶子节点时,先在第一关联关系中搜索键值相同的表记录关联的叶子节点,若未搜索到,则在第一关联关系上增加包含表记录位置信息的叶子节点,若搜索到,则在该叶子节点所在的第二关联关系上增加包含表记录位置信息的叶子节点。
46、一种在内存数据库中利用多索引查询表记录的方法,其特征在于,包括步骤:
根据需要操作的数据库表和索引字段查询数据库表的描述信息确定需要查询的特征值表;
根据查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该特征值关联的叶子节点树;
搜索所述叶子节点树中的叶子节点和从叶子节点关联的存储单元读取表记录,并将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表记录。
47、如权利要求46所述的方法,其特征在于,在查询数据库的描述信息中时进一步得到索引字段在表记录中的偏移量,在选择满足所述查询条件的表记录时,根据所述偏移量从读取的记录中选择相应的键值与所述查询条件进行比较。
48、如权利要求46或47所述的方法,其特征在于,所述叶子节点树中,在索引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键值的记录对应的叶子节点形成第二关联关系;在搜索叶子节点树时,先在第一关联关系中查找与查询条件中的键值相同的记录对应的叶子节点,然后遍历该叶子节点所在的第二关联关系中依次遍历各叶子节点。
49、一种利用多索引查询表记录的装置,其特征在于,包括:
特征值表确定模块,用于根据需要操作的数据库表和字段查询第一存储区确定需要在第二存储区中查询的特征值表;
特征值表查询模块,用于根据查询条件中的键值获得对应的特征值并查询确定的特征值表,得到该特征值关联的叶子节点树;
索引模块,用于搜索所述叶子节点树中的叶子节点和从第三存储区读取叶子节点关联的表记录,将表记录中对应于索引字段的键值与所述查询条件比较,得到满足所述查询条件的表记录。
50、如权利要求49所述的装置,其特征在于,所述数据库的描述信息中包括索引字段在表记录中的偏移量;所述索引模块在选择满足所述查询条件的表记录时,根据所述偏移量从读取的记录中选择相应的键值与所述查询条件进行比较。
51、如权利要求49或50所述的装置,其特征在于,所述叶子节点树中,在索引字段下具有不同键值的记录对应的叶子节点形成第一关联关系,具有相同键值的记录对应的叶子节点形成第二关联关系;并且
所述索引模块在搜索叶子节点树中的叶子节点时,先在第一关联关系中搜索键值相同的表记录关联的叶子节点,若未搜索到,则停止搜索,若搜索到,则在搜索到的叶子节点所在的第二关联关系上依次遍历各叶子节点。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101058902A CN101315628B (zh) | 2007-06-01 | 2007-06-01 | 内存数据库***及实现内存数据库的方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN2007101058902A CN101315628B (zh) | 2007-06-01 | 2007-06-01 | 内存数据库***及实现内存数据库的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101315628A true CN101315628A (zh) | 2008-12-03 |
CN101315628B CN101315628B (zh) | 2011-01-05 |
Family
ID=40106640
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN2007101058902A Expired - Fee Related CN101315628B (zh) | 2007-06-01 | 2007-06-01 | 内存数据库***及实现内存数据库的方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN101315628B (zh) |
Cited By (56)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826106A (zh) * | 2010-04-09 | 2010-09-08 | 上海交通大学 | 用于无人飞艇***地面站的遥测数据存取方法 |
CN101859139A (zh) * | 2010-06-01 | 2010-10-13 | 杭州和利时自动化有限公司 | 一种分布式控制***的数据共享实现方法及装置 |
CN102117338A (zh) * | 2011-04-02 | 2011-07-06 | 天脉聚源(北京)传媒科技有限公司 | 一种数据库缓存的方法 |
CN102346783A (zh) * | 2011-11-09 | 2012-02-08 | 华为技术有限公司 | 数据检索方法及装置 |
CN102411632A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN102420814A (zh) * | 2011-11-21 | 2012-04-18 | 航天科工深圳(集团)有限公司 | 一种数据访问方法、装置及服务器 |
CN102447604A (zh) * | 2010-09-30 | 2012-05-09 | 迈普通信技术股份有限公司 | 路由表信息存储方法以及路由设备 |
CN102880704A (zh) * | 2012-09-25 | 2013-01-16 | 上海证券交易所 | 一种新型的并发内存数据组织与访问方法 |
CN102929979A (zh) * | 2012-10-17 | 2013-02-13 | 华为技术有限公司 | 一种定位页内存储空间的方法和设备 |
CN101714167B (zh) * | 2009-11-03 | 2013-03-06 | 北京九合创胜网络科技有限公司 | 一种访问单文件数据库的方法及装置 |
CN103020146A (zh) * | 2012-11-22 | 2013-04-03 | 华为技术有限公司 | 数据处理方法及设备 |
CN103106144A (zh) * | 2011-11-15 | 2013-05-15 | 北京新媒传信科技有限公司 | 一种内存索引压缩方法和装置 |
WO2013075306A1 (zh) * | 2011-11-24 | 2013-05-30 | 华为技术有限公司 | 数据访问方法和装置 |
CN103473321A (zh) * | 2013-09-12 | 2013-12-25 | 华为技术有限公司 | 数据库管理方法与*** |
CN103473314A (zh) * | 2013-09-11 | 2013-12-25 | 北京思特奇信息技术股份有限公司 | 一种基于共享内存的键值对存储方法及装置 |
CN103530067A (zh) * | 2013-10-09 | 2014-01-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN103577553A (zh) * | 2013-10-18 | 2014-02-12 | 汉柏科技有限公司 | 数据存储方法 |
CN103593485A (zh) * | 2013-12-04 | 2014-02-19 | 网易传媒科技(北京)有限公司 | 实现数据库实时操作的方法和设备 |
CN103593721A (zh) * | 2012-08-13 | 2014-02-19 | 中国商用飞机有限责任公司 | 基于复杂事件处理的业务流程监控方法 |
WO2014056398A1 (zh) * | 2012-10-11 | 2014-04-17 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置及存储介质 |
CN103902548A (zh) * | 2012-12-25 | 2014-07-02 | 航天信息股份有限公司 | 一种访问数据库的***和方法及注册、订票、网购*** |
CN104298681A (zh) * | 2013-07-18 | 2015-01-21 | 华为技术有限公司 | 一种数据存储方法及装置 |
CN104657467A (zh) * | 2015-02-11 | 2015-05-27 | 南京国电南自美卓控制***有限公司 | 一种实时内存数据库的带订阅/发布的数据推送框架 |
CN104731799A (zh) * | 2013-12-20 | 2015-06-24 | ***股份有限公司 | 内存数据库管理装置 |
CN104809183A (zh) * | 2015-04-17 | 2015-07-29 | 北京奇艺世纪科技有限公司 | 一种数据读取及写入的方法和装置 |
CN104866502A (zh) * | 2014-02-25 | 2015-08-26 | 深圳市中兴微电子技术有限公司 | 数据匹配的方法及装置 |
CN105515868A (zh) * | 2015-12-12 | 2016-04-20 | 中国航空工业集团公司西安航空计算技术研究所 | 一种afdx数据采集记录器的配置及存储方法 |
CN105786939A (zh) * | 2014-12-26 | 2016-07-20 | 中兴通讯股份有限公司 | 优化内存数据库的方法及装置 |
CN106021488A (zh) * | 2016-05-19 | 2016-10-12 | 乐视控股(北京)有限公司 | 键值数据库的管理方法和装置 |
CN106604043A (zh) * | 2016-12-30 | 2017-04-26 | Ut斯达康(深圳)技术有限公司 | 一种互联网直播方法及直播服务器 |
CN106796588A (zh) * | 2015-06-03 | 2017-05-31 | 华为技术有限公司 | 索引表的更新方法和设备 |
CN107145582A (zh) * | 2017-05-09 | 2017-09-08 | 深圳Tcl新技术有限公司 | 数据库游标的控制方法与数据库*** |
CN107688567A (zh) * | 2016-08-03 | 2018-02-13 | 腾讯科技(深圳)有限公司 | 一种索引存储方法及相关装置 |
CN108334541A (zh) * | 2017-12-18 | 2018-07-27 | 中兴通讯股份有限公司 | 一种数据存储方法、装置、设备及存储介质 |
CN109032817A (zh) * | 2018-07-25 | 2018-12-18 | 天津凯发电气股份有限公司 | 一种电能质量管理***共享内存实现方法 |
CN109753382A (zh) * | 2018-12-10 | 2019-05-14 | 厦门市美亚柏科信息股份有限公司 | 一种数据库删除记录的恢复方法及*** |
CN110019221A (zh) * | 2017-12-18 | 2019-07-16 | 厦门本能管家科技有限公司 | 一种内存映像型数据库*** |
CN110399419A (zh) * | 2019-07-30 | 2019-11-01 | 上海金融期货信息技术有限公司 | 一种关系型模板内存数据库*** |
CN110910165A (zh) * | 2019-10-29 | 2020-03-24 | 深圳市星河互动科技有限公司 | 多渠道归因方法及相关设备 |
CN111061680A (zh) * | 2018-10-15 | 2020-04-24 | 北京京东尚科信息技术有限公司 | 一种数据检索的方法和装置 |
CN111177143A (zh) * | 2019-06-12 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 键值数据存储方法、装置、存储介质与电子设备 |
CN111190908A (zh) * | 2018-11-15 | 2020-05-22 | 华为技术有限公司 | 一种数据管理方法、装置及*** |
CN111279313A (zh) * | 2018-12-18 | 2020-06-12 | 深圳市大疆创新科技有限公司 | Fpga芯片和具有该fpga芯片的电子设备 |
CN111400248A (zh) * | 2019-11-19 | 2020-07-10 | 杭州海康威视***技术有限公司 | 写数据、恢复数据的方法及文件*** |
CN111459884A (zh) * | 2019-03-26 | 2020-07-28 | 广州荔支网络技术有限公司 | 一种数据的处理方法、装置、计算机设备和存储介质 |
CN111737254A (zh) * | 2020-05-29 | 2020-10-02 | 苏州浪潮智能科技有限公司 | 一种提高应用缓存利用率的方法及装置 |
CN111737166A (zh) * | 2020-05-15 | 2020-10-02 | 完美世界(北京)软件科技发展有限公司 | 数据对象的处理方法、装置及设备 |
CN111782628A (zh) * | 2020-06-11 | 2020-10-16 | 国电南京自动化股份有限公司 | 电力***实时库动态扩充增量的方法、配置工具和*** |
CN111813773A (zh) * | 2020-04-22 | 2020-10-23 | 深圳市科陆电子科技股份有限公司 | 一种电网抄表数据存储方法、上传方法、装置和存储装置 |
WO2021143351A1 (zh) * | 2020-01-17 | 2021-07-22 | 腾讯科技(深圳)有限公司 | 分布式检索方法、装置、***、计算机设备及存储介质 |
CN113486026A (zh) * | 2021-08-02 | 2021-10-08 | 北京字节跳动网络技术有限公司 | 数据处理方法、装置、设备及介质 |
CN113590212A (zh) * | 2021-06-24 | 2021-11-02 | 阿里巴巴新加坡控股有限公司 | 数据库实例的启动方法、装置及设备 |
CN113672586A (zh) * | 2020-05-15 | 2021-11-19 | 永中软件股份有限公司 | 基于Java技术的内存数据库及其实现方法 |
CN114518834A (zh) * | 2020-11-18 | 2022-05-20 | 中移物联网有限公司 | 一种信息存储方法、装置及电子设备 |
CN115994145A (zh) * | 2023-02-09 | 2023-04-21 | 中国证券登记结算有限责任公司 | 一种处理数据的方法和装置 |
CN117785248A (zh) * | 2024-02-28 | 2024-03-29 | 上海励驰半导体有限公司 | 程序升级中关键变量的注册方法、装置、存储介质及芯片 |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104636349B (zh) * | 2013-11-07 | 2018-05-22 | 阿里巴巴集团控股有限公司 | 一种索引数据压缩以及索引数据搜索的方法和设备 |
Family Cites Families (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN100590616C (zh) * | 2005-06-10 | 2010-02-17 | 北京数码大方科技有限公司 | 多层次数据库***与建立该多层次数据库***的方法 |
CN100418092C (zh) * | 2006-02-20 | 2008-09-10 | 南京联创科技股份有限公司 | 海量数据内存数据库中快速定位的网格+t树索引的方法 |
-
2007
- 2007-06-01 CN CN2007101058902A patent/CN101315628B/zh not_active Expired - Fee Related
Cited By (91)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101714167B (zh) * | 2009-11-03 | 2013-03-06 | 北京九合创胜网络科技有限公司 | 一种访问单文件数据库的方法及装置 |
CN101826106B (zh) * | 2010-04-09 | 2012-07-04 | 上海交通大学 | 用于无人飞艇***地面站的遥测数据存取方法 |
CN101826106A (zh) * | 2010-04-09 | 2010-09-08 | 上海交通大学 | 用于无人飞艇***地面站的遥测数据存取方法 |
CN101859139A (zh) * | 2010-06-01 | 2010-10-13 | 杭州和利时自动化有限公司 | 一种分布式控制***的数据共享实现方法及装置 |
CN102447604A (zh) * | 2010-09-30 | 2012-05-09 | 迈普通信技术股份有限公司 | 路由表信息存储方法以及路由设备 |
CN102117338A (zh) * | 2011-04-02 | 2011-07-06 | 天脉聚源(北京)传媒科技有限公司 | 一种数据库缓存的方法 |
CN102117338B (zh) * | 2011-04-02 | 2013-03-13 | 天脉聚源(北京)传媒科技有限公司 | 一种数据库缓存的方法 |
CN102346783A (zh) * | 2011-11-09 | 2012-02-08 | 华为技术有限公司 | 数据检索方法及装置 |
CN102346783B (zh) * | 2011-11-09 | 2014-09-17 | 华为技术有限公司 | 数据检索方法及装置 |
CN103106144B (zh) * | 2011-11-15 | 2015-10-28 | 北京新媒传信科技有限公司 | 一种内存索引压缩方法和装置 |
CN103106144A (zh) * | 2011-11-15 | 2013-05-15 | 北京新媒传信科技有限公司 | 一种内存索引压缩方法和装置 |
CN102420814A (zh) * | 2011-11-21 | 2012-04-18 | 航天科工深圳(集团)有限公司 | 一种数据访问方法、装置及服务器 |
CN103229164B (zh) * | 2011-11-24 | 2016-08-03 | 华为技术有限公司 | 数据访问方法和装置 |
CN103229164A (zh) * | 2011-11-24 | 2013-07-31 | 华为技术有限公司 | 数据访问方法和装置 |
WO2013075306A1 (zh) * | 2011-11-24 | 2013-05-30 | 华为技术有限公司 | 数据访问方法和装置 |
CN102411632B (zh) * | 2011-12-27 | 2014-08-20 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN102411632A (zh) * | 2011-12-27 | 2012-04-11 | 北京人大金仓信息技术股份有限公司 | 基于链表的内存数据库页式存储方法 |
CN103593721B (zh) * | 2012-08-13 | 2016-10-05 | 中国商用飞机有限责任公司 | 基于复杂事件处理的业务流程监控方法 |
CN103593721A (zh) * | 2012-08-13 | 2014-02-19 | 中国商用飞机有限责任公司 | 基于复杂事件处理的业务流程监控方法 |
CN102880704A (zh) * | 2012-09-25 | 2013-01-16 | 上海证券交易所 | 一种新型的并发内存数据组织与访问方法 |
WO2014056398A1 (zh) * | 2012-10-11 | 2014-04-17 | 腾讯科技(深圳)有限公司 | 数据处理方法、装置及存储介质 |
CN102929979A (zh) * | 2012-10-17 | 2013-02-13 | 华为技术有限公司 | 一种定位页内存储空间的方法和设备 |
CN103020146A (zh) * | 2012-11-22 | 2013-04-03 | 华为技术有限公司 | 数据处理方法及设备 |
CN103902548A (zh) * | 2012-12-25 | 2014-07-02 | 航天信息股份有限公司 | 一种访问数据库的***和方法及注册、订票、网购*** |
CN103902548B (zh) * | 2012-12-25 | 2017-06-23 | 航天信息股份有限公司 | 一种访问数据库的***和方法及注册、订票、网购*** |
CN104298681B (zh) * | 2013-07-18 | 2018-06-19 | 华为技术有限公司 | 一种数据存储方法及装置 |
CN104298681A (zh) * | 2013-07-18 | 2015-01-21 | 华为技术有限公司 | 一种数据存储方法及装置 |
CN103473314A (zh) * | 2013-09-11 | 2013-12-25 | 北京思特奇信息技术股份有限公司 | 一种基于共享内存的键值对存储方法及装置 |
CN103473321A (zh) * | 2013-09-12 | 2013-12-25 | 华为技术有限公司 | 数据库管理方法与*** |
US9460186B2 (en) | 2013-09-12 | 2016-10-04 | Huawei Technologies Co., Ltd. | Database management method and system |
CN103530067A (zh) * | 2013-10-09 | 2014-01-22 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN103530067B (zh) * | 2013-10-09 | 2017-06-09 | 华为技术有限公司 | 一种数据操作的方法和设备 |
CN103577553A (zh) * | 2013-10-18 | 2014-02-12 | 汉柏科技有限公司 | 数据存储方法 |
CN103593485A (zh) * | 2013-12-04 | 2014-02-19 | 网易传媒科技(北京)有限公司 | 实现数据库实时操作的方法和设备 |
CN104731799B (zh) * | 2013-12-20 | 2018-09-04 | ***股份有限公司 | 内存数据库管理装置 |
CN104731799A (zh) * | 2013-12-20 | 2015-06-24 | ***股份有限公司 | 内存数据库管理装置 |
WO2015127721A1 (zh) * | 2014-02-25 | 2015-09-03 | 深圳市中兴微电子技术有限公司 | 数据匹配的方法、装置及计算机存储介质 |
CN104866502A (zh) * | 2014-02-25 | 2015-08-26 | 深圳市中兴微电子技术有限公司 | 数据匹配的方法及装置 |
US10671667B2 (en) | 2014-02-25 | 2020-06-02 | Sanechips Technology Co., Ltd. | Data matching method and apparatus and computer storage medium |
CN104866502B (zh) * | 2014-02-25 | 2020-10-13 | 深圳市中兴微电子技术有限公司 | 数据匹配的方法及装置 |
CN105786939A (zh) * | 2014-12-26 | 2016-07-20 | 中兴通讯股份有限公司 | 优化内存数据库的方法及装置 |
CN104657467B (zh) * | 2015-02-11 | 2017-09-05 | 南京国电南自维美德自动化有限公司 | 一种实时内存数据库的带订阅/发布的数据推送框架 |
CN104657467A (zh) * | 2015-02-11 | 2015-05-27 | 南京国电南自美卓控制***有限公司 | 一种实时内存数据库的带订阅/发布的数据推送框架 |
CN104809183B (zh) * | 2015-04-17 | 2018-06-22 | 北京奇艺世纪科技有限公司 | 一种数据读取及写入的方法和装置 |
CN104809183A (zh) * | 2015-04-17 | 2015-07-29 | 北京奇艺世纪科技有限公司 | 一种数据读取及写入的方法和装置 |
CN106796588A (zh) * | 2015-06-03 | 2017-05-31 | 华为技术有限公司 | 索引表的更新方法和设备 |
US10642817B2 (en) | 2015-06-03 | 2020-05-05 | Huawei Technologies Co., Ltd. | Index table update method, and device |
CN106796588B (zh) * | 2015-06-03 | 2019-11-22 | 华为技术有限公司 | 索引表的更新方法和设备 |
CN105515868A (zh) * | 2015-12-12 | 2016-04-20 | 中国航空工业集团公司西安航空计算技术研究所 | 一种afdx数据采集记录器的配置及存储方法 |
CN105515868B (zh) * | 2015-12-12 | 2019-05-28 | 中国航空工业集团公司西安航空计算技术研究所 | 一种afdx数据采集记录器的配置及存储方法 |
CN106021488A (zh) * | 2016-05-19 | 2016-10-12 | 乐视控股(北京)有限公司 | 键值数据库的管理方法和装置 |
CN107688567A (zh) * | 2016-08-03 | 2018-02-13 | 腾讯科技(深圳)有限公司 | 一种索引存储方法及相关装置 |
CN107688567B (zh) * | 2016-08-03 | 2021-02-09 | 腾讯科技(深圳)有限公司 | 一种索引存储方法及相关装置 |
CN106604043A (zh) * | 2016-12-30 | 2017-04-26 | Ut斯达康(深圳)技术有限公司 | 一种互联网直播方法及直播服务器 |
CN107145582A (zh) * | 2017-05-09 | 2017-09-08 | 深圳Tcl新技术有限公司 | 数据库游标的控制方法与数据库*** |
CN110019221A (zh) * | 2017-12-18 | 2019-07-16 | 厦门本能管家科技有限公司 | 一种内存映像型数据库*** |
CN108334541B (zh) * | 2017-12-18 | 2019-11-05 | 南京中兴新软件有限责任公司 | 一种数据存储方法、装置、设备及存储介质 |
CN108334541A (zh) * | 2017-12-18 | 2018-07-27 | 中兴通讯股份有限公司 | 一种数据存储方法、装置、设备及存储介质 |
CN109032817A (zh) * | 2018-07-25 | 2018-12-18 | 天津凯发电气股份有限公司 | 一种电能质量管理***共享内存实现方法 |
CN111061680A (zh) * | 2018-10-15 | 2020-04-24 | 北京京东尚科信息技术有限公司 | 一种数据检索的方法和装置 |
CN111190908B (zh) * | 2018-11-15 | 2023-09-22 | 华为技术有限公司 | 一种数据管理方法、装置及*** |
CN111190908A (zh) * | 2018-11-15 | 2020-05-22 | 华为技术有限公司 | 一种数据管理方法、装置及*** |
CN109753382A (zh) * | 2018-12-10 | 2019-05-14 | 厦门市美亚柏科信息股份有限公司 | 一种数据库删除记录的恢复方法及*** |
CN109753382B (zh) * | 2018-12-10 | 2022-01-07 | 厦门市美亚柏科信息股份有限公司 | 一种数据库删除记录的恢复方法及*** |
CN111279313A (zh) * | 2018-12-18 | 2020-06-12 | 深圳市大疆创新科技有限公司 | Fpga芯片和具有该fpga芯片的电子设备 |
CN111459884B (zh) * | 2019-03-26 | 2023-05-16 | 广州荔支网络技术有限公司 | 一种数据的处理方法、装置、计算机设备和存储介质 |
CN111459884A (zh) * | 2019-03-26 | 2020-07-28 | 广州荔支网络技术有限公司 | 一种数据的处理方法、装置、计算机设备和存储介质 |
CN111177143B (zh) * | 2019-06-12 | 2024-04-12 | 腾讯科技(深圳)有限公司 | 键值数据存储方法、装置、存储介质与电子设备 |
CN111177143A (zh) * | 2019-06-12 | 2020-05-19 | 腾讯科技(深圳)有限公司 | 键值数据存储方法、装置、存储介质与电子设备 |
CN110399419B (zh) * | 2019-07-30 | 2023-03-24 | 上海金融期货信息技术有限公司 | 一种关系型模板内存数据库*** |
CN110399419A (zh) * | 2019-07-30 | 2019-11-01 | 上海金融期货信息技术有限公司 | 一种关系型模板内存数据库*** |
CN110910165A (zh) * | 2019-10-29 | 2020-03-24 | 深圳市星河互动科技有限公司 | 多渠道归因方法及相关设备 |
CN111400248B (zh) * | 2019-11-19 | 2023-06-30 | 杭州海康威视***技术有限公司 | 写数据、恢复数据的方法及文件*** |
CN111400248A (zh) * | 2019-11-19 | 2020-07-10 | 杭州海康威视***技术有限公司 | 写数据、恢复数据的方法及文件*** |
WO2021143351A1 (zh) * | 2020-01-17 | 2021-07-22 | 腾讯科技(深圳)有限公司 | 分布式检索方法、装置、***、计算机设备及存储介质 |
US20220157043A1 (en) * | 2020-01-17 | 2022-05-19 | Tencent Technology (Shenzhen) Company Limited | Distributed retrieval method, apparatus, and system, computer device, and storage medium |
CN111813773A (zh) * | 2020-04-22 | 2020-10-23 | 深圳市科陆电子科技股份有限公司 | 一种电网抄表数据存储方法、上传方法、装置和存储装置 |
CN111737166A (zh) * | 2020-05-15 | 2020-10-02 | 完美世界(北京)软件科技发展有限公司 | 数据对象的处理方法、装置及设备 |
CN113672586A (zh) * | 2020-05-15 | 2021-11-19 | 永中软件股份有限公司 | 基于Java技术的内存数据库及其实现方法 |
CN111737166B (zh) * | 2020-05-15 | 2023-04-07 | 完美世界(北京)软件科技发展有限公司 | 数据对象的处理方法、装置及设备 |
CN111737254B (zh) * | 2020-05-29 | 2022-12-23 | 苏州浪潮智能科技有限公司 | 一种提高应用缓存利用率的方法及装置 |
CN111737254A (zh) * | 2020-05-29 | 2020-10-02 | 苏州浪潮智能科技有限公司 | 一种提高应用缓存利用率的方法及装置 |
CN111782628A (zh) * | 2020-06-11 | 2020-10-16 | 国电南京自动化股份有限公司 | 电力***实时库动态扩充增量的方法、配置工具和*** |
CN114518834A (zh) * | 2020-11-18 | 2022-05-20 | 中移物联网有限公司 | 一种信息存储方法、装置及电子设备 |
CN114518834B (zh) * | 2020-11-18 | 2023-10-27 | 中移物联网有限公司 | 一种信息存储方法、装置及电子设备 |
CN113590212A (zh) * | 2021-06-24 | 2021-11-02 | 阿里巴巴新加坡控股有限公司 | 数据库实例的启动方法、装置及设备 |
CN113486026A (zh) * | 2021-08-02 | 2021-10-08 | 北京字节跳动网络技术有限公司 | 数据处理方法、装置、设备及介质 |
CN115994145B (zh) * | 2023-02-09 | 2023-08-22 | 中国证券登记结算有限责任公司 | 一种处理数据的方法和装置 |
CN115994145A (zh) * | 2023-02-09 | 2023-04-21 | 中国证券登记结算有限责任公司 | 一种处理数据的方法和装置 |
CN117785248A (zh) * | 2024-02-28 | 2024-03-29 | 上海励驰半导体有限公司 | 程序升级中关键变量的注册方法、装置、存储介质及芯片 |
CN117785248B (zh) * | 2024-02-28 | 2024-05-24 | 上海励驰半导体有限公司 | 程序升级中关键变量的注册方法、装置、存储介质及芯片 |
Also Published As
Publication number | Publication date |
---|---|
CN101315628B (zh) | 2011-01-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101315628B (zh) | 内存数据库***及实现内存数据库的方法和装置 | |
CN108874971B (zh) | 一种应用于海量标签化实体数据存储的工具和方法 | |
CN106294190B (zh) | 一种存储空间管理方法及装置 | |
JP2769100B2 (ja) | 継承を有するデータ・モデル用の並列テーブル | |
WO2012114531A1 (ja) | 計算機システム及びデータ管理方法 | |
CN106970958B (zh) | 一种流文件的查询与存储方法和装置 | |
US7870122B2 (en) | Self-tuning index for flash-based databases | |
CN105117355A (zh) | 存储器、存储器***及其数据处理方法 | |
CN106708968A (zh) | 分布式数据库***和分布式数据库***中的数据处理方法 | |
CN100424699C (zh) | 一种属性可扩展的对象文件*** | |
CN105677904B (zh) | 基于分布式文件***的小文件存储方法及装置 | |
CN102609488A (zh) | 客户端及其数据查询方法、服务端和数据查询*** | |
EP1091295B1 (en) | Data management system using a plurality of data operation modules | |
CN104281535A (zh) | 一种映射表在内存中的处理方法和装置 | |
CN103870511A (zh) | 基于共享内存的信息查询设备及方法 | |
CN100399338C (zh) | 一种数据记录处理方法 | |
CN103077214A (zh) | 文件存储方法及装置 | |
CN117608856A (zh) | NVMe加速卡内存扩展方法、***、终端及存储介质 | |
CN110109866A (zh) | 一种文件***目录的管理方法及设备 | |
CN108804571B (zh) | 一种数据存储方法、装置以及设备 | |
JPH0844602A (ja) | データ管理装置 | |
CN104537023A (zh) | 一种反向索引记录的存储方法及装置 | |
US6760713B2 (en) | Method, computer program product, and system for file and record selection utilizing a fuzzy data record pointer | |
KR101368441B1 (ko) | 데이터베이스의 공간 재사용 장치, 방법 및 컴퓨터 판독 가능한 기록 매체 | |
CN102169418A (zh) | 一种资源受限设备和数据访问方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20110105 Termination date: 20150601 |
|
EXPY | Termination of patent right or utility model |