具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
针对现有技术向日志磁盘写入日志数据的效率相对较低的问题,本申请实施例提供一种解决方案,基本原理是:以日志磁盘中物理扇区的大小大于或等于日志元信息大小与基准数据块大小之和为基础,在向日志磁盘中写入待写入日志项时,结合地址对齐以及数据拼接可以将待写入日志项拼接为内存块,使得可以通过更少的IO操作将待写入日志项写入日志磁盘的物理扇区中,减小向日志磁盘中写入日志项所需要的IO操作的次数,提高了向日志磁盘中写入日志项的执行效率。
以下结合附图,详细说明本申请各实施例提供的技术方案。
图1为本申请一示例性实施例提供的基于日志的存储系统100的结构示意图。如图1所示,该存储系统100包括:存储管理设备10、日志磁盘20以及数据库30。
存储管理设备10主要负责存储系统100的存储控制逻辑,例如对外提供读、写、查询数据库30的功能等。存储管理设备10可以是任何具有处理能力的设备,例如可以是服务器、台式计算机、个人计算机、手机、平板电脑等。服务器可以是常规服务器、云服务器、云主机、虚拟中心等。存储管理设备10的实现结构可以包括处理器、系统总线以及硬盘、内存等至少一块物理存储介质。
数据库30主要按照一定的数据结构来组织、存储和管理存储系统100中的数据。数据库30可以是各种类型的数据库,本实施例对此不做限定。例如,从数据库开发者角度来看,数据库30可以是Oracle、DB2、Sybase、MS SQL Server、Informax、MySQL等。从数据组织结构角度来看,数据库30可以是网状数据库(Network Database)、关系数据库(RelationalDatabase)、树状数据库(Hierarchical Database)、面向对象数据库(Object-orientedDatabase)等。
本实施例提供的存储系统100面向使用者提供存储功能。存储系统100的使用者可以是对存储系统100具有访问和/或使用权限的计算机、虚拟机、各类应用、终端设备以及用户等。存储系统10的使用者可以有一个或多个。使用者在使用存储系统100的过程中,可以向存储系统100中的存储管理设备10发送操作请求。存储管理设备10接收使用者发送的操作请求,根据操作请求中的数据库地址,对数据库30中相应地址处的数据进行操作,例如可以读取数据并返回给使用者,或者修改该数据,或者写入新数据等。其中,存储管理设备10对数据库30中相应地址处的数据如何进行操作视操作请求的类型而定。
在存储系统100中,为了实现原子性和持久性,采用WAL技术记录存储系统100中的操作。日志磁盘20主要用于存储WAL日志,WAL日志主要记录存储系统100中的数据库操作。基于此,存储管理设备10在根据使用者的操作请求,对数据库30中相应地址处的数据进行操作的过程中,可以将使用者的操作请求记录到日志磁盘20中。根据操作请求类型的不同,存储管理设备10可以选择在日志磁盘20中记录该操作请求,也可以选择不记录该操作请求。
在本实施例中,以是否会改变数据库30中的数据为标准,将使用者的操作请求划分为数据库更新请求和非更新请求。数据库更新请求会改变数据库30中的数据,例如可以是写请求、修改请求、删除请求等;非更新请求不会改变数据库30中的数据,例如可以是查询请求、读请求等。
对于非更新请求,存储管理设备10接收使用者发送的非更新请求,根据非更新请求中的数据库地址,从数据库30中读取相应数据并返回给使用者。可选地,存储管理设备10可以选择将非更新请求记录到日志磁盘20中,对此不做赘述。
对于数据库更新请求,存储管理设备10需要将数据库更新请求记录到日志文件,并持久化日志文件到日志磁盘20中;然后把数据库更新请求涉及到的数据写入内存的脏页中,并采用异步方式将内存中的脏页持久化到数据库30中;当将数据持久化到数据库30之后,向使用者返回写入成功的应答消息。
如果在存储管理设备10将数据持久化到数据库30之前,存储系统100发生宕机,此时内存中的脏页会丢失。由于已经将数据更新请求持久化到日志磁盘20中,所以当存储系统100重启时,可以扫描日志磁盘20,从日志磁盘20中获取尚未持久化到数据库30中的数据库更新请求,将这些数据库更新请求回放到内存的脏页中,然后重新采用异步方式将内存中的脏页持久化到数据库30中。由此可见,本实施例的存储系统100采用WAL技术,为存储系统100的恢复机制提供良好的基础。
在上述过程中,存储管理设备10需要将数据库更新操作或非更新操作记录到日志磁盘20中。可选地,存储管理设备10可根据数据库更新操作或非更新操作生成待写入日志项,然后将待写入日志项写入日志磁盘20中。以数据库更新操作为例,存储管理设备10可以接收存储系统10的使用者发送的数据库更新请求,根据数据库更新请求生成待写入日志项,将该待写入日志项记录到日志磁盘20中。其中,数据库更新请求主要包括更新操作控制信息和待写入数据库的数据块。更新操作控制信息主要包括数据库地址、待写入数据库的数据块的长度以及数据块的校验码等信息。基于此,存储管理设备10可以将更新操作控制信息和待写入数据库的数据块分别作为日志元信息和待写入日志数据,以生成待写入日志项。一般来说,待写入数据库的数据块一般是基准数据块大小的整数倍,记为M倍,M是正整数;相应地,待写入日志数据的大小也是基准数据块大小的M倍。
其中,基准数据块大小是指常规情况下存储介质所支持的单次读写操作所能读写的数据块大小,该数据块大小与存储技术的发展相关,在不同时期可以取不同的值。基准数据块大小相当于在当前存储技术发展阶段,常规物理扇区的大小,也就是常规情况下存储介质允许一次读写操作读写的数据量,例如可以是512字节、4096字节等。
由上述对基准数据块的定义可知,假设基准数据块大小为4KB,日志磁盘20中物理扇区的大小为4KB,待写入日志数据的大小为M*4KB,且日志元信息的大小为64字节,因为待写入日志项的总大小为M*4096字节(即4KB)+64字节,超过了M个物理扇区的大小,因此存储控制设备10要将待写入日志项写入日志磁盘20中需要执行M+1次IO操作,分别将日志元信息和待写入日志数据写入日志磁盘20中的M+1个物理扇区中。由此可见,由于日志元信息的存在,存储管理设备10在将一个日志项写入日志磁盘20时,会多产生一次跨物理扇区的写入操作,写入日志的执行效率较低。
为了提高写日志操作的执行效率,在本实施例的存储系统100中,日志磁盘20采用非常规磁盘,该日志磁盘20中物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和。例如,假设基准数据块大小为4KB,日志元信息的大小为64字节,则日志磁盘20中物理扇区的大小可以是4160字节、4224字节等。可选地,日志磁盘20可以采用支持可变扇区尺寸的磁盘,例如可以是非易失性存储器接口标准(Non-Volatile Memory Express,NVMe)磁盘,但不限于此。NVMe磁盘是支持NVMe接口标准的磁盘。
基于日志磁盘20在存储空间上的支持,并配合存储管理设备10提供的新的日志写入流程,可以将待写入日志项拼接为内存块,使得可以通过更少的IO操作将待写入日志项写入日志磁盘20的物理扇区中,减小向日志磁盘中写入日志项所需要的跨物理扇区的IO操作的次数,提高向日志磁盘中写入日志项的执行效率。其中,在日志磁盘20中物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和的基础上,存储管理设备10向日志磁盘20写入日志项的过程如下:
存储管理设备10可根据使用者的操作请求获得待写入日志项,该待写入日志项包括日志元信息和待写入日志数据,且待写入日志数据的大小是基准数据块大小的M倍。之后,存储管理设备10一方面按照日志磁盘20中物理扇区的大小对待写入日志项进行地址对齐,以确定日志磁盘20中用于存储待写入日志项的物理扇区的起始地址;另一方面对日志元信息和待写入日志数据进行数据拼接以形成N个内存块,并将N个内存块写入日志磁盘20中自上述起始地址开始的N个物理扇区中,完成日志项的写入操作。其中,N<=M,且N为正整数。这里的内存块是指可以一次性写入一个物理扇区的数据块,该内存块的大小小于或等于日志磁盘20中物理扇区的大小。
值得说明的是,在本实施例中,不限定地址对齐和数据拼接的先后顺序。例如,存储管理设备10可以并行执行地址对齐和数据拼接,也可以先执行地址对齐再进行数据拼接,或者也可以先进行数据拼接再执行地址对齐。
由于日志磁盘的物理扇区大于或等于日志元信息的大小与基准数据块大小之和,所以通过数据拼接有可能将待写入日志项拼接为不大于M个数据块,从而占用更少数量的物理扇区,无需占用M+1个物理扇区,减小了向日志磁盘中写入日志项所需要的跨物理扇区的IO操作的次数,提高了向日志磁盘中写入日志项的执行效率。
在一些示例性实施例中,假设日志磁盘20中物理扇区的大小为K字节,K为正整数。基于此,在获得待写入日志项之后,存储管理设备10可以将日志磁盘20中最后写操作的末尾地址按照K字节向上取整,获得一地址信息,即为日志磁盘20中用于存储待写入日志项的物理扇区的起始地址。例如,假设基准数据块大小为4KB(即4096字节),日志元信息的大小为64字节,日志磁盘20中物理扇区的大小K为4160字节,而日志磁盘20中最后写操作的末尾地址为4150字节,则对4150字节按照4160字节向上取整,可以得到一地址,即第4160字节,这意味着,可以自日志磁盘20中的第4160字节开始存储待写入日志项。
在一些示例性实施例中,存储管理设备10在对日志元信息和待写入日志数据进行数据拼接时,可以一次性拼接出N个内存块;或者,也可以每次拼接出N个内存块中的部分内存块,经过多次拼接最终得到N个内存块。例如,可以每次拼接出一个内存块,经过N次拼接得到N个内存块。相应地,在将N个内存块写入N个物理扇区时,可以是在拼接出N个内存块之后,经过N次写入操作将N个内存块写入N个物理扇区;或者,也可以是每拼接出一个内存块就执行一次写入操作,将拼接出的内存块写入相应的物理扇区中,这样经过N次写入操作后可以将N个内存块写入N个物理扇区。
在一些示例性实施例中,存储管理设备10在对日志元信息和待写入日志数据进行数据拼接时,可以通过一内存缓冲区对日志元信息和待写入日志数据进行拼接以形成N个内存块,该内存缓冲区的大小等于N个物理扇区的大小。一个内存块对应一个物理扇区。一个内存块是内存缓冲区中一段连续的数据。可选地,该内存缓冲区可以是内存中一块连续的区域,但不限于此。
凡是可以通过内存缓冲区将待写入日志项中的日志元信息和待写入日志数据拼接为N段连续数据的拼接方式均适用于本申请实施例。
例如,在一种示例性实施方式中,存储管理设备10可以将日志元信息和待写入日志数据拆分为N份,在内存缓冲区中选择一块连续区域,每次将其中一份数据缓存至该连续区域内得到一个内存块,并将得到的内存块写入相应物理扇区中,这样经过N次操作之后,可以拼接出N个内存块并且N个内存块会被写入N个物理扇区中。
又例如,在另一种示例性实施方式中,存储管理设备10可以将日志元信息和待写入日志数据拆分为N份,并将N份数据分别缓存至内存缓冲区的N个连续区域内以获得N个内存块,每个连续区域中存储一段连续数据,每个连续区域的大小小于或等于一个物理扇区的大小。
可选地,从拼接内容的角度给出一种数据拼接的实施方式。在该实施方式中,存储管理设备10可以将日志元信息和待写入日志数据中的首部数据或尾部数据缓存至内存缓冲区的一连续区域内以获得一个内存块;首部数据或尾部数据的大小与基准数据块大小相同;然后,以基准数据块大小为单位,将待写入日志数据中的其它数据分别缓存至内存缓冲区的其它连续区域内以获得N-1个内存块,此处N=M。其它连续区域是N-1连续区域。在该实施方式中,将日志元信息和待写入日志数据中的首部数据或尾部数据缓冲为一个内存块,而以基准数据块大小为单位可以将待写入日志数据中的其它数据缓冲为M-1个内存块,最终得到M个内存块,进而可通过M次跨物理扇区的IO操作将待写入日志项写入日志磁盘20中,相比于M+1次IO操作,减少了一次IO操作,有利于提高写日志的执行效率。
值得说明的是,除了以基准数据块大小为单位,将待写入日志数据中的其它数据缓存为M-1个内存块之外,还可以将待写入日志数据中的其它数据缓存为小于M-1个的内存块,具体个数视物理扇区的大小而定。
可选地,从内存块连续性的角度给出两种数据拼接的实施方式。在一种实施方式中,存储管理设备10可以在内存缓冲区中,以连续方式对日志元信息和待写入日志数据进行拼接以获得N个内存块。在另一种实施方式中,储管理设备10可以在内存缓冲区中,以间隔方式对日志元信息和待写入日志数据进行拼接以获得N个内存块。
在以连续方式拼接得到N个内存块的实施方式中,各内存块依次相邻,彼此之间没有间隙。在该实施方式中,若内存缓冲区的大小大于N个内存块的大小之和,则多出的存储空间可位于内存缓冲区的首部和/或末尾。
其中,以间隔方式拼接得到N个内存块的实施方式适用于内存缓冲区的大小大于N个内存块的大小之和的情况。在该实施方式中,相邻两个内存块之间存在至少一个字节的间隙,通过该间隙可方便地区分不同的内存块。
在本申请实施例提供的存储系统100中,要求日志磁盘20的物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和。在一些示例性实施方式中,可以直接选用物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和的磁盘作为日志磁盘20。在另一些示例性实施方式中,可以选用支持可变扇区尺寸的磁盘作为日志磁盘20。
在选用支持可变扇区尺寸的磁盘作为日志磁盘20的实施方式中,在开始时,日志磁盘20可以作为常规磁盘实现,其物理扇区的大小等于基准数据块大小。基于此,在向日志磁盘20写入日志项之前,可以将日志磁盘中物理扇区的大小调整为大于或等于日志元信息的大小与基准数据块大小之和。
在一种示例性实施方式中,可以根据元信息的大小与基准数据块大小,计算日志磁盘20中物理扇区的大小的下限值;从日志磁盘20所支持的至少两种物理扇区尺寸中,选择大于或等于所述下限值的尺寸作为目标值;将日志磁盘20中物理扇区的大小由当前值调节目标值。
例如,假设基准数据块大小为4KB(即4096字节),日志元信息的大小为64字节,日志磁盘20支持4096字节、4104字节、4160字节以及4224字节等扇区尺寸,并假设一开始日志磁盘20中物理扇区的大小为4096字节,则根据基准数据块大小4KB(即4096字节)和日志元信息的大小64字节计算出物理扇区的大小的下限值为4096字节+64字节=4160字节,然后从4096字节、4104字节、4160字节以及4224字节等扇区尺寸中,选择大于或等于4160字节的扇区尺寸,例如选择4160字节作为目标值,然后将日志磁盘20中物理扇区的大小由4096字节调整为4160字节,使得物理扇区的大小满足大于或等于日志元信息的大小与基准数据块大小之和。
进一步,在将日志磁盘20中物理扇区的大小由当前值调节目标值时,可以响应于格式化请求,按照目标值重新对日志磁盘进行格式化,以获得大小大于或等于日志元信息的大小与基准数据块大小之和的物理扇区;或者,也可以借助磁盘工具或命令行,将日志磁盘20中物理扇区的大小由当前值调节目标值。本申请实施例对此不做限定,凡是可以将日志磁盘20中物理扇区的大小由当前值调节目标值的实施方式均适应于本申请实施例。
为便于理解本申请实施例的技术方案,下面结合图2所示地址对齐过程,对存储管理设备10向日志磁盘20中写日志的过程进行举例说明。
如图2所示,以基准数据块大小为4KB(即4096字节)为例,如图2中左侧所示日志磁盘20包括物理扇区记为A1、B1以及C1,每个物理扇区的大小为4096字节,同时假设待写入日志项的日志元信息的大小为LogEntryHeaderSize,待写入日志数据的大小为基准数据块的1倍,即4096字节。如图2所示,如果向图2中左侧所示日志磁盘20写入待写入日志项,至少需要两次IO操作。在本实施例中,存储管理设备10可通过可变扇区大小(Variable SectorSize,VSS)技术将日志磁盘20的物理扇区的大小由4096调整为日志磁盘20所支持的4096字节、4104字节、4160字节以及4224字节等扇区尺寸中大于或等于(LogEntryHeaderSize+4096)的一个数值。在图2所示实施例中,以LogEntryHeaderSize=64字节为例,则4096+64=4160字节,则可以选择4160字节或者4224字节,图2所示实施例以选择4160字节为例。其中,调整物理扇区的大小之后的日志磁盘20如图2中右侧所示,包括三个物理扇区记为A2、B2以及C2。
值得说明的是,图2中右侧所示日志磁盘20貌似比左侧所示日志磁盘20大一些,这仅是为了便于图示,左右两侧的日志磁盘20的总存储空间并未发生变化,仅仅是物理扇区的大小发生了变化。
为便于描述,将调整后物理扇区的大小记为SectorSize,为了保证每个日志项在日志磁盘20中的起始位置都能按照SectorSize对齐,存储管理设备10对待写入日志项进行地址对齐,对齐结果如图2所示,待写入日志项与日志磁盘20中的物理扇区B2对齐。存储管理设备10在向日志磁盘20写入待写入日志项时,先将待写入日志项的日志元信息和待写入日志数据在一内存缓冲区中进行拼接以获得大小为4160字节的内存块,并将拼接后的内存块一次性写入按SectorSize对齐的物理扇区B2中。由此可见,基于图2右侧所示日志磁盘20,如果向图2中右侧所示日志磁盘20写入待写入日志项,只需一次IO操作即可,由于减少了IO操作的次数,可以提高写日志的执行效率。
图3为本申请另一示例性实施例提供的日志写入方法的流程示意图。该方法可应用于图1所示存储系统,但不限于此。凡是涉及写日志操作的应用场景均可采用本实施例提供的日志写入方法。如图3所示,该方法包括:
301、获取待写入日志项,该待写入日志项包括日志元信息和待写入日志数据,待写入日志数据的大小是基准数据块大小的M倍,M是正整数。
302、按照日志磁盘中物理扇区的大小对待写入日志项进行地址对齐,以确定用于存储待写入日志项的物理扇区的起始地址,该日志磁盘中物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和。
303、对日志元信息和待写入日志数据进行数据拼接以形成N个内存块,N<=M,且N为正整数。
304、将N个内存块写入日志磁盘中自上述起始地址开始的N个物理扇区中。
在本实施例中,日志磁盘采用非常规磁盘,所述非常规主要是指该日志磁盘中物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和。基准数据块大小是指常规情况下存储介质所支持的单次读写操作所能读写的数据块大小,该数据块大小与存储技术的发展相关,在不同时期可以取不同的值。基准数据块大小相当于在当前存储技术发展阶段,常规物理扇区的大小,也就是常规情况下存储介质允许一次读写操作读写的数据量,例如可以是512字节、4096字节等。
基于上述,当需要向日志磁盘写入日志项时,可以获取待写入日志项。该待写入日志项包括日志元信息和待写入日志数据,且待写入日志数据的大小是基准数据块大小的M倍。之后,一方面按照日志磁盘中物理扇区的大小对待写入日志项进行地址对齐,以确定日志磁盘中用于存储待写入日志项的物理扇区的起始地址;另一方面对日志元信息和待写入日志数据进行数据拼接以形成N个内存块,N<=M,且N为正整数。之后,将N个内存块写入日志磁盘中自上述起始地址开始的N个物理扇区中,完成日志项的写入操作。这里的内存块是指可以一次性写入一个物理扇区的数据块,该内存块的大小小于或等于日志磁盘中物理扇区的大小。
由于日志磁盘的物理扇区大于或等于日志元信息的大小与基准数据块大小之和,所以通过数据拼接有可能将待写入日志项拼接为不大于M个数据块,从而占用更少数量的物理扇区,而不再是M+1个,从而减小向日志磁盘中写入日志项所需要的跨物理扇区的IO操作的次数,提高向日志磁盘中写入日志项的执行效率。
根据应用场景的不同,获取待写入日志项的方式也会有所不同。举例说明,在基于WAL日志的存储系统中,可以接收数据库更新请求,数据库更新请求包括更新操作控制信息和待写入数据库的数据块;将更新操作控制信息和待写入数据库的数据块分别作为日志元信息和待写入日志数据,以生成待写入日志项。除此方式之外,也可以采用其他方式获取待写入日志项,例如可以直接从日志生成装置获取待写入日志项。
在一些示例性实施例中,假设日志磁盘中物理扇区的大小为K字节,K为正整数。基于此,在获得待写入日志项之后,可以将日志磁盘中最后写操作的末尾地址按照K字节向上取整,获得一地址信息,即为日志磁盘中用于存储待写入日志项的物理扇区的起始地址。例如,假设基准数据块大小为4KB(即4096字节),日志元信息的大小为64字节,日志磁盘中物理扇区的大小K为4160字节,而日志磁盘中最后写操作的末尾地址为4150字节,则对4150字节按照4160字节向上取整,可以得到一地址,即第4160字节,这意味着,可以自日志磁盘中的第4160字节开始存储待写入日志项。
在一些示例性实施例中,在对日志元信息和待写入日志数据进行数据拼接时,可以一次性拼接出N个内存块;或者,也可以每次拼接出N个内存块中的部分内存块,经过多次拼接最终得到N个内存块。例如,可以每次拼接出一个内存块,经过N次拼接得到N个内存块。相应地,在将N个内存块写入N个物理扇区时,可以是在拼接出N个内存块之后,经过N次写入操作将N个内存块写入N个物理扇区;或者,也可以是每拼接出一个内存块就执行一次写入操作,将拼接出的内存块写入相应的物理扇区中,这样经过N次写入操作后可以将N个内存块写入N个物理扇区。
在一些示例性实施例中,在对日志元信息和待写入日志数据进行数据拼接时,可以通过一内存缓冲区对日志元信息和待写入日志数据进行拼接以形成N个内存块,该内存缓冲区的大小等于N个物理扇区的大小。一个内存块对应一个物理扇区。一个内存块是内存缓冲区中一段连续的数据。可选地,该内存缓冲区可以是内存中一块连续的区域,但不限于此。
凡是可以通过内存缓冲区将待写入日志项中的日志元信息和待写入日志数据拼接为N段连续数据的拼接方式均适用于本申请实施例。
例如,在一种示例性实施方式中,可以将日志元信息和待写入日志数据拆分为N份,在内存缓冲区中选择一块连续区域,每次将其中一份数据缓存至该连续区域内得到一个内存块,并将得到的内存块写入相应物理扇区中,这样经过N次操作之后,可以拼接出N个内存块并且N个内存块会被写入N个物理扇区中。
又例如,在另一种示例性实施方式中,可以将日志元信息和待写入日志数据拆分为N份,并将N份数据分别缓存至内存缓冲区的N个连续区域内以获得N个内存块,每个连续区域中存储一段连续数据,每个连续区域的大小小于或等于一个物理扇区的大小。
可选地,从拼接内容的角度给出一种数据拼接的实施方式。在该实施方式中,可以将日志元信息和待写入日志数据中的首部数据或尾部数据缓存至内存缓冲区的一连续区域内以获得一个内存块;首部数据或尾部数据的大小与基准数据块大小相同;然后,以基准数据块大小为单位,将待写入日志数据中的其它数据分别缓存至内存缓冲区的其它连续区域内以获得N-1个内存块,此处N=M。其它连续区域是M-1连续区域。在该实施方式中,将日志元信息和待写入日志数据中的首部数据或尾部数据缓冲为一个内存块,而以基准数据块大小为单位可以将待写入日志数据中的其它数据缓冲为M-1个内存块,最终得到M个内存块,进而可通过M次跨物理扇区的IO操作将待写入日志项写入日志磁盘20中,相比于M+1次IO操作,减少了一次IO操作,有利于提高写日志的执行效率。
值得说明的是,除了以基准数据块大小为单位,将待写入日志数据中的其它数据缓存为M-1个内存块之外,还可以将待写入日志数据中的其它数据缓存为小于M-1个的内存块,具体个数视物理扇区的大小而定。
可选地,从内存块连续性的角度给出两种数据拼接的实施方式。在一种实施方式中,可以在内存缓冲区中,以连续方式对日志元信息和待写入日志数据进行拼接以获得N个内存块。在另一种实施方式中,可以在内存缓冲区中,以间隔方式对日志元信息和待写入日志数据进行拼接以获得N个内存块。
在以连续方式拼接得到N个内存块的实施方式中,各内存块依次相邻,彼此之间没有间隙。在该实施方式中,若内存缓冲区的大小大于N个内存块的大小之和,则多出的存储空间可位于内存缓冲区的首部和/或末尾。
其中,以间隔方式拼接得到N个内存块的实施方式适用于内存缓冲区的大小大于N个内存块的大小之和的情况。在该实施方式中,相邻两个内存块之间存在至少一个字节的间隙,通过该间隙可方便地区分不同的内存块。
在上述方法实施例中,要求日志磁盘的物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和。在一些示例性实施方式中,可以直接选用物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和的磁盘作为日志磁盘。在另一些示例性实施方式中,可以选用支持可变扇区尺寸的磁盘作为日志磁盘。
在选用支持可变扇区尺寸的磁盘作为日志磁盘的实施方式中,在开始时,日志磁盘可以作为常规磁盘实现,其物理扇区的大小等于基准数据块大小。基于此,在向日志磁盘写入日志项之前,还包括将日志磁盘中物理扇区的大小调整为大于或等于日志元信息的大小与基准数据块大小之和的步骤。
可选地,可以根据元信息的大小与基准数据块大小,计算日志磁盘中物理扇区的大小的下限值;从日志磁盘所支持的至少两种物理扇区尺寸中,选择大于或等于所述下限值的尺寸作为目标值;将日志磁盘中物理扇区的大小由当前值调节目标值。
进一步,在将日志磁盘中物理扇区的大小由当前值调节目标值时,可以响应于格式化请求,按照目标值重新对日志磁盘进行格式化,以获得大小大于或等于日志元信息的大小与基准数据块大小之和的物理扇区;或者,也可以借助磁盘工具或命令行,将日志磁盘中物理扇区的大小由当前值调节目标值。本申请实施例对此不做限定,凡是可以将日志磁盘中物理扇区的大小由当前值调节目标值的实施方式均适应于本申请实施例。
需要说明的是,上述实施例所提供方法的各步骤的执行主体均可以是同一设备,或者,该方法也由不同设备作为执行主体。比如,步骤301至步骤304的执行主体可以为设备A;又比如,步骤301和302的执行主体可以为设备A,步骤303和304的执行主体可以为设备B;等等。
另外,在上述实施例及附图中的描述的一些流程中,包含了按照特定顺序出现的多个操作,但是应该清楚了解,这些操作可以不按照其在本文中出现的顺序来执行或并行执行,操作的序号如301、302等,仅仅是用于区分开各个不同的操作,序号本身不代表任何的执行顺序。另外,这些流程可以包括更多或更少的操作,并且这些操作可以按顺序执行或并行执行。需要说明的是,本文中的“第一”、“第二”等描述,是用于区分不同的消息、设备、模块等,不代表先后顺序,也不限定“第一”和“第二”是不同的类型。
图4a为本申请又一示例性实施例提供的日志写入装置的结构示意图。如图4a所示,该日志写入装置包括:获取模块41、对齐模块42、拼接模块43以及写入模块44。
获取模块41,用于获取待写入日志项,该待写入日志项包括日志元信息和待写入日志数据,待写入日志数据的大小是基准数据块大小的M倍,M是正整数。
对齐模块42,用于按照日志磁盘中物理扇区的大小对待写入日志项进行地址对齐,以确定用于存储待写入日志项的物理扇区的起始地址,该日志磁盘中物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和。
拼接模块43,用于对日志元信息和待写入日志数据进行数据拼接以形成N个内存块,N<=M,且N为正整数。
写入模块44,用于将N个内存块写入日志磁盘中自上述起始地址开始的N个物理扇区中。
在一些示例性实施例中,对齐模块42具体用于:将日志磁盘中最后写操作的末尾地址按照K字节向上取整,以获得上述起始地址,日志磁盘中物理扇区的大小为K字节。
在一些示例性实施例中,拼接模块43具体用于:一次性拼接出N个内存块;或者,也可以每次拼接出N个内存块中的部分内存块,经过多次拼接最终得到N个内存块。例如,可以每次拼接出一个内存块,经过N次拼接得到N个内存块。相应地,写入模块44可以在拼接模块43拼接出N个内存块之后,经过N次写入操作将N个内存块写入N个物理扇区;或者,也可以在拼接模块43每拼接出一个内存块就执行一次写入操作,将拼接模块43拼接出的内存块写入相应的物理扇区中,这样经过N次写入操作后可以将N个内存块写入N个物理扇区。
在一些示例性实施例中,拼接模块43具体用于:通过一内存缓冲区对日志元信息和待写入日志数据进行拼接以形成所述N个内存块,所述内存缓冲区的大小等于所述N个物理扇区的大小。
进一步可选地,拼接模块43具体用于:将日志元信息和待写入日志数据中的首部数据或尾部数据缓存至内存缓冲区的一连续区域内以获得一个内存块,所述首部数据或尾部数据的大小为基准数据块大小;以基准数据块大小为单位,将待写入日志数据中的其它数据分别缓存至内存缓冲区的其它连续区域内以获得N-1个内存块,此时N=M。
进一步可选地,拼接模块43具体用于:在内存缓冲区中,以连续方式对日志元信息和待写入日志数据进行拼接以获得N个内存块;或者,在内存缓冲区中,以间隔方式对日志元信息和待写入日志数据进行拼接以获得N个内存块。
在一些示例性实施例中,获取模块41具体用于:接收数据库更新请求,数据库更新请求包括更新操作控制信息和待写入数据库的数据块;将更新操作控制信息和待写入数据库的数据块分别作为日志元信息和待写入日志数据,以生成待写入日志项。
在一些示例性实施例中,日志写入装置还包括:调整模块。该调整模块,用于在对齐模块42执行地址对齐操作之前,将日志磁盘中物理扇区的大小调整为大于或等于日志元信息的大小与基准数据块大小之和。
在一些示例性实施例中,调整模块具体用于:根据元信息的大小与基准数据块大小,计算日志磁盘中物理扇区的大小的下限值;从日志磁盘所支持的至少两种物理扇区尺寸中,选择大于或等于下限值的尺寸作为目标值;将日志磁盘中物理扇区的大小由当前值调节目标值。
在一些示例性实施例中,调整模块在将日志磁盘中物理扇区的大小由当前值调节目标值时,具体用于:响应于格式化请求,按照目标值重新对日志磁盘进行格式化,以获得大小大于或等于日志元信息的大小与基准数据块大小之和的物理扇区;或者,也可以借助磁盘工具或命令行,将日志磁盘中物理扇区的大小由当前值调节目标值。本申请实施例对此不做限定,凡是可以将日志磁盘中物理扇区的大小由当前值调节目标值的实施方式均适应于本申请实施例。
本实施例提供的日志写入装置,以日志磁盘中物理扇区的大小大于或等于日志元信息大小与基准数据块大小之和为基础,在向日志磁盘中写入待写入日志项时,结合地址对齐以及数据拼接可以将待写入日志项拼接为内存块,使得可以通过更少的IO操作将待写入日志项写入日志磁盘的物理扇区中,减小向日志磁盘中写入日志项所需要的IO操作的次数,提高了向日志磁盘中写入日志项的执行效率。
以上描述了日志写入装置的内部功能和结构,如图4b所示,实际中,该日志写入装置可实现为存储管理设备,包括:存储器51、处理器52以及通信组件53。
存储器51,可被配置为存储其它各种数据以支持在存储管理设备上的操作。这些数据的示例包括用于在存储管理设备上操作的任何应用程序或方法的指令,电话簿数据,消息,图片,视频等。
存储器51可以由任何类型的易失性或非易失性存储介质或者它们的组合实现,如静态随机存取存储器(SRAM),电可擦除可编程只读存储器(EEPROM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
处理器52与存储器51耦合,用于执行存储器51中的程序,以用于:
获取待写入日志项,该待写入日志项包括日志元信息和待写入日志数据,待写入日志数据的大小是基准数据块大小的M倍,M是正整数;
按照日志磁盘中物理扇区的大小对待写入日志项进行地址对齐,以确定用于存储待写入日志项的物理扇区的起始地址,该日志磁盘中物理扇区的大小大于或等于日志元信息的大小与基准数据块大小之和;
对日志元信息和待写入日志数据进行数据拼接以形成N个内存块,N<=M,且N为正整数;
通过通信组件53将N个内存块写入日志磁盘中自上述起始地址开始的N个物理扇区中。
相应地,通信组件53,用于将N个内存块写入日志磁盘中自上述起始地址开始的N个物理扇区中。
在一些示例性实施例中,处理器52在进行地址对齐时,具体用于:将日志磁盘中最后写操作的末尾地址按照K字节向上取整,以获得上述起始地址,日志磁盘中物理扇区的大小为K字节。
在一些示例性实施例中,处理器52在进行数据拼接时,具体用于:一次性拼接出N个内存块;或者,每次拼接出N个内存块中的部分内存块,经过多次拼接最终得到N个内存块。例如,可以每次拼接出一个内存块,经过N次拼接得到N个内存块。相应地,处理器52在将N个内存块写入N个物理扇区时,具体用于:在拼接出N个内存块之后,经过N次写入操作将N个内存块写入N个物理扇区;或者,每拼接出一个内存块就执行一次写入操作,将拼接出的内存块写入相应的物理扇区中,这样经过N次写入操作后可以将N个内存块写入N个物理扇区。
在一些示例性实施例中,处理器52在进行数据拼接时,具体用于:通过一内存缓冲区对日志元信息和待写入日志数据进行拼接以形成所述N个内存块,所述内存缓冲区的大小等于所述N个物理扇区的大小。
在一些示例性实施例中,处理器52在拼接内存块时,具体用于:将日志元信息和待写入日志数据中的首部数据或尾部数据缓存至内存缓冲区的一连续区域内以获得一个内存块,所述首部数据或尾部数据的大小为基准数据块大小;以基准数据块大小为单位,将待写入日志数据中的其它数据分别缓存至内存缓冲区的其它连续区域内以获得N-1个内存块,此时N=M。
在一些示例性实施例中,处理器52在拼接内存块时,具体用于:在内存缓冲区中,以连续方式对日志元信息和待写入日志数据进行拼接以获得N个内存块;或者,在内存缓冲区中,以间隔方式对日志元信息和待写入日志数据进行拼接以获得N个内存块。
在一些示例性实施例中,处理器52在获取待写入日志项时,具体用于:接收数据库更新请求,数据库更新请求包括更新操作控制信息和待写入数据库的数据块;将更新操作控制信息和待写入数据库的数据块分别作为日志元信息和待写入日志数据,以生成待写入日志项。
在一些示例性实施例中,处理器52还用于:在执行地址对齐操作之前,将日志磁盘中物理扇区的大小调整为大于或等于日志元信息的大小与基准数据块大小之和。
在一些示例性实施例中,处理器52在调整日志磁盘中物理扇区的大小时,具体用于:根据元信息的大小与基准数据块大小,计算日志磁盘中物理扇区的大小的下限值;从日志磁盘所支持的至少两种物理扇区尺寸中,选择大于或等于下限值的尺寸作为目标值;将日志磁盘中物理扇区的大小由当前值调节目标值。
在一些示例性实施例中,处理器52在将日志磁盘中物理扇区的大小由当前值调节目标值时,具体用于:响应于格式化请求,按照目标值重新对日志磁盘进行格式化,以获得大小大于或等于日志元信息的大小与基准数据块大小之和的物理扇区;或者,也可以借助磁盘工具或命令行,将日志磁盘中物理扇区的大小由当前值调节目标值。本申请实施例对此不做限定,凡是可以将日志磁盘中物理扇区的大小由当前值调节目标值的实施方式均适应于本申请实施例。
进一步,如图4b所示,存储管理设备还包括:显示器54、电源组件55、音频组件56等其它组件。图4b中仅示意性给出部分组件,并不意味着存储管理设备只包括图4b所示组件。
通信组件53,可被配置为便于通信组件所属设备和其他设备之间有线或无线方式的通信。通信组件所属设备可以接入基于通信标准的无线网络,如WiFi,2G或3G,或它们的组合。在一个示例性实施例中,通信组件经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
显示器54,可以包括屏幕,其屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。
电源组件55,为电源组件所属设备的各种组件提供电力。电源组件可以包括电源管理系统,一个或多个电源,及其他与为电源组件所属设备生成、管理和分配电力相关联的组件。
音频组件56,被配置为输出和/或输入音频信号。例如,音频组件包括一个麦克风(MIC),当音频组件所属设备处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器或经由通信组件发送。在一些实施例中,音频组件还包括一个扬声器,用于输出音频信号。
本实施例提供的存储管理设备,以日志磁盘中物理扇区的大小大于或等于日志元信息大小与基准数据块大小之和为基础,在向日志磁盘中写入待写入日志项时,结合地址对齐以及数据拼接可以将待写入日志项拼接为内存块,使得可以通过更少的IO操作将待写入日志项写入日志磁盘的物理扇区中,减小向日志磁盘中写入日志项所需要的IO操作的次数,提高了向日志磁盘中写入日志项的执行效率。
相应地,本申请实施例还提供一种存储有计算机程序的计算机可读存储介质,所述计算机程序被计算机执行时能够实现上述各实施例中的方法步骤或功能,在此不再赘述。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。
以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。