发明内容
本发明的主要目的在于提供一种内存数据库的管理方法和装置,以至少解决现有技术中磁盘I/O的传输速度较低的问题。
根据本发明的一个方面,提供了一种内存数据库的管理方法方法,其包括:在内存数据库中设置记录存储区和位图区,其中,上述位图区中的比特位指示上述记录存储区中的存储单元是否空闲;根据上述位图区对上述记录存储区中的存储单元执行管理操作。
进一步地,根据上述位图区对上述记录存储区中的存储单元执行管理操作包括:当接收到的操作信息指示对上述记录存储区中的第一存储单元执行删除操作时,将上述位图区中与上述第一存储单元对应的比特位的值设置成指示上述第一存储单元空闲,其中,上述第一存储单元包括一个或多个存储单元。
进一步地,根据上述位图区对上述记录存储区中的存储单元执行管理操作还包括:当接收到的操作信息指示对上述记录存储区中的第一存储单元执行修改操作时,对上述第一存储单元执行上述删除操作,再对上述第一存储单元执行插入操作。
进一步地,对上述第一存储单元执行插入操作包括:按照地址顺序查找地址最小的空闲存储单元;将修改后的第一存储单元插入到上述查找到的地址最小的空闲存储单元中。
进一步地,上述在内存数据库中设置记录存储区和位图区包括:按照操作系统页划分上述内存数据库中的记录存储区,其中,一个上述操作系统页对应上述记录存储区中的一个或多个存储单元。
进一步地,在内存数据库中设置记录存储区和位图区之后,还包括:在磁盘上创建与上述记录存储区和位图区相同的记录存储区和位图区。
进一步地,在根据上述位图区对上述记录存储区中的存储单元执行管理操作之后,还包括:若执行管理操作的存储单元的数量达到预定的阈值,或者,距离上一次执行管理操作超过预定的时间,则将上述内存数据库中的记录存储区和位图区同步到上述磁盘上的记录存储区和位图区。
根据本发明的另一方面,提供了一种内存数据库的管理装置,其包括:设置单元,用于在内存数据库中设置记录存储区和位图区,其中,上述位图区中的比特位指示上述记录存储区中的存储单元是否空闲;管理单元,用于根据上述位图区对上述记录存储区中的存储单元执行管理操作。
进一步地,上述管理单元包括:设置模块,用于当接收到的操作信息指示对上述记录存储区中的第一存储单元执行删除操作时,将上述位图区中与上述第一存储单元对应的比特位的值设置成指示上述第一存储单元空闲,其中,上述第一存储单元包括一个或多个存储单元。
进一步地,上述设置模块还用于在接收到的操作信息指示对上述记录存储区中的第一存储单元执行修改操作时,对上述第一存储单元执行上述删除操作;上述管理单元还包括:查找模块,用于在接收到的操作信息指示对上述记录存储区中的第一存储单元执行修改操作时,按照地址顺序查找地址最小的空闲存储单元;插入模块,用于将修改后的第一存储单元插入到上述查找到的地址最小的空闲存储单元中。
通过本发明,采用了位图区来指示内存数据库中的存储单元是否被占用,从而在对存储单元进行管理操作时,可以只对位图区进行操作,而不对存储单元进行操作,从而减少了寻址和更新的时间,解决现有技术中磁盘I/O的传输速度较低的问题。
具体实施方式
下文中将参考附图并结合实施例来详细说明本发明。需要说明的是,在不冲突的情况下,本申请中的实施例及实施例中的特征可以相互组合。
实施例1
图1是根据本发明实施例的内存数据库的管理方法的流程图,其包括如下步骤:
S102,在内存数据库中设置记录存储区和位图区,其中,上述位图区中的比特位指示上述记录存储区中的存储单元是否空闲;
S104,根据上述位图区对上述记录存储区中的存储单元执行管理操作。
通过本发明,采用了位图区来指示内存数据库中的存储单元是否被占用,从而在对存储单元进行管理操作时,可以只对位图区进行操作,而不对存储单元进行操作,从而减少了寻址和更新的时间,解决现有技术中磁盘I/O的传输速度较低的问题。
优选的,根据所述位图区对所述记录存储区中的存储单元执行管理操作包括:当接收到的操作信息指示对所述记录存储区中的第一存储单元执行删除操作时,将所述位图区中与所述第一存储单元对应的比特位的值设置成指示所述第一存储单元空闲,其中,所述第一存储单元包括一个或多个存储单元。也就是说,在执行存储单元的删除操作时,并没有实际删除该存储单元中的数据,而是将所述位图区中与该存储单元对应的比特位的值设置成指示所述第一存储单元空闲。通过本实施例中的方法,将删除操作需要同步的数据量缩小到一个或多个比特位,从而减少了I/O的数据量,提高了磁盘I/O的传输速度。
例如,比特位的值为0时,表示其所对应的存储单元空闲;比特位的值为1时,表示其所对应的存储单元被占用。当执行第一存储单元的删除操作时,将与第一存储单元对应的比特位置0,而不删除第一存储单元中的数据。
优选的,根据所述位图区对所述记录存储区中的存储单元执行管理操作还包括:当接收到的操作信息指示对所述记录存储区中的第一存储单元执行修改操作时,对所述第一存储单元执行所述删除操作,再对所述第一存储单元执行插入操作。通过本实施例中的方法,减少了执行修改操作时的I/O的数据量,进一步提高了磁盘I/O的传输速度。
优选的,对所述第一存储单元执行插入操作包括:按照地址顺序查找地址最小的空闲存储单元;将修改后的第一存储单元插入到所述查找到的地址最小的空闲存储单元中。通过本实施例中,按照地址顺序递增优先寻找空闲存储单元,这样,就保证了记录存储区内的数据更新趋于集中到连续的地址范围内,缩短了寻址的时间,继而提高同步磁盘的效率。
优选的,所述在内存数据库中设置记录存储区和位图区包括:按照操作系统页划分所述内存数据库中的记录存储区,其中,一个所述操作系统页对应所述记录存储区中的一个或多个存储单元。通过本实施例,以操作系统页为单元划分存储单元,有利于提高操作系统的管理效率。
优选的,在内存数据库中设置记录存储区和位图区之后,还包括:在磁盘上创建与所述记录存储区和位图区相同的记录存储区和位图区。通过本实施例,将内存数据库中的记录存储区和位图区同步映射到磁盘中,进一步保证了内存中数据的安全性。
优选的,在根据所述位图区对所述记录存储区中的存储单元执行管理操作之后,还包括:若执行管理操作的存储单元的数量达到预定的阈值,或者,距离上一次执行管理操作超过预定的时间,则将所述内存数据库中的记录存储区和位图区同步到所述磁盘上的记录存储区和位图区。通过本实施例,可以灵活地控制同步的时间。
实施例2
在本实施例中,内存数据的管理方法包括以下步骤:
S1,在内存数据库创建多个内存表,每个内存表包含记录存储区与位图区,其中,记录存储区使用存储单元保存内存表中的数据记录,位图区用于保存记录存储区中存储单元的使用情况,位图区用一个BIT位表示一条存储单元的使用情况。
S2,在磁盘上创建内存数据库的内存表的对应存储文件。优选的,磁盘上的存储文件包括内存表的记录存储区中的数据、位图区中的数据、控制信息,其中,控制信息包括以下信息之一:内存表记录长度、版本信息、记录存储区的偏移、位图区的偏移。
S3,创建磁盘上的存储文件与内存数据库的内存表之间的映射,内存数据库通过内存指针对磁盘上的存储文件进行访问。优选的,每个内存表可以对应一个内存文件映射区,或者,多个内存表对应一个内存文件映射区。
S4,当修改映射内存文件映射区时,即完成一次同步磁盘的操作。在本发明中,内存文件映射区就相当于磁盘文件,对该映射区的修改即是对磁盘文件的修改。
S5,当对内存中的存储单元进行修改时,在内存中创建脏数据缓冲区,其中,脏数据缓冲区用于记录对应内存表的脏数据(即,被修改的存储单元中的数据)。优选的,脏数据包括以下至少之一:内粗表ID、内存表插入的新数据、内存表修改的数据、脏数据在内存表数据区的偏移、脏数的长度、内存表的位图区。优选的,每个内存表可以对应一个脏数据缓冲区,或者,多个内存表对应一个脏数据缓冲区。
S6,当对内存表执行增加、删除、修改操作时,将变动的数据写入脏数据缓冲区。
S7,当脏数据区存储的脏数据达到阈值,或者距离上一次修改内存文件映射区的时间间隔超过阈值时,则执行一次脏数据区到磁盘上的文件映射区的数据同步。
优选的,脏数据区到文件映射区的数据同步,逐一读取脏数据记录,根据内存表ID、脏数据偏移、脏数据长度将脏数据记录拷贝到文件映射区对应的偏移位置;脏数据区内的位图数据直接整体拷贝到文件映射区的位图数据区。
S8,脏数据区的所有记录都同步到文件映射区后,将脏数据区清空。
在本实施例中,为了降低同步磁盘的数据总量。内存表管理增加了位图区,该区通过BIT位标识一个内存表存储单元的占用与否。当执行内存表存储记录删除时,只需要更新一个或多个BIT位,这样避免了对实际存储单元的清除处理。从而将删除操作需要同步的数据量缩小到一个BIT位,减少了系I/O传输的数据量,提高了I/O的传输速度。
为了提高磁盘的寻址效率,将内存表的数据修改请求,变更为删除操作与插入操作。即,先执行上述的删除操作,然后,在对修改后的数据进行插入操作。在执行插入操作过程中,按照地址顺序递增优先寻找空闲存储单元(例如,寻找地址最小的空闲存储单元),然后,将修改后的数据插入到所寻找到的空闲存储单元中。这样就保证了记录存储区内的更新后的存储单元集中到连续的地址范围内,继而提高同步磁盘的效率。
当内存数据库重新启动时,首先检查磁盘同步的完整性与正确性,包括检查文件的版本、内存记录长度、校验信息等。当检查通过后,根据文件内的控制信息加载文件内的位图区数据、记录数据区数据在内存表的位图区和记录数据区。最后根据位图区占用标识,逐一扫描记录数据区,重新创建内存表的索引。
实施例3
本发明还提供了一种内存数据库的管理装置的实施例,其可以使用上述实施1-2中的管理方法来对内存数据库中的数据进行管理。
图2是根据本发明实施例的内存数据库的管理装置的一种优选的结构示意图,其包括:设置单元202,用于在内存数据库中设置记录存储区和位图区,其中,所述位图区中的比特位指示所述记录存储区中的存储单元是否空闲;管理单元204,用于根据所述位图区对所述记录存储区中的存储单元执行管理操作。
通过本发明,采用了位图区来指示内存数据库中的存储单元是否被占用,从而在对存储单元进行管理操作时,可以只对位图区进行操作,而不对存储单元进行操作,从而减少了寻址和更新的时间,解决现有技术中磁盘I/O的传输速度较低的问题。
优选的,所述管理单元包括204:设置模块2041,用于当接收到的操作信息指示对所述记录存储区中的第一存储单元执行删除操作时,将所述位图区中与所述第一存储单元对应的比特位的值设置成指示所述第一存储单元空闲,其中,所述第一存储单元包括一个或多个存储单元。也就是说,在执行存储单元的删除操作时,并没有实际删除该存储单元中的数据,而是将所述位图区中与该存储单元对应的比特位的值设置成指示所述第一存储单元空闲。通过本实施例中的方法,将删除操作需要同步的数据量缩小到一个或多个比特位,从而减少了I/O的数据量,提高了磁盘I/O的传输速度。
优选的,所述设置模块2041还用于在接收到的操作信息指示对所述记录存储区中的第一存储单元执行修改操作时,对所述第一存储单元执行所述删除操作;所述管理单元204还包括:查找模块2042,用于在接收到的操作信息指示对所述记录存储区中的第一存储单元执行修改操作时,按照地址顺序查找地址最小的空闲存储单元;插入模块2043,用于在设置模块2041对所述第一存储单元执行所述删除操作之后,将修改后的第一存储单元插入到所述查找到的地址最小的空闲存储单元中。通过本实施例中,按照地址顺序递增优先寻找空闲存储单元,这样,就保证了记录存储区内的数据更新趋于集中到连续的地址范围内,继而提高同步磁盘的效率。
优选的,所述在内存数据库中设置记录存储区和位图区包括:按照操作系统页划分所述内存数据库中的记录存储区,其中,一个所述操作系统页对应所述记录存储区中的一个或多个存储单元。通过本实施例,以操作系统页为单元划分存储单元,有利于提高操作系统的管理效率。
优选的,在内存数据库中设置记录存储区和位图区之后,上述内存数据库的管理装置在磁盘上创建与所述记录存储区和位图区相同的记录存储区和位图区。通过本实施例,将内存数据库中的记录存储区和位图区同步映射到磁盘中,进一步保证了内存中数据的安全性。
优选的,在根据所述位图区对所述记录存储区中的存储单元执行管理操作之后,若执行管理操作的存储单元的数量达到预定的阈值,或者,距离上一次执行管理操作超过预定的时间,上述内存数据库的管理装置将所述内存数据库中的记录存储区和位图区同步到所述磁盘上的记录存储区和位图区。通过本实施例,可以灵活地控制同步的时间。
实施例4
图3是根据本发明实施例的内存数据库的管理装置的另一种优选的结构示意图,其包括:配置管理单元302、初始化管理单元304、内存表管理单元306、文件映射管理单元308、内存数据区310、内存文件映射区312以及映射文件314。上述元件的连接关系如图3所示。
配置管理单元302实现内存数据库信息配置管理,包括内存表大小、磁盘映射文件的存储路径等;
初始化管理单元304实现内存数据库进程创建、内存空间申请以及通知内存表管理单元与文件映射管理单元创建内存表与创建映射区等;
内存表管理单元306实现内存表的创建以及对外提供内存表访问接口,如内存表查询、修改、删除等;
文件映射管理单元308实现内存文件映射区的创建以及脏数据同步到磁盘文件的管理;
内存数据区310保存内存表以及脏数据区;
内存文件映射区312为磁盘文件在数据库进程内存的内存文件映射;
映射文件314为内存数据库各个内存表在磁盘的同步文件。
上述几个管理单元具体实现既可以合一设置,也能够以独立的进程方式实现,具体实施时可以根据设计需要灵活选择组织方式。
本实施例中的内存数据库的管理装置采用内存文件映射实现内存表数据到磁盘的快速同步,提高了内存数据库的数据安全性;并且无需进行主备内存数据库数据同步,降低了设备成本和设备维护复杂度。此外,还提供内存表位图管理、数据修改操作转换处理、空闲存储单元按照地址顺序寻址管理,进一步提高了数据库磁盘同步性能。
综上所述,采用本发明所述方案,可以有效提高全内存数据库的容灾能力和磁盘同步能力,具有很强的通用性。本发明已在短消息中心系统中应用,起到明显的优化作用。
显然,本领域的技术人员应该明白,上述的本发明的各模块或各步骤可以用通用的计算装置来实现,它们可以集中在单个的计算装置上,或者分布在多个计算装置所组成的网络上,可选地,它们可以用计算装置可执行的程序代码来实现,从而,可以将它们存储在存储装置中由计算装置来执行,并且在某些情况下,可以以不同于此处的顺序执行所示出或描述的步骤,或者将它们分别制作成各个集成电路模块,或者将它们中的多个模块或步骤制作成单个集成电路模块来实现。这样,本发明不限制于任何特定的硬件和软件结合。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。