CN102567415A - 一种数据库的控制方法和装置 - Google Patents
一种数据库的控制方法和装置 Download PDFInfo
- Publication number
- CN102567415A CN102567415A CN2010106196737A CN201010619673A CN102567415A CN 102567415 A CN102567415 A CN 102567415A CN 2010106196737 A CN2010106196737 A CN 2010106196737A CN 201010619673 A CN201010619673 A CN 201010619673A CN 102567415 A CN102567415 A CN 102567415A
- Authority
- CN
- China
- Prior art keywords
- data
- information
- index
- data item
- data 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
技术领域
本发明涉及数据处理技术领域,特别涉及一种数据库的控制方法和装置。
背景技术
随着互联网的高速发展,人们的信息来源得到了极大的丰富,信息获取方式也随之而改变,这给人类带来机遇的同时也带来挑战,在Web信息成几何基数增长的前提下,如何能够快速准确的进行数据搜索,搜索到需要的东西,是数据处理技术领域研究的方向之一。
在数据搜索中,搜索引擎spider得到越来越多的应用,spider是搜索引擎的一个自动程序,其作用是抓取互联网上的网页,建立索引数据库,使用户能在搜索引擎中搜索到相关网站的网页。
在具体实施过程中,spider每天要抓取大量网站链接,在抓取之前都需要获取待抓取网站的IP地址以及robots等信息,这些信息不可能实时的从互联网上查询,而只能通过内部的域名服务器DNS查询。
但是,由于DNS中存储的数据量在不断的增加,因此查询速度也会随之变慢,不能满足快速查询的需求。而且,对DNS中的数据进行更新时,也会增加DNS的工作量,这也影响了查询的速度。同样,在实时网页数据库以及其他关键字-数据值(Key-value)数据库中也会遇到类似的问题。
如何能够更好的对数据进行查询以及更新,满足高性能的读写服务,是数据处理技术领域研究的方向之一。
发明内容
本发明所要解决的技术问题是提供一种数据库的控制方法和装置,以支持高性能读写操作,满足对数据的高性能随机查询与更新需求。
本发明为解决技术问题而采用的技术方案是提供一种数据库的控制方法,包括:a.接收操作信息;b.根据所述操作信息在位于内存的索引中查询对应数据块的索引信息,其中所述对应数据块包括多个数据项,每一所述数据项包括关键字与数据值,所述对应数据块选择性位于所述内存及固态存储器中;c.根据所述操作信息及所述索引信息对所述对应数据块进行相应操作。
根据本发明之一优选实施例,在所述步骤a中,接收读取操作指令以及待读取数据项的关键字,在所述步骤b中,根据所述待读取数据项的关键字查询所述索引信息,在所述步骤c中,若查询到所述索引信息,则根据所述索引信息判断所述对应数据块位于所述内存中还是位于所述固态存储器中,并根据判断结果,选择从所述内存或所述固态存储器中读取对应数据项。
根据本发明之一优选实施例,所述索引包括第一索引和第二索引,在所述步骤b进一步包括:根据所述第一索引查询与所述待读取数据项的关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;以及根据所述第二索引查询与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符,在所述步骤c中,根据所述数据块状态判断所述对应数据块位于所述内存还是位于所述固态存储器。
根据本发明之一优选实施例,在所述步骤c中,若所述数据块位于所述内存,则根据所述内存指针、所述数据项偏移信息以及所述数据项长度信息读取所述对应数据项。
根据本发明之一优选实施例,在所述步骤c中,若所述数据块位于所述固态存储器,则根据所述固态存储器文件描述符、所述数据项偏移信息以及所述数据项长度信息读取所述对应数据项。
根据本发明之一优选实施例,所述步骤c进一步包括:判断所述对应数据项的关键字与所述待读取数据项的关键字是否一致,若不一致,则判定所述待读取数据项不存在,若一致,则将所述对应数据项的数据值作为所述待读取数据项的数据值。
根据本发明之一优选实施例,在步骤a中,接收写入操作指令以及待写入数据项,在所述步骤b中,根据所述待写入数据项的关键字查询所述索引信息。
根据本发明之一优选实施例,所述步骤c进一步包括:若未查询到所述索引信息,则将所述待写入数据项写入位于所述内存中的用于接收所述待写入数据项的数据块内,并更新所述索引。
根据本发明之一优选实施例,所述步骤c进一步包括:在所述数据块写满后,将所述数据块写入所述固态存储器,并进一步更新所述索引。
根据本发明之一优选实施例,所述索引包括第一索引和第二索引,所述步骤c进一步包括:在所述第一索引中记录与所述待写入数据项的关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;以及在所述第二索引中记录与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符。
根据本发明之一优选实施例,所述步骤c进一步包括:若查询到所述索引信息,则根据所述索引信息判断所述对应数据块位于所述内存中还是位于所述固态存储器中,并根据判断结果,选择从所述内存或所述固态存储器中读取对应数据项,判断所述对应数据项的数据值与所述待写入数据项的数据值是否一致。
根据本发明之一优选实施例,所述步骤c进一步包括:若所述对应数据项的数据值与所述待写入数据项的数据值一致,则退出。
根据本发明之一优选实施例,所述步骤c进一步包括:若所述对应数据项的数据值与所述待写入数据项的数据值不一致,则将所述待写入数据项写入位于所述内存中的用于接收所述待写入数据项的数据块内,并更新所述索引。
根据本发明之一优选实施例,所述步骤c进一步包括:在所述数据块写满后,将所述数据块写入所述固态存储器,并进一步更新所述索引。
根据本发明之一优选实施例,所述索引包括第一索引和第二索引,所述步骤c进一步包括:在所述第一索引中记录与所述待写入数据项的关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;以及在所述第二索引中记录与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符。
根据本发明之一优选实施例,所述数据块信息进一步包括数据项有效位图,所述步骤c进一步包括:在所述对应数据块的所述数据项有效位图中将所述对应数据项标记删除。
根据本发明之一优选实施例,在所述步骤b中,根据所述索引信息确定所述对应数据块中的有效数据项的个数是否低于阈值,在所述步骤c中,如果所述有效数据项的个数低于阈值,则将所述对应数据块中的有效数据项重新写入位于所述内存中的用于接收待写入数据项的数据块内,并更新所述索引。
根据本发明之一优选实施例,在步骤a中,接收导出操作指令,在步骤b中,根据所述索引信息确定待导出数据块的元信息,其中,所述元信息包括数据块识别信息、数据块长度信息、数据项总数、有效数据项个数以及数据项有效位图,在所述步骤c中,根据所述元信息导出所述待导出数据块。
根据本发明之一优选实施例,所述步骤b包括:b1.对所述内存和所述固态存储器进行加锁,其中,在加锁状态下,禁止对所述内存和所述固态存储器进行修改;b2.从所述索引中复制所述待导出数据块对应的元信息;b3.对所述待导出数据块的引用计数进行引用标记操作,以避免所述待导出数据块被删除;b4.对所述内存和所述固态存储器进行解锁,其中,在解锁状态下,允许对所述内存和所述固态存储器进行修改。
根据本发明之一优选实施例,所述步骤c包括:c1.将所述元信息写入元信息文件;c2.根据所述元信息从所述内存或所述固态存储器上读取所述待导出数据块,并根据所述待导出数据块的关键字生成导出索引;c3.将所述导出索引写入导出索引文件;c4.将所述待导出数据块写入数据块文件;c5.对所述待导出数据块的引用计数进行引用解除操作。
本发明为解决技术问题而采用的技术方案是提供一种数据库的控制装置,包括:操作信息接收模块,用于接收操作信息;索引信息查询模块,根据所述操作信息在位于内存的索引中查询对应数据块的索引信息,其中所述对应数据块包括多个数据项,每一所述数据项包括关键字与数据值,所述对应数据块选择性位于所述内存及固态存储器中;数据块处理模块,用于根据所述操作信息及所述索引信息对所述对应数据块进行相应操作。
根据本发明之一优选实施例,所述索引包括第一索引和第二索引,所述索引信息查询模块根据所述第一索引查询与所述关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;所述索引信息查询模块根据所述第二索引查询与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符。
由以上技术方案可以看出,本发明的数据库的控制方法及装置以数据块形式对多个数据项进行存储,并根据不同状态将数据块选择性存储于内存及固态存储中,进一步配合内存索引,可支持高性能读写操作,满足了对数据的高性能随机查询与更新的需求。
附图说明
图1是本发明实施例中的数据库控制方法的流程示意图;
图2是本发明实施例中的数据库的存储介质及存储内容的示意图;
图3是本发明实施例中的第一索引及数据块的数据结构示意图;
图4是本发明实施例中的第二索引的数据结构示意图;
图5是本发明实施例中的哈希容器的结构示意图;
图6是本发明实施例中的数据块生命周期管理过程的示意图;
图7是本发明实施例中的数据库读取操作的流程示意图;
图8是本发明实施例中的数据库写入操作的流程示意图;
图9是图8中的步骤S809的具体流程示意图;
图10是本发明实施例的数据库导出操作的流程示意图;
图11是本发明实施例中的数据库控制装置的结构示意图。
具体实施方式
下面结合附图和实施例对本发明进行详细说明。
请参阅图1,图1是本发明实施例中的数据库控制方法的流程示意图。在本实施例中,数据库的控制方法主要包括以下几个步骤:
步骤S101,接收操作信息。
步骤S102,根据操作信息在位于内存的索引中查询对应数据块的索引信息。
步骤S103,根据操作信息及索引信息对对应数据块进行相应操作。
在本发明中,操作信息可以包括具体操作指令以及待处理数据项或者待处理数据项的关键字。具体操作指令可以包括读取操作指令、写入操作指令、导出操作指令等,各种操作信息对应的具体操作过程将在下文中描述。
请参阅图2,图2是本发明实施例中的数据库的存储介质及存储内容的示意图。在本实施例中,数据库的存储介质包括内存以及固态存储器。存储内容包括索引和数据块。其中,数据块根据不同状态选择性位于内存及固态存储器中。具体来说,当数据块位于内存中时可称为内存数据块,当数据块位于固态存储器中时可称为固态存储器数据块。其中,索引设置在内存内,索引包括第一索引和第二索引。
请参阅图3-4,图3是本发明实施例中的第一索引及数据块的数据结构示意图。图4是本发明实施例中的第二索引的数据结构示意图。
请参阅图3,在本实施例中,第一索引用于记录关键字与对应数据项的位置信息的映射关系。位置信息主要包括如下信息:数据块识别信息、数据项偏移信息以及数据项长度信息。
其中,数据块识别信息用于记录对应数据项所属的数据块的ID,数据项偏移信息用于记录对应数据项在数据块中的偏移量,数据项长度信息用于记录对应数据项的长度。
请参阅图3,第二索引完成从位置信息中的数据块识别信息到数据块信息的映射。请参阅图4,在本实施例中,数据块信息主要包括:数据块识别信息、数据块长度信息、数据项总数、有效数据项个数、数据项有效位图、数据块状态、内存数据块容量、内存指针、固态存储器文件描述符以及引用计数。
其中,数据块识别信息用于记录数据块的ID,在本实施例中,每个数据块分配一个唯一的ID。数据块长度信息用于记录数据块的大小。数据项总数用于记录数据块内的数据项的总个数。有效数据项个数用于记录数据块内的有效数据项的个数,即数据项总数减去被标记删除的数据项的个数。数据项有效位图用于记录数据项的有效状态,其中,每一位(bit)代表一个数据项,若置1表示有效,置0表示被标记删除。数据块状态用于记录数据块的状态,主要用于判断对应数据块是位于内存中还是位于固态存储器中,下文中将详细描述各种数据块状态。内存数据块容量用于记录内存数据块中已存储的数据项的大小,主要用于与数据块长度信息配合来判断内存数据块是否已满。内存指针用于记录数据块在内存中的存储位置,当数据块不位于内存中时,则该值无效。固态存储器文件描述符用于记录数据块在固态存储器中的存储位置,当数据块不位于固态存储器中时,则该值无效。引用计数用于记录数据块的引用状态,用于管理数据块的生存周期。
在上述信息中,数据块识别信息、数据块长度信息、数据项总数、有效数据项个数、数据项有效位图为数据块的核心数据项,称为数据块的元信息。
请继续参阅图3,在数据块中存储多个数据项,每一数据项内存储有如下内容:数据项序号、关键字长度、数据值长度、关键字以及数据值。
其中,数据项序号为数据项在数据块中的序号,用于查找数据项有效位图。关键字长度用于记录关键字的长度。数据值长度用于记录数据值的长度。关键字为表示关键字的二进制串。数据值为表示数据值的二进制串。
在本发明中,第一索引和第二索引可通过本领域各种算法实现,例如哈希算法。
本发明一优选实施例提供了一种间接寻址的哈希容器,节省了索引的空间,提高了内存的使用效率。下面将以第一索引为例,进行详细描述。
请参阅图5,在本实施例中,第一索引包括一哈希桶表,该哈希桶表包括多个哈希桶。每一个哈希桶内存储一哈希节点指针。在本实施例中,哈希节点指针为预定字节(例如,4字节),其中前预定位(例如,前9位)用于标识哈希节点所在的哈希节点数据块,后预定位(例如,后23位)用于标识哈希节点在哈希节点数据块内部的偏移。
具体来说,所有的哈希节点数据块的识别信息被记录在标识信息列表中,并可根据哈希节点指针的前预定位从标识信息列表的对应位置查询到对应的识别信息。在本实施例中,标识信息列表所能存储的识别信息的最大数量为29=512。
此外,哈希节点存储在对应的哈希节点数据块内,每个哈希节点占用预定字节(例如,20字节),分别包括关键字(例如,8个字节)、数据块识别信息(例如,2个字节)、数据项长度信息(例如,2个字节)、数据项偏移信息(例如,4个字节)以及下一哈希节点指针(例如,4个字节)。
在上述哈希容器的使用过程中,首先对接收的关键字进行哈希运算从哈希桶表中确定对应的哈希桶,并从哈希桶中获得哈希节点指针。随后,利用哈希节点指针的前预定位从标识信息列表中确定对应的哈希节点数据块的识别信息,并根据哈希节点指针的后预定位作为偏移量从识别信息对应的哈希节点数据块中获取对应的哈希节点,进而获取与该关键字相关的数据项位置信息,例如数据块识别信息、数据项偏移信息以及数据项长度信息。
在本实施例中,每个哈希节点数据块内能够存储的哈希节点的最大数量为223=8388608个,因此每个哈希容器可以支持的最大数据量为512×8388608=42亿,很好的满足了域名服务器(Domain Name Server,DNS)的需求。
此外,在该哈希容器中,空闲哈希节点用空闲链表维护。当数据被删除时,对应的哈希节点也会被回收。空闲哈希节点通过哈希节点中的下一哈希节点指针来串成一个回收链表。当接收到新的数据时,优先使用回收链表中的指针。因此,哈希节点数据块中的哈希节点数据总是紧凑的,在站点数量为3亿的情况下,占用的内存为300M×20bytes=6Gbytes。
请参阅图6,图6为本发明实施例中的数据块生命周期管理过程的示意图。
在本实施例中,首先,在内存中创建数据块。在创建数据块后,为该数据块分配唯一的数据块识别信息(ID),并将该数据块的数据块状态标记为“内存”。随后,更新第二索引,以记录该数据块的数据块信息,例如数据块识别信息、数据块长度信息、数据块状态以及内存指针等。其中,数据库在任一时刻最多只有一个数据块处于“内存”状态。
标记为“内存”的数据块可接收待写入数据项,并将该数据项追加到数据块末端。随后,更新第二索引,以记录有效数据项个数、数据项有效位图、内存数据块容量等。同时,根据待写入数据项的关键字及存储位置更新第一索引,在第一索引中记录该关键字与数据块识别信息、数据项偏移信息以及数据项长度信息的映射关系,以便后续可根据该关键字查询到对应的数据项。数据项一旦写入数据块后,就不可以更改,仅允许对该数据项进行读取和标记删除。当对该数据项进行标记删除时,在第二索引中对该数据块的数据块信息的数据项有效位图中的对应位进行标记,例如将对应位置0。
当数据项不断写入数据块后,可通过内存数据块容量与数据块长度信息的比较结果来判断该数据块是否写满。若数据块写满,将该数据块的数据块状态标记为“写入”,并更新第二索引,以记录数据项总数。随后,将该数据块写入到固态存储器中。优选地,在写入过程中,将内存中该数据块的数据项以受控的速率(例如,5MB/S)写入到固态存储器中,有效地防止了对读取性能造成过大影响。同时,在内存中重新创建数据块状态标记为“内存”的新数据块,以接收后续写入的数据项。
在“写入”状态的该数据块的数据项全部写入到固态存储器后,将该数据块的数据块状态标记为“固态存储”,并释放该数据块原先占用的内存缓冲空间。随后,更新第二索引,以记录该数据块的数据块信息,例如固态存储器文件描述符。
如果处于“内存”状态和“写入”状态的数据块中的空洞太多,也就是说,数据块中的有效数据项的个数低于阈值,则将该数据块的数据块状态标记为“重建”。随后,将标记为“重建”的数据块内的有效数据项转存到标记为“内存”的新数据块中,以实现对“重建”的数据块内的无效数据项的清除及重建。在重建完成后,将标记为“重建”的数据块的数据块状态标记为“删除”。此时,根据该数据块的引用计数判断是否有其他线程引用该数据块,如果没有其他线程引用该数据块,则删除该数据块。如果有其他线程引用该数据块,则保留该数据块,直到其他线程使用完成后,通过引用解除操作释放该引用计数,再将该数据块进行删除。
如果处于“固态存储”状态的数据块中的空洞太多,则将该数据块的数据块状态标记为“读取”,并将该数据块读取到内存中。在读取完成后,将该数据块的数据块状态标记为“重建”,并将该数据块的有效数据项转存到标记为“内存”的数据块中,以实现对“重建”的数据块内的无效数据项的清除及重建。在重建完成后,将标记为“重建”的数据块的数据块状态标记为“删除”。此时,根据该数据块的引用计数判断是否有其他线程引用该数据块,如果没有其他线程引用该数据块,则删除该数据块。
具体来说,如果数据块状态为“内存”、“写入”以及“重建”,则表示该数据块位于内存中。如果数据块状态为“固态存储”以及“读取”,则表示该数据块位于固态存储器中。透过上述操作,可有效管理数据块生命周期。
下面将结合具体实施例,描述本发明的各种操作过程。
请参阅图7,图7为本发明实施例中的数据库读取操作的流程示意图。
在步骤S701中,接收读取操作指令以及待读取数据项的关键字。
在步骤S702中,利用该关键字从第一索引查询对应的位置信息。若未查询到,则进行步骤S708;若查询到,则进行步骤S703。
在本实施例中,位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息。具体查询过程在上文中已经进行详细描述,在此不再赘述。
在步骤S703中,利用该位置信息中的数据块识别信息从第二索引查询对应的数据块信息。在本实施例中,数据块信息包括数据块状态、内存指针以及固态存储器文件描述符等。
在步骤S704中,根据数据块状态判定对应数据块是位于内存中还是位于固态存储器,若对应数据块位于内存中,则进行步骤S705,若对应数据块位于固态存储器中,则进行步骤S706。
如上文所描述的,如果数据块状态为“内存”、“写入”以及“重建”,则表示该数据块位于内存中。如果数据块状态为“固态存储”以及“读取”,则表示该数据块位于固态存储器中。
在步骤S705中,根据内存指针、数据项偏移信息以及数据项长度信息在内存中读取对应数据项。
在步骤S706中,根据固态存储器文件描述符、数据项偏移信息以及数据项长度信息在固态存储器中读取对应数据项。
在步骤S707中,判断对应数据项的关键字与待读取数据项的关键字是否一致,若不一致,则进行步骤S708;若一致,则进行步骤S709。
在步骤S708中,判定待读取数据项不存在。
在步骤S709中,判定读取成功,并将对应数据项的数据值作为待读取数据项的数据值。
请参阅图8,图8为本发明实施例的数据库写入操作的流程示意图。
在步骤S801中,接收写入操作指令以及待写入数据项的关键字及数据值。
在步骤S802中,利用该关键字从第一索引查询对应的位置信息。若查询到,则进行步骤S803;若没有查询到,则进行步骤S809。
在本实施例中,位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息。具体查询过程在上文中已经进行详细描述,在此不再赘述。
在步骤S803中,利用该位置信息中的数据块识别信息从第二索引查询对应的数据块信息。在本实施例中,数据块信息包括数据块状态、内存指针以及固态存储器文件描述符等。
在步骤S804中,根据数据块状态判定对应数据块位于内存中还是位于固态存储器中,若对应数据块位于内存中,则进行步骤S805,若对应数据块位于固态存储器中,则进行步骤S806。
如上文所描述的,如果数据块状态为“内存”、“写入”以及“重建”,则表示该数据块位于内存中。如果数据块状态为“固态存储”以及“读取”,则表示该数据块位于固态存储器中。
在步骤S805中,根据内存指针、数据项偏移信息以及数据项长度信息在内存中读取对应数据项。
在步骤S806中,根据固态存储器文件描述符、数据项偏移信息以及数据项长度信息在固态存储器中读取对应数据项;
在步骤S807中,判断对应的数据项的数据值与待写入数据项的数据值是否一致:若一致,则写入成功;若不一致,则进行步骤S808;
在步骤S808中,在对应数据项所属数据块的数据项有效位图中将该对应数据项标识删除。具体来说,在数据项有效位图中将对应位置0。
在步骤S809中,将待写入数据项写入位于内存中的用于接收待写入数据项的数据块内,即处于“内存”状态的数据块。随后,更新第一索引及第二索引以记录上述写入过程。
请参阅图9,图9是图8中的步骤S809的具体流程示意图。
在步骤S901中,判断内存中的处于“内存”状态的数据块是否已经写满,若未写满,则进行步骤S902,若写满,则进行步骤S903。具体来说,可通过数据块长度信息与内存数据块容量之间的比较结果来确定该数据块是否写满。
在步骤S902中,直接将待写入数据项写入到数据块的末端,并更新第一索引及第二索引。
在步骤S903中,将该数据块的数据块状态标记为“写入”状态。随后,进入步骤S904和步骤S905。
在步骤S904中,将该数据块写入固态存储器,同时进一步更新第一索引及第二索引。在写入完成后,将该数据块的数据块状态改为“固态存储”状态,同时在内存中释放该数据块。
在步骤S905中,创建标记为“内存”状态的新数据块,并将待写入数据项写入到新数据块的末端,并更新第一索引及第二索引。
通过上述方式,步骤S904和步骤S905可以并行进行,由此实现了读写分离。此外,处于“写入”状态的数据块中的数据项以受控的速率写入固态存储器,譬如受控的速率为5MB/S。本发明通过设置受控的速率,有效地防止了写入数据时对读取性能造成的影响。
请参阅图10,图10为本发明实施例的数据库导出操作的流程示意图。
在步骤S1001中,接收导出操作指令。
在步骤S1002中,对内存和固态存储器进行加锁,其中,在加锁状态下,禁止对内存和固态存储器进行修改。
在步骤S1003中,从内存的第二索引中复制待导出数据块对应的元信息。在本实施例中,待导出数据块可以是全部数据块或者预定数量的数据块。如上文所述的,元信息包括数据块识别信息、数据块长度信息、数据项总数、有效数据项个数以及数据项有效位图。
在步骤S1004中,对待导出数据块的引用计数进行引用标记操作,以避免待导出数据块被删除。例如,对引用计数加一或加特定步长。
在步骤S1005中,对内存和固态存储器进行解锁,其中,在解锁状态下,允许对内存和固态存储器进行修改。由于元信息的复制时间很短,数据块的后续导出可在后台进行,避免了影响数据块的读取及写入操作。
在步骤S1006中,将元信息写入元信息文件。
在步骤S1007中,根据元信息从内存或固态存储器上读取待导出数据块,并根据待导出数据块的关键字生成导出索引。
在步骤S1008中,将导出索引写入导出索引文件。
在步骤S1009中,将待导出数据块写入数据块文件。在本实施例中,元信息文件、导出索引文件以及数据块文件可在接到导出操作指令时创建,也可以在其他任意适当时刻创建。
在步骤S1010中,对待导出数据块的引用计数进行引用解除操作。例如,对引用计数减一或减特定步长。此时,如果数据块已经处于“删除”状态,且没有其他线程引用该数据块,则删除该数据块。
请参阅图11,图11为本发明实施例的数据库控制装置的结构示意图。该控制装置包括操作信息接收模块1101、索引信息查询模块1102以及数据块处理模块1103。
其中,操作信息接收模块1101用于接收上述操作信息。
索引信息查询模块1102用于根据上述操作信息在位于内存的索引中查询对应数据块的索引信息。在本实施例中,对应数据块包括多个数据项,每一数据项包括关键字与数据值,并且对应数据块可选择性位于内存及固态存储器中。
数据块处理模块1103用于根据上述操作信息及索引信息对对应数据块进行相应操作。
在具体实施过程中,索引包括上述的第一索引和第二索引。索引信息查询模块1102根据第一索引查询与关键字对应的位置信息,位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息。索引信息查询模块1102进一步根据第二索引查询与数据块识别信息对应的数据块信息,数据块信息包括数据块状态、内存指针以及固态存储器文件描述符等。
关于数据库控制装置的详细工作过程请参阅上文的描述,此处不再赘述。
由以上技术方案可以看出,本发明的数据库的控制方法及装置以数据块形式对多个数据项进行存储,并根据不同状态将数据块选择性存储于内存及固态存储中,进一步配合内存索引,可支持高性能读写操作,满足了对数据的高性能随机查询与更新需求。
在上述实施例中,仅对本发明进行了示范性描述,但是本领域技术人员在阅读本专利申请后可以在不脱离本发明的精神和范围的情况下对本发明进行各种修改。
Claims (22)
1.一种数据库的控制方法,其特征在于,所述控制方法包括以下步骤:
a.接收操作信息;
b.根据所述操作信息在位于内存的索引中查询对应数据块的索引信息,其中所述对应数据块包括多个数据项,每一所述数据项包括关键字与数据值,所述对应数据块选择性位于所述内存及固态存储器中;
c.根据所述操作信息及所述索引信息对所述对应数据块进行相应操作。
2.如权利要求1所述的方法,其特征在于,在所述步骤a中,接收读取操作指令以及待读取数据项的关键字,在所述步骤b中,根据所述待读取数据项的关键字查询所述索引信息,在所述步骤c中,若查询到所述索引信息,则根据所述索引信息判断所述对应数据块位于所述内存中还是位于所述固态存储器中,并根据判断结果,选择从所述内存或所述固态存储器中读取对应数据项。
3.如权利要求2所述的方法,其特征在于,所述索引包括第一索引和第二索引,在所述步骤b进一步包括:
根据所述第一索引查询与所述待读取数据项的关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;以及
根据所述第二索引查询与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符,
在所述步骤c中,根据所述数据块状态判断所述对应数据块位于所述内存还是位于所述固态存储器。
4.如权利要求3所述的方法,其特征在于,在所述步骤c中,若所述数据块位于所述内存,则根据所述内存指针、所述数据项偏移信息以及所述数据项长度信息读取所述对应数据项。
5.如权利要求3所述的方法,其特征在于,在所述步骤c中,若所述数据块位于所述固态存储器,则根据所述固态存储器文件描述符、所述数据项偏移信息以及所述数据项长度信息读取所述对应数据项。
6.如权利要求2所述的方法,其特征在于,所述步骤c进一步包括:判断所述对应数据项的关键字与所述待读取数据项的关键字是否一致,若不一致,则判定所述待读取数据项不存在,若一致,则将所述对应数据项的数据值作为所述待读取数据项的数据值。
7.如权利要求1所述的方法,其特征在于,在步骤a中,接收写入操作指令以及待写入数据项,在所述步骤b中,根据所述待写入数据项的关键字查询所述索引信息。
8.如权利要求7所述的方法,其特征在于,所述步骤c进一步包括:若未查询到所述索引信息,则将所述待写入数据项写入位于所述内存中的用于接收所述待写入数据项的数据块内,并更新所述索引。
9.如权利要求8所述的方法,其特征在于,所述步骤c进一步包括:在所述数据块写满后,将所述数据块写入所述固态存储器,并进一步更新所述索引。
10.如权利要求8或9所述的方法,其特征在于,所述索引包括第一索引和第二索引,所述步骤c进一步包括:
在所述第一索引中记录与所述待写入数据项的关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;以及
在所述第二索引中记录与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符。
11.如权利要求7所述的方法,其特征在于,所述步骤c进一步包括:若查询到所述索引信息,则根据所述索引信息判断所述对应数据块位于所述内存中还是位于所述固态存储器中,并根据判断结果,选择从所述内存或所述固态存储器中读取对应数据项,判断所述对应数据项的数据值与所述待写入数据项的数据值是否一致。
12.如权利要求11所述的方法,其特征在于,所述步骤c进一步包括:若所述对应数据项的数据值与所述待写入数据项的数据值一致,则退出。
13.如权利要求11所述的方法,其特征在于,所述步骤c进一步包括:若所述对应数据项的数据值与所述待写入数据项的数据值不一致,则将所述待写入数据项写入位于所述内存中的用于接收所述待写入数据项的数据块内,并更新所述索引。
14.如权利要求13所述的方法,其特征在于,所述步骤c进一步包括:在所述数据块写满后,将所述数据块写入所述固态存储器,并进一步更新所述索引。
15.如权利要求13或14所述的方法,其特征在于,所述索引包括第一索引和第二索引,所述步骤c进一步包括:
在所述第一索引中记录与所述待写入数据项的关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;以及
在所述第二索引中记录与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符。
16.如权利要求15所述的方法,其特征在于,所述数据块信息进一步包括数据项有效位图,所述步骤c进一步包括:在所述对应数据块的所述数据项有效位图中将所述对应数据项标记删除。
17.如权利要求1所述的方法,其特征在于,在所述步骤b中,根据所述索引信息确定所述对应数据块中的有效数据项的个数是否低于阈值,在所述步骤c中,如果所述有效数据项的个数低于阈值,则将所述对应数据块中的有效数据项重新写入位于所述内存中的用于接收待写入数据项的数据块内,并更新所述索引。
18.如权利要求1所述的方法,其特征在于,在步骤a中,接收导出操作指令,在步骤b中,根据所述索引信息确定待导出数据块的元信息,其中,所述元信息包括数据块识别信息、数据块长度信息、数据项总数、有效数据项个数以及数据项有效位图,在所述步骤c中,根据所述元信息导出所述待导出数据块。
19.如权利要求18所述的方法,其特征在于,所述步骤b包括:
b1.对所述内存和所述固态存储器进行加锁,其中,在加锁状态下,禁止对所述内存和所述固态存储器进行修改;
b2.从所述索引中复制所述待导出数据块对应的元信息;
b3.对所述待导出数据块的引用计数进行引用标记操作,以避免所述待导出数据块被删除;
b4.对所述内存和所述固态存储器进行解锁,其中,在解锁状态下,允许对所述内存和所述固态存储器进行修改。
20.如权利要求19所述的方法,其特征在于,所述步骤c包括:
c1.将所述元信息写入元信息文件;
c2.根据所述元信息从所述内存或所述固态存储器上读取所述待导出数据块,并根据所述待导出数据块的关键字生成导出索引;
c3.将所述导出索引写入导出索引文件;
c4.将所述待导出数据块写入数据块文件;
c5.对所述待导出数据块的引用计数进行引用解除操作。
21.一种数据库的控制装置,其特征在于,所述控制装置包括:
操作信息接收模块,用于接收操作信息;
索引信息查询模块,根据所述操作信息在位于内存的索引中查询对应数据块的索引信息,其中所述对应数据块包括多个数据项,每一所述数据项包括关键字与数据值,所述对应数据块选择性位于所述内存及固态存储器中;
数据块处理模块,用于根据所述操作信息及所述索引信息对所述对应数据块进行相应操作。
22.如权利要求21所述的装置,其特征在于,所述索引包括第一索引和第二索引,
所述索引信息查询模块根据所述第一索引查询与所述关键字对应的位置信息,所述位置信息包括数据块识别信息、数据项偏移信息以及数据项长度信息;
所述索引信息查询模块根据所述第二索引查询与所述数据块识别信息对应的数据块信息,所述数据块信息包括数据块状态、内存指针以及固态存储器文件描述符。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010619673 CN102567415B (zh) | 2010-12-31 | 2010-12-31 | 一种数据库的控制方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201010619673 CN102567415B (zh) | 2010-12-31 | 2010-12-31 | 一种数据库的控制方法和装置 |
Related Child Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201110036319.6A Division CN102541968B (zh) | 2010-12-31 | 2010-12-31 | 一种索引方法 |
CN 201110036318 Division CN102567434B (zh) | 2010-12-31 | 2010-12-31 | 一种数据块处理方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102567415A true CN102567415A (zh) | 2012-07-11 |
CN102567415B CN102567415B (zh) | 2013-11-06 |
Family
ID=46412845
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201010619673 Active CN102567415B (zh) | 2010-12-31 | 2010-12-31 | 一种数据库的控制方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102567415B (zh) |
Cited By (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929981A (zh) * | 2012-10-17 | 2013-02-13 | Tcl通力电子(惠州)有限公司 | 多媒体扫描文件索引方法及装置 |
CN104008111A (zh) * | 2013-02-27 | 2014-08-27 | 深圳市腾讯计算机系统有限公司 | 一种数据的存储管理方法及装置 |
WO2014190700A1 (zh) * | 2013-05-30 | 2014-12-04 | 华为技术有限公司 | 一种内存访问的方法、缓冲调度器和内存模块 |
CN104750720A (zh) * | 2013-12-30 | 2015-07-01 | 中国银联股份有限公司 | 多线程并发访问环境下高性能数据处理的实现 |
CN103049393B (zh) * | 2012-10-23 | 2015-11-25 | 北京奇虎科技有限公司 | 内存空间管理方法和装置 |
CN105117489A (zh) * | 2015-09-21 | 2015-12-02 | 北京金山安全软件有限公司 | 一种数据库管理方法、装置及电子设备 |
CN106484770A (zh) * | 2016-09-09 | 2017-03-08 | 中国互联网络信息中心 | 一种dns增量区域数据文件的处理方法 |
CN107273419A (zh) * | 2017-05-11 | 2017-10-20 | 广东网金控股股份有限公司 | 一种系统读取数据方法及装置 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858737A (zh) * | 2006-01-25 | 2006-11-08 | 华为技术有限公司 | 一种数据搜索的方法和系统 |
CN101169761A (zh) * | 2007-12-03 | 2008-04-30 | 腾讯数码(天津)有限公司 | 大容量缓存实现方法及存储系统 |
CN101251861A (zh) * | 2008-03-18 | 2008-08-27 | 北京锐安科技有限公司 | 一种海量数据加载和查询的方法 |
CN101655858A (zh) * | 2009-08-26 | 2010-02-24 | 华中科技大学 | 一种基于分块组织的密文索引结构及其管理方法 |
CN101676899A (zh) * | 2008-09-18 | 2010-03-24 | 上海宝信软件股份有限公司 | 海量数据库记录的归档和查询方法 |
-
2010
- 2010-12-31 CN CN 201010619673 patent/CN102567415B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1858737A (zh) * | 2006-01-25 | 2006-11-08 | 华为技术有限公司 | 一种数据搜索的方法和系统 |
CN101169761A (zh) * | 2007-12-03 | 2008-04-30 | 腾讯数码(天津)有限公司 | 大容量缓存实现方法及存储系统 |
CN101251861A (zh) * | 2008-03-18 | 2008-08-27 | 北京锐安科技有限公司 | 一种海量数据加载和查询的方法 |
CN101676899A (zh) * | 2008-09-18 | 2010-03-24 | 上海宝信软件股份有限公司 | 海量数据库记录的归档和查询方法 |
CN101655858A (zh) * | 2009-08-26 | 2010-02-24 | 华中科技大学 | 一种基于分块组织的密文索引结构及其管理方法 |
Cited By (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102929981A (zh) * | 2012-10-17 | 2013-02-13 | Tcl通力电子(惠州)有限公司 | 多媒体扫描文件索引方法及装置 |
CN102929981B (zh) * | 2012-10-17 | 2016-09-21 | Tcl通力电子(惠州)有限公司 | 多媒体扫描文件索引方法及装置 |
CN103049393B (zh) * | 2012-10-23 | 2015-11-25 | 北京奇虎科技有限公司 | 内存空间管理方法和装置 |
CN104008111A (zh) * | 2013-02-27 | 2014-08-27 | 深圳市腾讯计算机系统有限公司 | 一种数据的存储管理方法及装置 |
CN104008111B (zh) * | 2013-02-27 | 2019-02-15 | 深圳市腾讯计算机系统有限公司 | 一种数据的存储管理方法及装置 |
CN104216834B (zh) * | 2013-05-30 | 2017-10-10 | 华为技术有限公司 | 一种内存访问的方法、缓冲调度器和内存模块 |
WO2014190700A1 (zh) * | 2013-05-30 | 2014-12-04 | 华为技术有限公司 | 一种内存访问的方法、缓冲调度器和内存模块 |
CN104216834A (zh) * | 2013-05-30 | 2014-12-17 | 华为技术有限公司 | 一种内存访问的方法、缓冲调度器和内存模块 |
US9785551B2 (en) | 2013-05-30 | 2017-10-10 | Huawei Technologies Co., Ltd. | Memory access method, buffer scheduler and memory module |
CN104750720B (zh) * | 2013-12-30 | 2018-04-27 | 中国银联股份有限公司 | 多线程并发访问环境下高性能数据处理的实现 |
CN104750720A (zh) * | 2013-12-30 | 2015-07-01 | 中国银联股份有限公司 | 多线程并发访问环境下高性能数据处理的实现 |
CN105117489A (zh) * | 2015-09-21 | 2015-12-02 | 北京金山安全软件有限公司 | 一种数据库管理方法、装置及电子设备 |
CN105117489B (zh) * | 2015-09-21 | 2018-10-19 | 北京金山安全软件有限公司 | 一种数据库管理方法、装置及电子设备 |
CN106484770A (zh) * | 2016-09-09 | 2017-03-08 | 中国互联网络信息中心 | 一种dns增量区域数据文件的处理方法 |
CN106484770B (zh) * | 2016-09-09 | 2019-08-06 | 中国互联网络信息中心 | 一种dns增量区域数据文件的处理方法 |
CN107273419A (zh) * | 2017-05-11 | 2017-10-20 | 广东网金控股股份有限公司 | 一种系统读取数据方法及装置 |
CN107273419B (zh) * | 2017-05-11 | 2021-04-23 | 深圳市博世创兴科技有限公司 | 一种系统读取数据方法及装置 |
Also Published As
Publication number | Publication date |
---|---|
CN102567415B (zh) | 2013-11-06 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102567434B (zh) | 一种数据块处理方法 | |
CN102541968B (zh) | 一种索引方法 | |
CN102567415B (zh) | 一种数据库的控制方法和装置 | |
CN103080910B (zh) | 存储系统 | |
JP5996088B2 (ja) | 暗号ハッシュ・データベース | |
US9858303B2 (en) | In-memory latch-free index structure | |
CN104346357B (zh) | 一种嵌入式终端的文件存取方法及系统 | |
CN110119425A (zh) | 固态驱动器、分布式数据存储系统和利用键值存储的方法 | |
CN103164490B (zh) | 一种不固定长度数据的高效存储实现方法和装置 | |
JP2017504924A (ja) | ファイルシステムのコンテンツベースの編成 | |
CN104424219B (zh) | 一种数据文件的管理方法及装置 | |
CN105474196A (zh) | 用于管理集成数据对象的系统及其方法 | |
CN103186617B (zh) | 一种存储数据的方法和装置 | |
CN101419571A (zh) | 基于Hash算法的在NOR FLASH中存储配置参数的方法 | |
CN110888837B (zh) | 对象存储小文件归并方法及装置 | |
WO2015093026A1 (ja) | 書き込み情報記憶装置、方法、及び、記録媒体 | |
CN109407985B (zh) | 一种数据管理的方法以及相关装置 | |
CN103617097A (zh) | 文件恢复方法及装置 | |
CN105045850A (zh) | 云存储日志文件系统中垃圾数据回收方法 | |
CN103914483A (zh) | 文件存储方法、装置及文件读取方法、装置 | |
CN112131140A (zh) | 基于ssd的支持高效存储空间管理的键值分离存储方法 | |
CN110134335A (zh) | 一种基于键值对的rdf数据管理方法、装置及存储介质 | |
US8239427B2 (en) | Disk layout method for object-based storage devices | |
CN110352410A (zh) | 跟踪索引节点的访问模式以及预提取索引节点 | |
US10146466B1 (en) | Merging mapping metadata to promote reference counting efficiency |
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 |