CN106980673B - 内存数据库表索引更新方法及系统 - Google Patents
内存数据库表索引更新方法及系统 Download PDFInfo
- Publication number
- CN106980673B CN106980673B CN201710190160.0A CN201710190160A CN106980673B CN 106980673 B CN106980673 B CN 106980673B CN 201710190160 A CN201710190160 A CN 201710190160A CN 106980673 B CN106980673 B CN 106980673B
- Authority
- CN
- China
- Prior art keywords
- index
- added
- updating
- value
- items
- 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.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/235—Update request formulation
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/22—Indexing; Data structures therefor; Storage structures
- G06F16/2228—Indexing structures
- G06F16/2264—Multidimensional index structures
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本公开是关于一种内存数据库表索引更新方法及内存数据库表索引更新系统,该方法包括:添加一计数变量;数据库表中的数据每增加一条,将所述计数变量加1;响应索引的启用信号,判断当前所述计数变量的值是否大于一预设值;在判断出当前所述计数变量的值大于所述预设值时,对所述索引进行更新;以及将当前所述计数变量设置为所述预设值。本公开提高了批量处理大数据时索引更新的效率。
Description
技术领域
本公开涉及计算机技术领域,具体而言,涉及一种内存数据库表索引更新方法及内存数据库表索引更新系统。
背景技术
在计算机技术领域,内存数据库可以包括关系型内存数据库和键值型内存数据库。在实际应用中,内存数据库主要是配合Oracle或MySQL等大型关系数据库使用,其作用类似于缓存。然而,内存数据库与传统的磁盘数据库在设计和架构上均不相同,因此传统的数据库索引不适用于内存数据库。
目前,为了改进内存数据库的索引结构,研究人员已经进行了诸多工作,其中,影响较大的索引有T树、CSB+树(Cache-Sensitive B+-tree,缓存敏感B+树)、Trie-tree(字典树)和Hash索引(哈希索引)。
这些常见的内存数据库索引构建的方法均是基于比较的排序,在数据发生变化时会立即更新索引,在这种情况下,更新索引的次数较多,数据插入时需要消耗较长的时间,而且在批量处理大数据时索引的更新效率不高。
然而,通常以批量处理的形式对数据进行处理,也就是说,数据插入时并未用到索引。鉴于此,需要一种新的内存数据库表索引更新方法及内存数据库表索引更新系统。
需要说明的是,在上述背景技术部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开的目的在于提供一种内存数据库表索引更新方法及内存数据库表索引更新系统,进而至少在一定程度上克服由于相关技术的限制和缺陷而导致的一个或者多个问题。
根据本公开的一个方面,提供一种内存数据库表索引更新方法,包括:
添加一计数变量;
数据库表中的数据每增加一条,将所述计数变量加1;
响应索引的启用信号,判断当前所述计数变量的值是否大于一预设值;
在判断出当前所述计数变量的值大于所述预设值时,对所述索引进行更新;以及
将当前所述计数变量设置为所述预设值。
在本公开的一种示例性实施例中,所述对所述索引进行更新包括:
判断增加的数据的条数与所述索引中的索引项的数目是否满足一预设条件,并根据判断结果对所述索引进行更新。
在本公开的一种示例性实施例中,所述根据判断结果对所述索引进行更新包括:
在判断出增加的数据的条数与所述索引中的索引项的数目满足所述预设条件时,采用增量更新的方式对所述索引进行更新;
在判断出增加的数据的条数与所述索引中的索引项的数目不满足所述预设条件时,采用重构更新的方式对所述索引进行更新。
在本公开的一种示例性实施例中,所述采用增量更新的方式对所述索引进行更新包括:
配置一段连续的存储空间,将增加的索引项拷贝到所述存储空间的末尾;
判断所述增加的索引项的索引值是否大于所述索引的索引项的索引值的最大值并根据判断结果确定所述增加的索引项的位置;
将所述增加的索引项以及所述增加的索引项位置之前的未归并的索引项归并到所述存储空间上。
在本公开的一种示例性实施例中,所述判断所述增加的索引项的索引值是否大于所述索引的索引项的索引值的最大值并根据判断结果确定所述增加的索引项的位置包括:
将所述增加的索引项的索引值与所述索引的索引项的索引值的最大值进行比较;
在所述增加的索引项的索引值不小于所述索引的索引项的索引值的最大值时,将所述增加的索引项确定为所述索引的最后一索引项;以及
在所述增加的索引项的索引值小于所述索引的索引项的索引值的最大值时,采用二分法对所述增加的索引项进行位置确定。
在本公开的一种示例性实施例中,所述采用重构更新的方式对所述索引进行更新包括:
配置一段连续的存储空间,将所述索引的索引项以及增加的索引项拷贝到所述存储空间上;
采用快速排序法对所述存储空间上的索引项进行排序,以完成所述索引的更新操作。
根据本公开的一个方面,提供一种内存数据库表索引更新系统,包括:
添加模块,用于添加一计数变量;
累加模块,用于数据库表中的数据每增加一条,将所述计数变量加1;
判断模块,用于响应索引的启用信号,判断当前所述计数变量的值是否大于一预设值;
更新模块,用于在判断出当前所述计数变量的值大于所述预设值时,对所述索引进行更新;以及
设置模块,用于将当前所述计数变量设置为所述预设值。
在本公开的一种示例性实施例中,所述更新模块包括:
判断单元,用于判断增加的数据的条数与所述索引中的索引项的数目是否满足一预设条件;
第一更新单元,用于在所述判断单元判断出增加的数据的条数与所述索引中的索引项的数目满足所述预设条件时,采用增量更新的方式对所述索引进行更新;以及
第二更新单元,用于在所述判断单元判断出增加的数据的条数与所述索引中的索引项的数目不满足所述预设条件时,采用重构更新的方式对所述索引进行更新。
在本公开的一种示例性实施例中,所述第一更新单元包括:
第一配置子单元,用于配置一段连续的存储空间,将增加的索引项拷贝到所述存储空间的末尾;
索引项位置确定子单元,用于判断所述增加的索引项的索引值是否大于所述索引的索引项的索引值的最大值并根据判断结果确定所述增加的索引项的位置;
归并子单元,将所述增加的索引项以及所述增加的索引项位置之前的未归并的索引项归并到所述存储空间上。
在本公开的一种示例性实施例中,所述第二更新单元包括:
第二配置子单元,用于配置一段连续的存储空间,将所述索引的索引项以及增加的索引项拷贝到所述存储空间上;
排序子单元,用于采用快速排序法对所述存储空间上的索引项进行排序,以完成所述索引的更新操作。
在本公开的一些实施例所提供的技术方案中,通过一索引的启用信号并结合一计数变量与预设值的比较结果,对索引进行更新,一方面,通过在计数变量的值大于一预设值时更新索引,确定了索引更新的时机,而无需一旦数据发生变化就立即更新索引,减少了更新索引的次数以及频繁更新消耗的时间,提高了批量处理大数据时索引更新的效率;另一方面,由于减少了更新索引的次数,节约了系统资源。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。在附图中:
图1示意性示出了CSB+树索引的主要步骤的流程图;
图2示意性示出了根据本公开的示例性实施方式的内存数据库表索引更新方法的流程图;
图3示出了根据本公开的示例性实施方式的内存数据库表索引更新方法中进行索引更新的详细步骤的示意性流程图;以及
图4示意性示出了根据本公开的示例性实施方式的内存数据库表索引更新系统的方框图。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。在下面的描述中,提供许多具体细节从而给出对本公开的实施方式的充分理解。然而,本领域技术人员将意识到,可以实践本公开的技术方案而省略所述特定细节中的一个或更多,或者可以采用其它的方法、组元、装置、步骤等。在其它情况下,不详细示出或描述公知技术方案以避免喧宾夺主而使得本公开的各方面变得模糊。
此外,附图仅为本公开的示意性图解,并非一定是按比例绘制。图中相同的附图标记表示相同或类似的部分,因而将省略对它们的重复描述。附图中所示的一些方框图是功能实体,不一定必须与物理或逻辑上独立的实体相对应。可以采用软件形式来实现这些功能实体,或在一个或多个硬件模块或集成电路中实现这些功能实体,或在不同网络和/或处理器装置和/或微控制器装置中实现这些功能实体。
附图中所示的流程图仅是示例性说明,不是必须包括所有的步骤。例如,有的步骤还可以分解,而有的步骤可以合并或部分合并,因此实际执行的顺序有可能根据实际情况改变。
在常见的树形内存数据库索引结构中,当数据发生变化时,首先,需要查找新的数据索引项应该插入的位置,接下来,根据待插入新数据索引项的节点的存储空间确定是否需要分裂该节点,并且在需要分裂该节点的情况下,还需考虑该节点的父节点的存储空间,以确定是否需要分裂该父节点。如此循环反复处理,以确保索引的平衡。
下面将参考图1来描述现有技术中使用较广泛的CSB+树索引的索引更新方法。该索引更新方法可以包括以下步骤:
S02.为新增的数据构建一索引项,查找该索引项在原索引中插入的位置,即查找指定的节点;
S04.判断该节点的存储空间是否足够;
S06.在判断出该节点的存储空间足够的情况下,将新构建的索引项插入该节点;在判断出该节点的存储空间不足的情况下,分裂该节点。
此外,在分裂该节点时,需要重新分配一段连续的存储空间,用于保存与该节点具有相同父节点的同级节点。另外,分裂该节点时,还需判断该节点的父节点的存储空间是否足够,并且在判断出该父节点的存储空间足够的情况下,可以直接修改该父节点指向节点的指针,以完成索引更新,而在判断出该父节点的存储空间不足够的情况下,则需要继续分裂该父节点。
因此,CSB+树索引在不断插入数据进行索引更新时,原来的索引节点会随着插入数据的增加不断分裂,需要不断确定新数据索引应该插入的位置,并分配连续的内存空间以保存父节点相同的索引节点。在批量处理数据时,此索引更新方法的效率较低且逻辑复杂。
鉴于此,本公开提供了一种新的内存数据库表索引更新方法及内存数据库表索引更新系统,以实现较高的索引更新效率。下面将对本公开的示例性实施方式进行详细描述。
图2示意性示出了本公开的示例性实施方式的内存数据库表索引更新方法的流程图。参考图2,所述内存数据库表索引更新方法可以包括以下步骤:
S10.添加一计数变量;
S20.数据库表中的数据每增加一条,将所述计数变量加1;
S30.响应索引的启用信号,判断当前所述计数变量的值是否大于一预设值;
S40.在判断出当前所述计数变量的值大于所述预设值时,对所述索引进行更新;以及
S50.将当前所述计数变量设置为所述预设值。
本公开通过一索引的启用信号并结合一计数变量与预设值的比较结果,对索引进行更新,一方面,通过在计数变量的值大于一预设值时更新索引,确定了索引更新的时机,而无需一旦数据发生变化就立即更新索引,减少了更新索引的次数以及频繁更新消耗的时间,提高了批量处理大数据时索引更新的效率;另一方面,由于减少了更新索引的次数,节约了系统资源。
下面将对根据本公开的内存数据库表索引更新方法中的各步骤进行详细描述。
在步骤S10中,根据本公开的一些实施例,可以将一计数变量添加到索引中,也可以将计数变量添加到其他存储单元中,本示例性实施方式中对计数变量的位置不做具体限定。
另外,在本公开的一些实施例中,计数变量的数据类型可以是整型,然而,本领域技术人员容易理解的是,计数变量还可以是其他类型,本公开对此不做具体限定。
在步骤S20中,数据库表中的数据每增加一条,计数变量加1,而此时不进行索引更新的过程。由于在此阶段仅进行计数变量的累加过程,节约了系统资源,系统可以在此阶段具有更高的数据插入效率。
在步骤S30中,索引的启用信号可以由研发测试人员根据需要发出的信号,另外,索引的启用信号还可以是系统自行产生的信号,例如,当检测到添加有特定数据时或者当经历一段固定时间时,系统自行产生该启用信号,本示例性实施方式中对索引的启用信号不做具体限定。
此外,根据本公开的一些实施例,预设值可以是0,然而,预设值还可以是除0之外的任意整数。
根据本公开的一些实施例,在判断出当前计数变量的值不大于预设值时,可以继续执行步骤S20,以实现计数变量的累加过程。
在步骤S40中,在判断出当前计数变量的值大于预设值时,对索引进行更新。在本公开的示例性实施方式中,研发测试人员可以规定一预设条件,并且基于此预设条件来确定索引更新的具体的方式。
为了更加详细地对索引更新进行说明,下面将参考图3对索引更新的步骤进行描述。如图3所示,索引更新的步骤可以包括:
S400.判断增加的数据的条数与索引中的索引项的数目是否满足一预设条件。
根据本公开的一些实施例,可以将增加的数据的条数记为m,索引中的索引项的数目记为n,预设条件可以为m在一指定范围(例如,小于1000)且m/n在一固定比例内,例如,该指定范围可以是小于1000,并且该固定比例可以是1/2,则所述预设条件可以为m小于1000且m/n在1/2内。容易理解的是,本步骤中的预设条件不限于上面的描述,还可以根据数据的添加情况以及系统的处理能力对预设条件进行修改、替换。
当判断出增加的数据的条数与索引中的索引项的数目不满足预设条件时,步骤S400可以跳转至步骤S402,以采用重构更新的方式对索引进行更新;当判断出增加的数据的条数与索引中的索引项的数目满足预设条件时,步骤S400可以跳转至步骤S406,以采用增量更新的方式对索引进行更新。
下面将对本公开的示例性实施方式的重构更新方式进行详细描述。
S402.配置一段连续的存储空间,将索引的索引项以及增加的索引项拷贝到该存储空间上。
应当注意的是,将索引的索引项以及增加的索引项拷贝到存储空间的过程可以遵循依序拷贝的原则,由此可以避免索引项的排序混乱而需重新进行排序的情况。
在拷贝过程完成后,步骤S402可以跳转至步骤S404。
S404.采用快速排序法对存储空间上的索引项进行排序。
采用快速排序法进行索引项排序的基本过程可以包括:首先,可以从存储空间上的索引项中选取一个索引项的索引值作为基准;接下来,可以将索引值大于该基准的索引项以及索引值小于该基准的索引项划分成两组;随后,对所述两组进行递归排序。
快速排序法的快速之处在于:一旦确定索引值比基准小的索引项,则该索引项无需再跟索引值比基准大的索引项进行比较,同样,一旦确定索引值比基准大的索引项,该索引项无需再跟索引值比基准小的索引项进行比较。另外,上述快速排序法可以在各编译器优化后进行,计算量较小。
步骤S404完成后,步骤可以跳转至步骤S414。
S414.索引更新过程完成。
下面将对本公开的示例性实施方式的增量更新方式进行详细描述。
S406.配置一段连续的存储空间,将增加的索引项拷贝到该存储空间的末尾。
当判断出增加的数据的条数与索引中的索引项的数目满足预设条件时,步骤S400可以跳转至步骤S406。在步骤S406中,将增加的索引项拷贝到连续存储空间的末端的目的在于后续处理过程不需要再分配额外的内存空间,减少了操作。
根据另外一些实施例,步骤S406还可以包括对增加的索引项进行快速排序,具体的,快速排序的方法可以与步骤S404中的方法相同,在此不再赘述。
随后,步骤S406可以跳转至步骤S408。
S408.判断一增加的索引项的索引值是否大于索引的索引项的索引值的最大值,并且根据判断结果确定该增加的索引项的位置。
根据本公开的一些实施例,在判断出该增加的索引项的索引值不小于索引的索引项的索引值的最大值时,该增加的索引项可以是索引的最后一索引项。
根据另外一些实施例,在判断出该增加的索引项的索引值小于索引的索引项的索引值的最大值时,可以采用二分法对增加的索引项进行位置确定,具体的,首先,可以将索引的中间位置的索引项的值设为中间值;随后,比较该中间值与该增加的索引项的值的大小,并且当该中间值与该增加的索引项的值相等时,可以将该中间位置作为该增加的索引项在索引中的位置,另外,当该中间值与该增加的索引项的值不相等时,可以继续采用二分法确定该增加的索引项的位置。
此外,当采用二分法进行位置确定时,在最终查找区域仅存在一个索引项且未查找到相同的索引值的情况下,如果该增加的索引项的值大于所述仅存在的该索引项的值,则可以将该增加的索引项的位置确定为所述仅存在的该索引项的后一位索引项的位置,如果该增加的索引项的值不大于所述仅存在的该索引项的值,则可以将增加的索引项的位置确定为所述仅存在的该索引项的位置。
在判断出该增加的索引项的位置后,步骤S408可以跳转至步骤S410。
S410.将增加的索引项以及该增加的索引项位置之前的未归并的索引项归并到该连续存储空间上。
在步骤S410中,首先,可以判断索引中该增加的索引项位置之前的索引项是否已经被归并到该连续的存储空间上;随后,在判断出索引中该增加的索引项位置之前的索引项未被归并到该连续的存储空间上时,将增加的索引项以及该增加的索引项位置之前的索引项归并到该连续存储空间上,具体的,第一次归并操作的起始位置可以是该连续存储空间的头部,并且随后每次归并的起始位置可以是上一次归并最后一个位置的下一位置。
此外,采用增量更新的方式对所述索引进行更新的方法还可以包括步骤S412。
S412.判断所有增加的索引项是否更新完成。
在本公开的示例性实施方式中,步骤S410可以跳转至步骤S412。在判断出所有增加的索引项更新完成的情况下,步骤可以跳转至S414,即索引更新过程完成;在判断出所有增加的索引项未更新完成时,步骤S412可以跳转至步骤S408,以重复上述过程。
根据本公开的一些实施例,步骤S412还可以包括判断增加的索引项的位置是否超过原索引的末尾。因为本公开的示例性实施方式还包括对增加的索引项进行快速排序,因此,在判断出增加的索引项的位置超过原索引的末尾时,当前及之后的增加的索引项的值均大于索引中原索引项的值,所配置的连续存储空间上的索引项已构成有序的索引。
综上所述,通过响应索引的启用信号将数据变动与索引更新分离开,解决了一旦内存数据表发生变更就需要同步更新索引的问题。另外,针对批量处理大量数据的情况,现有技术更新索引时不断分裂节点而消耗大量系统资源,而本公开的示例性实施方式提供了比现有技术更高效的索引更新方法。
此外,参考图2,在步骤S40的对所述索引进行更新后,根据本公开的示例性实施方式的内存数据库表索引更新方法还包括步骤S50,即将当前所述计数变量设置为所述预设值。由此,索引更新过程完成。
应当注意,尽管在附图中以特定顺序描述了本公开中方法的各个步骤,但是,这并非要求或者暗示必须按照该特定顺序来执行这些步骤,或是必须执行全部所示的步骤才能实现期望的结果。附加的或备选的,可以省略某些步骤,将多个步骤合并为一个步骤执行,以及/或者将一个步骤分解为多个步骤执行等。
以插入100万条数据为例对索引更新方法进行说明。假设索引节点的大小为64个字节,索引为一个32位的整数,则索引节点需要分配8个字节的存储空间来存放一个索引项,其中,4个字节用于存放索引项的索引值,4个字节用于存放数据序号,另外,树形结构的索引还需要额外的空间存放中间索引节点来管理叶子索引节点。
仍以CSB+树为例进行说明。每个叶子节点可以存放7个索引项和1个指针,非叶子节点可以存放14个索引项的索引值和1个指针。在这种情况下,CSB+树的索引深度为6,假设所有节点都被占据,最终占内存空间最少约9.34M,然而,由于更新索引时会分裂节点,则会另外累计分配约60M的内存空间。此外,确定节点位置需要约2000万次比较过程,另外,还需要更新索引时分裂索引节点判断的计算。
根据本公开的示例性实施方式,由于存储空间是连续的,每个节点能够存放8个索引项,需要12.5万个索引节点,约占7.63M的内存空间,此外,排序需要进行的比较次数约为2000万次。
此外,考虑到索引的查询效率,假设数据的索引字段平均分布且各不相同,如果查询任一条记录,CSB+树的索引的比较次数期望值为22.4次,本公开的示例性方案的索引的比较次数期望值为19.5次,因此,本公开的示例性方案的查询效率较高。
进一步的,本示例实施方式中还提供了一种内存数据库表索引更新系统。
图4示意性示出了本公开的示例性实施方式的内存数据库表索引更新系统的方框图。
参考图4,根据本公开的示例性实施方式的内存数据库表索引更新系统1可以包括添加模块10、累加模块20、判断模块30、更新模块40和设置模块50,其中:
添加模块10,可以用于添加一计数变量;
累加模块20,可以用于数据库表中的数据每增加一条,将所述计数变量加1;
判断模块30,可以用于响应索引的启用信号,判断当前所述计数变量的值是否大于一预设值;
更新模块40,可以用于在判断出当前所述计数变量的值大于所述预设值时,对所述索引进行更新;以及
设置模块50,可以用于将当前所述计数变量设置为所述预设值。
根据本公开的示例性实施例,所述更新模块包括:
判断单元,可以用于判断增加的数据的条数与所述索引中的索引项的数目是否满足一预设条件;
第一更新单元,可以用于在所述判断单元判断出增加的数据的条数与所述索引中的索引项的数目满足所述预设条件时,采用增量更新的方式对所述索引进行更新;以及
第二更新单元,可以用于在所述判断单元判断出增加的数据的条数与所述索引中的索引项的数目不满足所述预设条件时,采用重构更新的方式对所述索引进行更新。
根据本公开的示例性实施例,所述第一更新单元包括:
第一配置子单元,可以用于配置一段连续的存储空间,将增加的索引项拷贝到所述存储空间的末尾;
索引项位置确定子单元,可以用于判断所述增加的索引项的索引值是否大于所述索引的索引项的索引值的最大值并根据判断结果确定所述增加的索引项的位置;
归并子单元,可以用于将所述增加的索引项以及所述增加的索引项位置之前的未归并的索引项归并到所述存储空间上。
根据本公开的示例性实施例,所述第二更新单元包括:
第二配置子单元,用于配置一段连续的存储空间,将所述索引的索引项以及增加的索引项拷贝到所述存储空间上;
排序子单元,用于采用快速排序法对所述存储空间上的索引项进行排序,以完成所述索引的更新操作。
由于本发明实施方式的程序运行性能分析装置的各个功能模块与上述方法发明实施方式中相同,因此在此不再赘述。
应当注意,尽管在上文详细描述中提及了程序运行性能分析装置的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、触控终端、或者网络设备等)执行根据本公开实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方式。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (7)
1.一种内存数据库表索引更新方法,其特征在于,包括:
添加一计数变量;
数据库表中的数据每增加一条,将所述计数变量加1;
响应索引的启用信号,判断当前所述计数变量的值是否大于一预设值,其中,所述索引的启用信号为检测到添加有特定数据时,或经过一段固定时间时产生的信号;
在判断出当前所述计数变量的值大于所述预设值时,判断增加的数据的条数是否在一指定范围内,并且所述增加的数据的条数与所述索引中的索引项的数目之间的比值是否在一固定比例内;
在判断出所述增加的数据的条数在所述指定范围内,并且所述增加的数据的条数与所述索引中的索引项的数目之间的比值在所述固定比例内时,采用增量更新的方式对所述索引进行更新;
在判断出所述增加的数据的条数不在所述指定范围内,或者所述增加的数据的条数与所述索引中的索引项的数目之间的比值不在所述固定比例内时,采用重构更新的方式对所述索引进行更新;以及
将当前所述计数变量设置为所述预设值。
2.根据权利要求1所述的内存数据库表索引更新方法,其特征在于,所述采用增量更新的方式对所述索引进行更新包括:
配置一段连续的存储空间,将增加的索引项拷贝到所述存储空间的末尾;
判断所述增加的索引项的索引值是否大于所述索引的索引项的索引值的最大值并根据判断结果确定所述增加的索引项的位置;
将所述增加的索引项以及所述增加的索引项位置之前的未归并的索引项归并到所述存储空间上。
3.根据权利要求2所述的内存数据库表索引更新方法,其特征在于,所述判断所述增加的索引项的索引值是否大于所述索引的索引项的索引值的最大值并根据判断结果确定所述增加的索引项的位置包括:
将所述增加的索引项的索引值与所述索引的索引项的索引值的最大值进行比较;
在所述增加的索引项的索引值不小于所述索引的索引项的索引值的最大值时,将所述增加的索引项确定为所述索引的最后一索引项;以及
在所述增加的索引项的索引值小于所述索引的索引项的索引值的最大值时,采用二分法对所述增加的索引项进行位置确定。
4.根据权利要求1所述的内存数据库表索引更新方法,其特征在于,所述采用重构更新的方式对所述索引进行更新包括:
配置一段连续的存储空间,将所述索引的索引项以及增加的索引项拷贝到所述存储空间上;
采用快速排序法对所述存储空间上的索引项进行排序,以完成所述索引的更新操作。
5.一种内存数据库表索引更新系统,其特征在于,包括:
添加模块,用于添加一计数变量;
累加模块,用于数据库表中的数据每增加一条,将所述计数变量加1;
第一判断模块,用于响应索引的启用信号,判断当前所述计数变量的值是否大于一预设值,其中,所述索引的启用信号为检测到添加有特定数据时,或经过一段固定时间时产生的信号;
第二判断模块,用于在判断出当前所述计数变量的值大于所述预设值时,判断增加的数据的条数是否在一指定范围内,并且所述增加的数据的条数与所述索引中的索引项的数目之间的比值是否在一固定比例内;
第一更新模块,用于在判断出所述增加的数据的条数在所述指定范围内,并且所述增加的数据的条数与所述索引中的索引项的数目之间的比值在所述固定比例内时,采用增量更新的方式对所述索引进行更新;
第二更新模块,用于在判断出所述增加的数据的条数不在所述指定范围内,或者所述增加的数据的条数与所述索引中的索引项的数目之间的比值不在所述固定比例内时,采用重构更新的方式对所述索引进行更新;以及
设置模块,用于将当前所述计数变量设置为所述预设值。
6.根据权利要求5所述的内存数据库表索引更新系统,其特征在于,所述第一更新单元包括:
第一配置子单元,用于配置一段连续的存储空间,将增加的索引项拷贝到所述存储空间的末尾;
索引项位置确定子单元,用于判断所述增加的索引项的索引值是否大于所述索引的索引项的索引值的最大值并根据判断结果确定所述增加的索引项的位置;
归并子单元,用于将所述增加的索引项以及所述增加的索引项位置之前的未归并的索引项归并到所述存储空间上。
7.根据权利要求5所述的内存数据库表索引更新系统,其特征在于,所述第二更新单元包括:
第二配置子单元,用于配置一段连续的存储空间,将所述索引的索引项以及增加的索引项拷贝到所述存储空间上;
排序子单元,用于采用快速排序法对所述存储空间上的索引项进行排序,以完成所述索引的更新操作。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710190160.0A CN106980673B (zh) | 2017-03-27 | 2017-03-27 | 内存数据库表索引更新方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710190160.0A CN106980673B (zh) | 2017-03-27 | 2017-03-27 | 内存数据库表索引更新方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106980673A CN106980673A (zh) | 2017-07-25 |
CN106980673B true CN106980673B (zh) | 2021-03-02 |
Family
ID=59339014
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710190160.0A Active CN106980673B (zh) | 2017-03-27 | 2017-03-27 | 内存数据库表索引更新方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106980673B (zh) |
Families Citing this family (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115150411A (zh) * | 2021-03-31 | 2022-10-04 | 华为技术有限公司 | 数据同步的方法和装置 |
CN115658326B (zh) * | 2022-12-07 | 2024-01-30 | 摩尔线程智能科技(北京)有限责任公司 | 用于管理存储空间的装置及方法、计算设备、芯片 |
CN117131050B (zh) * | 2023-08-28 | 2024-05-28 | 中国科学院软件研究所 | 面向工作负载和查询敏感性的基于磁盘的空间索引方法 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6026406A (en) * | 1997-06-04 | 2000-02-15 | Oracle Corporation | Batch processing of updates to indexes |
CN102339315A (zh) * | 2011-09-30 | 2012-02-01 | 亿赞普(北京)科技有限公司 | 一种广告数据的索引更新方法和系统 |
CN102857491A (zh) * | 2011-06-30 | 2013-01-02 | 丛林网络公司 | 集管理方案 |
CN105393249A (zh) * | 2013-06-28 | 2016-03-09 | 微软技术许可有限责任公司 | 针对查询优化的范围分区统计数据的增量式维护 |
CN105468637A (zh) * | 2014-09-05 | 2016-04-06 | 北京联嘉众赢网络技术有限公司 | 一种数据库更新方法及装置 |
-
2017
- 2017-03-27 CN CN201710190160.0A patent/CN106980673B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6026406A (en) * | 1997-06-04 | 2000-02-15 | Oracle Corporation | Batch processing of updates to indexes |
CN102857491A (zh) * | 2011-06-30 | 2013-01-02 | 丛林网络公司 | 集管理方案 |
CN102339315A (zh) * | 2011-09-30 | 2012-02-01 | 亿赞普(北京)科技有限公司 | 一种广告数据的索引更新方法和系统 |
CN105393249A (zh) * | 2013-06-28 | 2016-03-09 | 微软技术许可有限责任公司 | 针对查询优化的范围分区统计数据的增量式维护 |
CN105468637A (zh) * | 2014-09-05 | 2016-04-06 | 北京联嘉众赢网络技术有限公司 | 一种数据库更新方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN106980673A (zh) | 2017-07-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
Kwon et al. | A study of skew in mapreduce applications | |
Zhang et al. | Adapting skyline computation to the mapreduce framework: Algorithms and experiments | |
Zhou et al. | Balanced parallel fp-growth with mapreduce | |
CN108897761B (zh) | 一种聚簇存储方法及装置 | |
US8166022B2 (en) | System, method, and apparatus for parallelizing query optimization | |
Bernstein et al. | Optimizing optimistic concurrency control for tree-structured, log-structured databases | |
CN105975617A (zh) | 一种多分区表查询处理的方法和装置 | |
Zois et al. | Massively parallel skyline computation for processing-in-memory architectures | |
CN106980673B (zh) | 内存数据库表索引更新方法及系统 | |
WO2016107497A1 (en) | Method and apparatus for scalable sorting of data set | |
Arnaiz-González et al. | MR-DIS: democratic instance selection for big data by MapReduce | |
US20170083286A1 (en) | Parallel merge sorting | |
CN108052535B (zh) | 基于多处理器平台的视觉特征并行快速匹配方法和系统 | |
TW201926081A (zh) | 資料轉移系統及方法 | |
CN114090695A (zh) | 分布式数据库的查询优化的方法和装置 | |
US20210149903A1 (en) | Successive database record filtering on disparate database types | |
CN110888876A (zh) | 生成数据库脚本的方法、装置、存储介质及计算机设备 | |
Lai et al. | Accelerating multi-way joins on the GPU | |
CN108932258B (zh) | 数据索引处理方法及装置 | |
CN112000845B (zh) | 一种基于gpu加速的超空间哈希索引方法 | |
Zhang et al. | muBLASTP: database-indexed protein sequence search on multicore CPUs | |
Dong et al. | High-Performance and Flexible Parallel Algorithms for Semisort and Related Problems | |
Salah et al. | Lazy-Merge: A Novel Implementation for Indexed Parallel $ K $-Way In-Place Merging | |
CN110895529B (zh) | 结构化查询语言的处理方法及相关装置 | |
CN109992687B (zh) | 人脸数据的搜索方法、装置、电子设备及可读存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |