CN1848111A - 用于内存数据库的一种数据操作接口的实现方法 - Google Patents
用于内存数据库的一种数据操作接口的实现方法 Download PDFInfo
- Publication number
- CN1848111A CN1848111A CN 200510038947 CN200510038947A CN1848111A CN 1848111 A CN1848111 A CN 1848111A CN 200510038947 CN200510038947 CN 200510038947 CN 200510038947 A CN200510038947 A CN 200510038947A CN 1848111 A CN1848111 A CN 1848111A
- Authority
- CN
- China
- Prior art keywords
- record
- index
- memory
- field
- array
- 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.)
- Pending
Links
Images
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了用于内存数据库的一种数据操作接口的实现方法,其中,设置一数据操作接口的步骤,将数据库操作模块和内存数据库中的数据隔离,使数据库操作模块通过所述数据操作接口完成内存数据的内存数据操作。本发明通过将内存数据库执行内存拷贝操作,无需数据库操作模块提供执行内存拷贝操作的实现,使得内存数据库不再依赖数据库操作模块提供表操作的实现,简化了数据库操作模块的代码,减小了数据库操作模块和内存数据库的耦合,加快使用内存数据库的通信系统的开发速度和稳定速度。
Description
技术领域
本发明涉及内存数据库对所提供的数据操作方法,尤其涉及内存数据库对所提供的数据操作接口的实现方法。
背景技术
在移动通信的网元中,如HLR(位置归属寄存器)、GLMS(组列表管理服务器)等,为了提高数据处理的能力,都使用了内存数据库。内存数据库的使用已经在网络设备中越来越广泛。
在目前使用内存数据库中,对内存表的操作必须通过由数据库操作模块注册回调函数的方法来完成。其实现方法是,内存数据库定义操作一张表所需要的一套接口声明,由数据库操作模块为每一张内存数据库表提供这套操作的接口的实现,由内存数据库调用数据库操作模块提供的接口的实现来操作内存表。
这种方式有一个明显的缺点,就是对每一张表都需要数据库操作模块提供表操作的代码。也就是说,数据库操作模块直接操作内存表,数据库操作模块某一处的故障很可能导致整个内存数据库的内存状态错误,使得使用内存数据库的整个应用出现故障;并且,数据库操作模块的代码工作量很大。
发明内容
本发明所要解决的技术问题是提供内存数据库一种数据操作接口的实现方法,使得数据库操作模块可以通过内存数据库提供的接口完成内存数据操作,从而将数据库操作模块和内存数据库中的数据隔离,不再直接操作内存数据库数据。
为了实现上述目的,本发明提供了内存数据库对所提供的数据操作的接口的实现方法,其特点在于,设置一数据操作接口的步骤,将数据库操作模块和内存数据库中的数据隔离,使数据库操作模块通过所述数据操作接口完成内存数据的内存数据操作。
上述的用于内存数据库的一种数据操作接口的实现方法,其中,设置一数据操作接口的步骤又包括如下步骤:
步骤1,预备内存操作参数;
步骤2,内存数据库将内存操作参数保留在一缓冲区中,所述缓冲区称为操作句柄;
步骤3,内存数据库根据内存操作参数执行内存数据比较和/或拷贝的操作。
上述用于内存数据库的一种数据操作接口的实现方法,其中,所述内存操作参数包括操作类型、表名称、各字段的实际值的内存区参数、字段在表中的序号。
上述用于内存数据库的一种数据操作接口的实现方法,其中,字段的信息以字段缓冲值数组的形式传递给内存数据库。
上述用于内存数据库进行数据操作接口的实现方法,其中,所述步骤3还包括增加记录的步骤,设置字段缓冲值数组的长度为待新增记录中设置了值的字段的数目,所述字段缓冲值数组的首地址和长度记录在操作句柄对象中。
上述用于内存数据库进行数据操作接口的实现方法,其中,在执行操作句柄时,所述增加记录的步骤又包括:
步骤311,操作句柄将字段缓冲值数组的首地址和长度的信息传递给内存表对象,内存表首先为新记录在表记录数组中分配一条记录的空间;
步骤312,内存表然后读取字段缓冲值数组中每一个字段的实际值,并根据字段的序号计算得到表记录中字段相对于记录首地址的偏移量,然后逐个地进行字段拷贝的操作;
步骤313,将字段缓冲值数组中所有的字段的实际值拷贝到表记录相应的字段内存中后,再根据表上定义的索引,添加索引记录,完成一次表记录的新增操作,所述添加索引记录的方法是,对定义在该表上的每一个索引,执行步骤314到步骤316;
步骤314,分配索引记录的空间,将该表记录的记录号写入索引记录数组中;
步骤315,根据索引的字段定义组出索引内存值,然后根据索引内存值计算索引哈希值;
步骤316,根据索引哈希值找到哈希入口地址数组中下标为该哈希值的元素,该元素是一个链表的头部,称为哈希冲突链表,链表中的元素都是索引哈希值相同的索引记录号,然后将该记录的索引记录的记录号写入链表的头部。
上述的内存数据库进行数据操作接口的实现方法,其中,所述步骤3还包括删除记录的步骤,设置字段缓冲值数组的长度为查询条件中字段的数目,字段缓冲值数组的首地址和长度记录在操作句柄对象中,当执行操作句柄的时候,句柄将字段缓冲值数组的首地址和长度信息传递给内存表对象,内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。
上述的内存数据库进行数据操作接口的实现方法,其中,若存在相应索引,所述删除记录的步骤又包括:
步骤321,找到索引IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤322,然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤323到步骤328;
步骤323,根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,索引记录中记录了该索引对应的表记录在表记录数组中的下标,该下标是表记录的记录号,然后获取该表记录;
步骤324,根据表记录组出该记录的该索引的索引内存值,和输入的索引内存值进行内存比较,如果相等,则需要删除该条表记录,并将该表记录的所有索引记录都删除,否则处理哈希冲突链表中的下一个元素;
步骤325,删除表记录前需要将表记录备份到一个内存缓冲区,等删除完该条记录及其索引后,再将备份从内存缓冲区中清空;
步骤326,删除表记录;
步骤327,删除表记录的索引记录,及索引记录在哈希冲突链表中对应的元素;
步骤328,删除备份的表记录。
上述的内存数据库进行数据操作接口的实现方法,其中,所述步骤3还包括更改记录的步骤,字段缓冲值数组的长度为查询条件字段的数目和被更改字段的数目之和,字段缓冲值数组的首地址和长度记录在操作句柄对象中,当执行操作句柄的时候,操作句柄将字段缓冲值数组的首地址和长度信息传递给内存表对象,所述内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。
上述的内存数据库进行数据操作接口的实现方法,其中,若存在相应索引,所述更改记录的步骤又包括:
步骤331,找到索引IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤332,然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤333到步骤338;
步骤333,根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,在索引记录中记录该索引对应的表记录在表记录数组中的下标,该下标是表记录的记录号,然后获取该表记录;
步骤334,根据表记录组出该记录的该索引的索引内存值,和输入的索引内存值进行内存比较,如果相等,则需要更改这条表记录,否则处理哈希冲突链表中的下一个元素;
步骤335,更改表记录前需要将表记录备份到一个内存缓冲区,在更改完该条记录及其索引后,再将备份从内存缓冲区中清空;
步骤336,内存表对象将读取字段缓冲值对象数组中不是查询条件的字段的值,将该字段的值拷贝到记录中的对应字段的内存块中,其中,对于索引字段被更改的情况,索引字段的信息为两份,一份说明查询条件,一份说明索引字段的新值;
步骤337,对于需要更改索引字段的情况,将更改索引记录所属的哈希冲突链表;
步骤338,删除备份的表记录。
上述的内存数据库进行数据操作的接口实现方法,其中,所述步骤3还包括查询记录步骤,字段缓冲值数组用于表示接受查询结果的缓冲区,假设用于接受查询结果的数据结构是一个结构体数组A2,将字段缓冲值数组的首地址和长度记录在操作句柄对象中,执行的时候可以指定执行次数,此处执行次数的含义是需要从内存库中查询多少条记录,必须小于数组A2的长度。假设执行次数指定为C1。,当执行操作句柄的时候,句柄将字段缓冲值数组的首地址和长度信息传递给内存表对象,内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。
上述的内存数据库进行数据操作接口的实现方法,其中,所述查询记录的步骤又包括:
步骤341,找到索引需要使用的索引,设为IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤342,然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤343到步骤348;
步骤343,根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,索引记录中记录了该索引对应的表记录在表记录数组中的下标,也就是表记录的记录号,然后获取该表记录;
步骤344,根据表记录组出该记录的该索引的索引内存值,和输入的索引内存值进行内存比较,如果相等,则需要返回这条表记录,否则处理哈希冲突链表中的下一个元素;
步骤345,内存表对象将读取结果集字段缓冲值数组中每一个元素,判断该字段缓冲值应该接收表记录的拿一个字段的值,然后将对应字段的内存值拷贝到字段缓冲值对象中记录的用于接收结果集字段值的内存块中,直到找不到符合条件的记录或已经找到C1条记录为止。
本发明通过内存数据库执行内存拷贝操作,无需数据库操作模块提供执行内存拷贝操作的实现。使得内存数据库不再依赖数据库操作模块提供表操作的实现,简化了数据库操作模块的代码,减小了数据库操作模块和内存数据库的耦合,加快使用内存数据库的通信系统的开发速度和稳定速度。并避免由于数据库操作模块直接操作内存表而产生的数据库操作模块某一处故障导致整个内存数据库的内存状态错误的情况发生。
下面结合附图和实施例对本发明进行详细说明。
附图说明
图1是本发明内存数据库数据操作的接口实现流程图;
图2是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中新增记录实现流程图;
图3是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中删除记录实现流程图;
图4是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中更改记录实现过程图;
图5是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中查询记录实现过程图;
图6是本发明实施例中接口使用的数据结构示意图;
图7是本发明实施例中接口被调用的流程图。
具体实施方式
首先需要解释文中提出的2个技术方案概念——字段缓冲值和操作句柄。字段缓冲值表示和某个字段绑定的一片内存缓冲区。操作句柄表示一个内存数据库操作,记录了执行这个内存数据库操作所必需的参数信息。
本发明涉及一种内存数据库进行数据操作的接口实现方法,如图1所示,图1是本发明内存数据库数据操作的接口实现流程图,其包括步骤如下:
步骤1:预备内存操作参数。内存操作参数包括操作类型、表名称、各字段的实际值的内存区参数(也就是内存区的地址和长度)、字段在表中的序号传递给内存数据库。这些信息实际上记录了内存比较和拷贝的参数,我们称为内存操作参数。其中,字段的信息以字段缓冲值数组的形式传递给内存数据库。
步骤2:内存数据库把内存操作参数保留在一个缓冲区中。这个缓冲区称为操作句柄。
步骤3:内存数据库根据内存操作参数执行内存比较和拷贝的操作。内存表记录中字段的信息可以通过数据字典得到。一下结合图2、3、4、5分别对具体的增删改和查询步骤进行具体描述。
图2是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中新增记录实现流程图。
增加记录:字段缓冲值数组的长度(数组元素个数)为待新增记录中设置了值的字段的数目,也就是结构体变量中的成员数,假设为N1。字段缓冲值数组的首地址和长度记录在操作句柄对象中。当执行操作句柄的时候,其具体步骤如下:
步骤311:操作句柄将这些信息传递给内存表对象,内存表首先为新记录在表记录数组中分配一条记录的空间;
步骤312:内存表然后读取字段缓冲值数组中每一个字段的实际值,并根据字段的序号计算得到表记录中字段相对于记录首地址的偏移量,然后逐个地进行字段拷贝的操作;
步骤313:将字段缓冲值数组中所有的字段的实际值拷贝到表记录相应的字段内存中后,再根据表上定义的索引,添加索引记录,这样就完成了一次表记录的新增操作。添加索引记录的方法是:对定义在该表上的每一个索引,执行步骤314到步骤316;
步骤314:分配索引记录的空间。将该表记录的记录号写入索引记录数组中;
步骤315:根据索引的字段定义组出索引内存值。然后根据索引内存值计算索引哈希值;
步骤316:根据索引哈希值找到哈希入口地址数组中下标为该哈希值的元素,该元素是一个链表的头部,称为哈希冲突链表,链表中的元素都是索引哈希值相同的索引记录号。然后将该记录的索引记录的记录号写入链表的头部。
为了支持批量操作,每次调用接口的时候,可以提供一个结构体变量数组A1,假设长度为N2。并使用字段缓冲值对象数组字段的实际值和字段的元信息绑定起来。此时,字段缓冲值数组的长度为结构体变量中成员的数目N1乘以数组A1的长度N2。每N1个字段缓冲值对象绑定了A1中的一个元素。在执行句柄的时候,需要指定操作执行的次数。操作执行的次数不能大于数组A1的长度。内存表对象每添加一条记录需要读取N1个字段缓冲值对象。添加一条记录的过程如前所述。下一次执行时读取接下来的N1个字段缓冲值对象执行新增一条记录操作。
图3是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中删除记录实现流程图。
删除记录:字段缓冲值数组的长度为查询条件中字段的数目,也就是结构体变量中的成员数,假设为N1。字段缓冲值数组的首地址和长度记录在操作句柄对象中。当执行操作句柄的时候,句柄将这些信息传递给内存表对象,内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。若存在相应的索引,其具体步骤如下:
步骤321:找到索引IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤322:然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤323到步骤328;
步骤323:根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,索引记录中记录了该索引对应的表记录在表记录数组中的下标,也就是表记录的记录号。然后获取该表记录;
步骤324:根据表记录组出该记录的该索引的索引内存值。和输入的索引内存值进行内存比较。如果相等,则需要删除这条表记录,并将该表记录的所有索引记录都删除。否则处理哈希冲突链表中的下一个元素;
步骤325:删除表记录前需要将表记录备份到一个内存缓冲区,等删除完这条记录及其索引后,再将备份从内存缓冲区中清空;
步骤326:删除表记录;
步骤327:删除表记录的索引记录,及索引记录在哈希冲突链表中对应的元素;
步骤328:删除备份的表记录。
为了支持批量操作,每次调用接口的时候,可以提供一个结构体变量数组A1,假设长度为N2。并使用字段缓冲值对象数组字段的实际值和字段的元信息绑定起来。此时,字段缓冲值数组的长度为结构体变量中成员的数目N1乘以数组A1的长度N2,每N1个字段缓冲值对象绑定了A1中的一个元素。在执行句柄的时候,需要指定操作执行的次数。操作执行的次数不能大于数组A1的长度。内存表对象每执行一次删除操作需要读取N1个字段缓冲值对象,也就是读取A1中的一个元素执行删除操作。执行一次删除操作的过程如前所述。下一次执行时读取接下来的N1个字段缓冲值对象执行删除操作。
图4是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中更改记录实现过程图。
更改记录:字段缓冲值数组的长度为查询条件字段的数目和被更改字段的数目之和,也就是结构体变量中的成员数,假设为N1。字段缓冲值数组的首地址和长度记录在操作句柄对象中。当执行操作句柄的时候,句柄将这些信息传递给内存表对象,内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作,若存在相应索引,则具体步骤如下:
步骤331:找到索引IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤332:然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤333到步骤338;
步骤333:根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,索引记录中记录了该索引对应的表记录在表记录数组中的下标,也就是表记录的记录号。然后获取该表记录;
步骤334:根据表记录组出该记录的该索引的索引内存值。和输入的索引内存值进行内存比较。如果相等,则需要更改这条表记录。否则处理哈希冲突链表中的下一个元素;
步骤335:更改表记录前需要将表记录备份到一个内存缓冲区,在更改完这条记录及其索引后,再将备份从内存缓冲区中清空;
步骤336:内存表对象将读取字段缓冲值对象数组中不是查询条件的字段的值,将这些字段的值拷贝到记录中的对应字段的内存块中。需要注意的是,对于索引字段被更改的情况,索引字段的信息需要提供两份:一份说明查询条件,一份说明索引字段的新值;
步骤337:对于需要更改索引字段的情况,需要更改索引记录所属的哈希冲突链表;
步骤338:删除备份的表记录。
为了支持批量操作,每次调用接口的时候,可以提供一个结构体变量数组A1,假设长度为N2。并使用字段缓冲值对象数组字段的实际值和字段的元信息绑定起来。此时,字段缓冲值数组的长度为结构体变量中成员的数目N1乘以数组A1的长度N2,每N1个字段缓冲值对象绑定了A1中的一个元素。在执行句柄的时候,需要指定操作执行的次数。操作执行的次数不能大于数组A1的长度。内存表对象每执行一次更改操作需要读取N1个字段缓冲值对象,也就是读取A1中的一个元素执行更改操作。执行一次更改操作的过程如前所述。下一次执行时读取接下来的N1个字段缓冲值对象执行更改操作。
图5是本发明实施例中内存数据库根据内存操作参数执行内存操作步骤中查询记录实现过程图。
查询记录:字段缓冲值数组用于表示接受查询结果的缓冲区,假设用于接受查询结果的数据结构是一个结构体数组A2。将字段缓冲值数组的首地址和长度记录在操作句柄对象中。执行的时候可以指定执行次数,此处执行次数的含义是需要从内存数据库中查询多少条记录,必须小于数组A2的长度。假设执行次数指定为C1。当执行操作句柄的时候,句柄将这些信息传递给内存表对象,内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。若存在,其具体执行步骤如下:
步骤341:找到索引IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤342:然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤343到步骤348;
步骤343:根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,索引记录中记录了该索引对应的表记录在表记录数组中的下标,也就是表记录的记录号。然后获取该表记录;
步骤344:根据表记录组出该记录的该索引的索引内存值。和输入的索引内存值进行内存比较。如果相等,则需要返回这条表记录。否则处理哈希冲突链表中的下一个元素;
步骤345:内存表对象将读取结果集字段缓冲值数组中每一个元素,判断该字段缓冲值应该接收表记录的那一个字段的值,然后将对应字段的内存值拷贝到字段缓冲值对象中记录的用于接收结果集字段值的内存块中。直到找不到符合条件的记录或已经找到C1条记录为止。
图6所示为本发明实施例中接口使用的数据结构示意图,图示为将字段实际值的内存区起始地址和长度、表名称、操作类型通过内存缓冲区传递给内存数据库。
图7是本发明实施例中接口被调用的流程图,其具体步骤如下:
步骤a:数据库操作模块提供一个结构体变量,一个字段缓冲值数组,并将结构体变量和字段缓冲值数组绑定;
步骤b:数据库操作模块调用内存数据库接口,申请记录操作信息的缓冲区;
步骤c:数据库操作模块调用内存数据库接口,将操作类型、表名称和用于绑定的字段缓冲值数组的信息记录到缓冲区中;
步骤d:数据库操作模块调用内存数据库接口,执行操作;
步骤e:释放记录操作信息的缓冲区;
步骤f:流程结束。
本发明的技术效果如下:
本发明通过内存数据库执行内存拷贝操作,无需数据库操作模块提供执行内存拷贝操作的实现。使得内存数据库不再依赖数据库操作模块提供表操作的实现,简化了数据库操作模块的代码,减小了数据库操作模块和内存数据库的耦合,加快使用内存数据库的通信系统的开发速度和稳定速度。并避免由于数据库操作模块直接操作内存表而产生的数据库操作模块某一处故障导致整个内存数据库的内存状态错误的情况发生。
当然,本发明还可有其他多种实施例,在不背离本发明精神及其实质的情况下,熟悉本领域的技术人员当可根据本发明作出各种相应的改变和变形,但这些相应的改变和变形都应属于本发明所附的权利要求的保护范围。
Claims (12)
1.用于内存数据库的一种数据操作接口的实现方法,其特征在于,设置一数据操作接口的步骤,将数据库操作模块和内存数据库中的数据隔离,使数据库操作模块通过所述数据操作接口完成内存数据库的内存数据操作。
2.根据权利要求1所述用于内存数据库的一种数据操作接口的实现方法,其特征在于,所述设置一数据操作接口的步骤又包括如下步骤:
步骤1,预备内存操作参数;
步骤2,内存数据库将内存操作参数保留在一缓冲区中,所述缓冲区称为操作句柄;
步骤3,内存数据库根据内存操作参数执行内存数据比较和/或拷贝的操作。
3.根据权利要求2所述用于内存数据库的一种数据操作接口的实现方法,其特征在于,所述内存操作参数包括操作类型、表名称、各字段的实际值的内存区参数、字段在表中的序号。
4.根据权利要求3所述用于内存数据库的一种数据操作接口的实现方法,其特征在于,字段的信息以字段缓冲值数组的形式传递给内存数据库。
5.根据权利要求2、3或4所述用于内存数据库进行数据操作接口的实现方法,其特征在于,所述步骤3还包括增加记录的步骤,设置字段缓冲值数组的长度为待新增记录中设置了值的字段的数目,所述字段缓冲值数组的首地址和长度记录在操作句柄对象中。
6.根据权利要求5所述用于内存数据库进行数据操作接口的实现方法,其特征在于,在执行操作句柄时,所述增加记录的步骤又包括:
步骤311,操作句柄将字段缓冲值数组的首地址和长度的信息传递给内存表对象,内存表首先为新记录在表记录数组中分配一条记录的空间;
步骤312,内存表然后读取字段缓冲值数组中每一个字段的实际值,并根据字段的序号计算得到表记录中字段相对于记录首地址的偏移量,然后逐个地进行字段拷贝的操作;
步骤313,将字段缓冲值数组中所有的字段的实际值拷贝到表记录相应的字段内存中后,再根据表上定义的索引,添加索引记录,完成一次表记录的新增操作,所述添加索引记录的方法是,对定义在该表上的每一个索引,执行步骤314到步骤316;
步骤314,分配索引记录的空间,将该表记录的记录号写入索引记录数组中;
步骤315,根据索引的字段定义组出索引内存值,然后根据索引内存值计算索引哈希值;
步骤316,根据索引哈希值找到哈希入口地址数组中下标为该哈希值的元素,该元素是一个链表的头部,称为哈希冲突链表,链表中的元素都是索引哈希值相同的索引记录号,然后将该记录的索引记录的记录号写入链表的头部。
7.根据权利要求2、3或4所述的内存数据库进行数据操作接口的实现方法,其特征在于,所述步骤3还包括删除记录的步骤,设置字段缓冲值数组的长度为查询条件中字段的数目,字段缓冲值数组的首地址和长度记录在操作句柄对象中,当执行操作句柄的时候,句柄将字段缓冲值数组的首地址和长度信息传递给内存表对象,内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。
8.根据权利要求7所述的内存数据库进行数据操作接口的实现方法,其特征在于,若存在相应索引,所述删除记录的步骤又包括:
步骤321,找到需要使用的索引,设为IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤322,然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤323到步骤328;
步骤323,根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,索引记录中记录了该索引对应的表记录在表记录数组中的下标,该下标是表记录的记录号,然后获取该表记录;
步骤324,根据表记录组出该记录的该索引的索引内存值,和输入的索引内存值进行内存比较,如果相等,则需要删除该条表记录,并将该表记录的所有索引记录都删除,否则处理哈希冲突链表中的下一个元素;
步骤325,删除表记录前需要将表记录备份到一个内存缓冲区,等删除完该条记录及其索引后,再将备份从内存缓冲区中清空;
步骤326,删除表记录;
步骤327,删除表记录的索引记录,及索引记录在哈希冲突链表中对应的元素;
步骤328,删除备份的表记录。
9.根据权利要求2、3或4所述的内存数据库进行数据操作接口的实现方法,其特征在于,所述步骤3还包括更改记录的步骤,字段缓冲值数组的长度为查询条件字段的数目和被更改字段的数目之和,字段缓冲值数组的首地址和长度记录在操作句柄对象中,当执行操作句柄的时候,操作句柄将字段缓冲值数组的首地址和长度信息传递给内存表对象,所述内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。
10根据权利要求9所述的内存数据库进行数据操作接口的实现方法,其特征在于,若存在相应索引,所述更改记录的步骤又包括:
步骤331,找到需要使用的索引,设为IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤332,然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤333到步骤338;
步骤333,根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,在索引记录中记录该索引对应的表记录在表记录数组中的下标,该下标是表记录的记录号,然后获取该表记录;
步骤334,根据表记录组出该记录的该索引的索引内存值,和输入的索引内存值进行内存比较,如果相等,则需要更改该条表记录,否则处理哈希冲突链表中的下一个元素;
步骤335,更改表记录前需要将表记录备份到一个内存缓冲区,在更改完该条记录及其索引后,再将备份从内存缓冲区中清空;
步骤336,内存表对象将读取字段缓冲值对象数组中不是查询条件的字段的值,将该字段的值拷贝到记录中的对应字段的内存块中,其中,对于索引字段被更改的情况,索引字段的信息为两份,一份说明查询条件,一份说明索引字段的新值;
步骤337,对于需要更改索引字段的情况,将更改索引记录所属的哈希冲突链表;
步骤338,删除备份的表记录。
11.根据权利要求2、3或4所述的内存数据库进行数据操作的接口实现方法,其特征在于,所述步骤3还包括查询记录步骤,字段缓冲值数组用于表示接受查询结果的缓冲区,假设用于接受查询结果的数据结构是一个结构体数组A2,将字段缓冲值数组的首地址和长度记录在操作句柄对象中,执行的时候可以指定执行次数,该执行次数必须小于数组A2的长度,当执行操作句柄的时候,句柄将字段缓冲值数组的首地址和长度信息传递给内存表对象,内存表首先判断是否存在相应的索引,如果不存在则无法执行此次操作。
12.根据权利要求11所述的内存数据库进行数据操作接口的实现方法,其特征在于,所述查询记录的步骤又包括:
步骤341,找到需要使用的索引,设为IDX1后,根据查询条件字段缓冲值数组中每一个字段的实际值组出索引值,并计算索引的哈希值;
步骤342,然后在IDX1的哈希入口地址数组中对应元素指向的链表中,对于每一个链表元素,执行步骤343到步骤348;
步骤343,根据元素中记录的索引记录的下标在索引记录数组中找到索引记录,索引记录中记录了该索引对应的表记录在表记录数组中的下标,也就是表记录的记录号,然后获取该表记录;
步骤344,根据表记录组出该记录的该索引的索引内存值,和输入的索引内存值进行内存比较,如果相等,则需要返回该条表记录,否则处理哈希冲突链表中的下一个元素;
步骤345,内存表对象将读取结果集字段缓冲值数组中每一个元素,判断该字段缓冲值应该接收表记录的拿一个字段的值,然后将对应字段的内存值拷贝到字段缓冲值对象中记录的用于接收结果集字段值的内存块中,直到找不到符合条件的记录或已经执行到指定执行次数为止。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510038947 CN1848111A (zh) | 2005-04-15 | 2005-04-15 | 用于内存数据库的一种数据操作接口的实现方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 200510038947 CN1848111A (zh) | 2005-04-15 | 2005-04-15 | 用于内存数据库的一种数据操作接口的实现方法 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN1848111A true CN1848111A (zh) | 2006-10-18 |
Family
ID=37077676
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 200510038947 Pending CN1848111A (zh) | 2005-04-15 | 2005-04-15 | 用于内存数据库的一种数据操作接口的实现方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN1848111A (zh) |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101241492B (zh) * | 2007-02-06 | 2011-05-11 | 中兴通讯股份有限公司 | 具有容量动态控制功能的内存数据存储装置及其实现方法 |
CN101620618B (zh) * | 2009-07-24 | 2011-11-30 | 中兴通讯股份有限公司 | 内存存储数据的维护方法与装置 |
CN102654878A (zh) * | 2011-03-04 | 2012-09-05 | 迈普通信技术股份有限公司 | 嵌入式系统中分布式数据库的数据操作方法及板卡 |
CN104615750A (zh) * | 2015-02-12 | 2015-05-13 | 中国农业银行股份有限公司 | 一种主机系统下的内存数据库的实现方法 |
CN105550271A (zh) * | 2015-12-10 | 2016-05-04 | 成都广达新网科技股份有限公司 | 一种基于键值对的内存数据库查询方法及装置 |
CN107862008A (zh) * | 2017-10-27 | 2018-03-30 | 广西小草信息产业有限责任公司 | 一种数据管理系统及方法 |
CN107977475A (zh) * | 2014-12-24 | 2018-05-01 | 北京奇虎科技有限公司 | 数据库内置数据的处理方法及装置 |
CN109033353A (zh) * | 2018-07-25 | 2018-12-18 | 天津凯发电气股份有限公司 | 一种电能质量管理系统共享内存更新方法 |
CN109885568A (zh) * | 2018-12-29 | 2019-06-14 | 亚信科技(中国)有限公司 | 一种内存数据库的hash索引构建方法及装置 |
CN116303137A (zh) * | 2023-02-27 | 2023-06-23 | 深圳市步科电气有限公司 | 数据滤波方法、装置、电子设备及可读存储介质 |
-
2005
- 2005-04-15 CN CN 200510038947 patent/CN1848111A/zh active Pending
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101241492B (zh) * | 2007-02-06 | 2011-05-11 | 中兴通讯股份有限公司 | 具有容量动态控制功能的内存数据存储装置及其实现方法 |
CN101620618B (zh) * | 2009-07-24 | 2011-11-30 | 中兴通讯股份有限公司 | 内存存储数据的维护方法与装置 |
CN102654878A (zh) * | 2011-03-04 | 2012-09-05 | 迈普通信技术股份有限公司 | 嵌入式系统中分布式数据库的数据操作方法及板卡 |
CN102654878B (zh) * | 2011-03-04 | 2014-03-05 | 迈普通信技术股份有限公司 | 嵌入式系统中分布式数据库的数据操作方法及板卡 |
CN107977475A (zh) * | 2014-12-24 | 2018-05-01 | 北京奇虎科技有限公司 | 数据库内置数据的处理方法及装置 |
CN104615750B (zh) * | 2015-02-12 | 2017-11-03 | 中国农业银行股份有限公司 | 一种主机系统下的内存数据库的实现方法 |
CN104615750A (zh) * | 2015-02-12 | 2015-05-13 | 中国农业银行股份有限公司 | 一种主机系统下的内存数据库的实现方法 |
CN105550271A (zh) * | 2015-12-10 | 2016-05-04 | 成都广达新网科技股份有限公司 | 一种基于键值对的内存数据库查询方法及装置 |
CN105550271B (zh) * | 2015-12-10 | 2018-12-25 | 成都广达新网科技股份有限公司 | 一种基于键值对的内存数据库查询方法及装置 |
CN107862008A (zh) * | 2017-10-27 | 2018-03-30 | 广西小草信息产业有限责任公司 | 一种数据管理系统及方法 |
CN109033353A (zh) * | 2018-07-25 | 2018-12-18 | 天津凯发电气股份有限公司 | 一种电能质量管理系统共享内存更新方法 |
CN109885568A (zh) * | 2018-12-29 | 2019-06-14 | 亚信科技(中国)有限公司 | 一种内存数据库的hash索引构建方法及装置 |
CN109885568B (zh) * | 2018-12-29 | 2021-07-30 | 亚信科技(中国)有限公司 | 一种内存数据库的hash索引构建方法及装置 |
CN116303137A (zh) * | 2023-02-27 | 2023-06-23 | 深圳市步科电气有限公司 | 数据滤波方法、装置、电子设备及可读存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN1112642C (zh) | 配置工具中的设计部件复用方法 | |
CN1192317C (zh) | 用于定位万维网页以及计算机网络文件的系统和方法 | |
CN100337235C (zh) | 访问数据库的方法及装置 | |
CN1783082A (zh) | 用于与文件系统保持命名空间一致性的方法和系统 | |
CN1224875A (zh) | 数据库管理系统的动态修改 | |
CN101042645A (zh) | 统一软件开发环境的方法、设备及系统 | |
CN1140500A (zh) | 分布式数据库系统 | |
CN101046772A (zh) | 回收存储器中的空间的方法和装置 | |
CN1298503A (zh) | 分布式系统中的动态查找服务 | |
CN1794724A (zh) | 在SyncML层实现数据同步的方法 | |
CN1848851A (zh) | 创建轻量目录访问协议数据交换格式片段的方法与计算机 | |
CN1848111A (zh) | 用于内存数据库的一种数据操作接口的实现方法 | |
CN1924842A (zh) | 用于i/o适配器的方法和装置 | |
CN1277210C (zh) | 一种文件同步的方法 | |
CN1976320A (zh) | 数据访问控制方法及系统 | |
CN1172986A (zh) | 实时控制系统 | |
CN1866283A (zh) | 实现规则系统触发的系统及方法 | |
CN1949732A (zh) | 网络社区与搜索的结合的方法以及系统 | |
CN1295778C (zh) | 一种验证芯片硬件行为与软件模拟行为的一致性的方法 | |
CN1904835A (zh) | 一种计算机软件更新的方法 | |
CN1848083A (zh) | 一般软件要求分析器 | |
CN1296820C (zh) | 独立装置驱动器 | |
CN1553339A (zh) | 细粒度快照实现方法 | |
CN1851693A (zh) | 一种对系统资源进行管理的实现方法 | |
CN1512335A (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 | ||
C12 | Rejection of a patent application after its publication | ||
RJ01 | Rejection of invention patent application after publication |