CN108334277A - 一种日志写入及同步方法、装置、系统、计算机存储介质 - Google Patents
一种日志写入及同步方法、装置、系统、计算机存储介质 Download PDFInfo
- Publication number
- CN108334277A CN108334277A CN201710327224.7A CN201710327224A CN108334277A CN 108334277 A CN108334277 A CN 108334277A CN 201710327224 A CN201710327224 A CN 201710327224A CN 108334277 A CN108334277 A CN 108334277A
- Authority
- CN
- China
- Prior art keywords
- daily record
- page
- page number
- written
- disk
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0668—Interfaces specially adapted for storage systems adopting a particular infrastructure
- G06F3/0671—In-line storage system
- G06F3/0673—Single storage device
- G06F3/0674—Disk device
- G06F3/0676—Magnetic disk device
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0608—Saving storage space on storage systems
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0602—Interfaces specially adapted for storage systems specifically adapted to achieve a particular effect
- G06F3/0614—Improving the reliability of storage systems
- G06F3/0616—Improving the reliability of storage systems in relation to life time, e.g. increasing Mean Time Between Failures [MTBF]
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/064—Management of blocks
- G06F3/0641—De-duplication techniques
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0638—Organizing or formatting or addressing of data
- G06F3/0644—Management of space entities, e.g. partitions, extents, pools
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F3/00—Input arrangements for transferring data to be processed into a form capable of being handled by the computer; Output arrangements for transferring data from processing unit to output unit, e.g. interface arrangements
- G06F3/06—Digital input from, or digital output to, record carriers, e.g. RAID, emulated record carriers or networked record carriers
- G06F3/0601—Interfaces specially adapted for storage systems
- G06F3/0628—Interfaces specially adapted for storage systems making use of a particular technique
- G06F3/0646—Horizontal data movement in storage systems, i.e. moving data in between storage devices or systems
- G06F3/0652—Erasing, e.g. deleting, data cleaning, moving of data to a wastebasket
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Human Computer Interaction (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
Abstract
本发明公开了一种日志写入方法及装置、系统、计算机存储介质,所述方法包括:从日志盘的变量区中读取已写入日志的终点页编号;将日志写入所述终点页编号所对应的数据区页面中,形成日志页;获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中;在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。
Description
技术领域
本发明涉及计算机存储领域,尤其涉及一种基于固态硬盘的日志写入及同步方法、装置、系统、计算机存储介质。
背景技术
在存储系统中,高可靠、高性能以及低成本是最重要的,也是相互矛盾的三大指标。日志(Journal)技术是保证系统高可靠和高性能的有效手段。很多存储系统引入了日志技术,如EXT3、EXT4、XFS、JFS、F2FS、NTFS、Btrfs、CEPH等。
在日志技术中,存储系统对数据的操作(包括创建、追加、修改、删除等)都被首先封装成日志,并记录到日志盘中。每隔一定时间(或日志盘即将写满),存储系统会根据日志,将数据内容真正写入数据盘,该过程称为日志同步(sync)。最后一条被写入磁盘的日志被称为检查点,检查点之前的日志全部删除,检查点之后开始新日志记录周期。当发生系统错误时(如掉电),则在下次系统启动时就会通过日志同步将未完成的数据修改操作持久化到硬盘,这个过程一般只需要几秒钟(如常见的windows操作系统断电重启的磁盘检查)。因此,当数据修改操作被记录到日志盘时,无须实际写入数据盘,即可认为写入成功。
在存储系统中,一种常规的平衡性能与成本的做法是使用固态硬盘(SolidStateDrives,简称为SSD)作为日志盘,使用传统硬盘(Hard Disk Drive,简称为HDD)作为数据盘。由于每次写入操作首先为写入日志,即写入固态硬盘,可以充分发挥性能优势。固态硬盘一方面起到了缓存的作用,另一方面相较于内存作为缓存,固态硬盘具有非易失性的特点,因此比传统缓存可靠。在系统闲时将日志同步,数据异步写入磁盘,对上层应用屏蔽了时延。
在单机系统中,如图1所示,单个数据盘的日志均存储在单独的日志盘,日志盘\数据盘配比为1:1会带来高昂的成本。后来,为了降低成本,如图2所示,数据盘被分区,小分区作为日志盘,大分区作为数据盘。在大规模集群存储环境中,如图3所示,会采用单盘作为日志盘,同时被分区使用,即单个数据盘的日志存储在单独的日志盘分区中。这种在大规模集群存储环境中照搬单机系统的日志方案,虽然使得同一数据盘的日志集中存放,但是存在如下问题:
问题1:系统扩展性差。日志盘分区导致系统扩展性差,分区数量难以随意增减,因此系统规模无法扩展。
问题2:存储空间不均衡。各数据盘的繁忙程度不同,导致无法均衡各日志盘分区的存储空间,造成个别日志盘分区空间浪费,个别日志盘分区饱和。
问题3:损害固态硬盘寿命。传统日志技术针对磁盘特性进行设计,近年来固态硬盘发展迅速,被广泛应用于日志盘。但日志技术鲜有针对固态硬盘特性的优化改进。旧的日志技术在写入时以原地更新的方式,该种方式未考虑固态硬盘的写前擦除特性,因而对固态硬盘的寿命产生较大的负面影响,也即造成了存储系统的成本高昂。
问题4:日志写入效率低下。在日志写入时,以时间排序,而非以分区为单位进行,因此需要不断地在不同的分区切换,大量的随机写造成性能低下。
面对上述问题,业界典型的解决思路是将多日志盘(或日志盘分区)“池化”,例如采用哈希算法使得日志盘各分区的负载均衡。又如通过设置一个Hash链表,用于记录日志数据在日志盘中的位置地址信息。再如采用链式方式组织写入的日志。以上方案的共同特点是将不同数据盘的日志混合存储,通过均衡算法使得日志在各分区分布均衡。这种技术方案很好地解决了问题1、2,但无法解决问题3、4,同时带来了新的问题:
问题5:日志同步效率低下。在日志同步时,由于日志分散,导致大量随机读取,使得日志同步效率低下。
问题6:日志删除效率低下。需要额外记录日志的有效性状态,在日志同步后必须立即删除该日志,但固态硬盘的擦除操作以块为单位并非以页为单位,造成了大量的有效数据搬迁,对固态硬盘的性能和寿命产生负面影响。
发明内容
为解决上述技术问题,本发明实施例提供了一种日志写入及同步方法、装置、系统、计算机存储介质。
本发明实施例提供的日志写入方法,包括:
从日志盘的变量区中读取已写入日志的终点页编号;
将日志写入所述终点页编号所对应的数据区页面中,形成日志页;
获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中。
本发明实施例中,所述方法还包括:
在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。
本发明实施例中,所述方法还包括:
在日志盘的数据区中,判断处于空闲态的数据区页面的数量是否小于等于预设阈值;
如果处于空闲态的数据区页面的数量小于等于预设阈值,则触发日志同步。
本发明实施例中,所述获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中,包括:
在日志盘的位图区中,确定所述日志页对应的位图编号,其中,所述日志页对应的位图编号等于所述已写入日志的终点页编号;
获取所述日志页对应的写入位置和日志页所属的数据区段编号;
在所述日志盘的位图区中,将所述日志页对应的写入位置和日志页所属的数据区段编号写入所述位图编号所指定的槽位中,并将所述槽位标记为已写入。
本发明实施例中,所述在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,包括:
在所述日志盘的变量区中,读取处于有效态的已写入日志的终点页编号,作为旧终点页编号;
判断所述旧终点页编号所在的块中是否存在剩余空间;
如果所述旧终点页编号所在的块中存在剩余空间,则在所述旧终点页编号的相邻下一个位置处写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号标记为无效,将所述新终点页编号标记为有效;
如果所述旧终点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号所在的块擦除,将所述新终点页编号标记为有效。
本发明实施例提供的日志同步方法,包括
从日志盘的变量区中读取已写入日志的起点页编号和终点页编号;
第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1;
第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘;
擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
本发明实施例中,第二次遍历日志盘的位图区之后,所述方法还包括:
第三次遍历日志盘的位图区,统计各日志页所属的数据区段编号的出现次数;
如果日志页所属的数据区段编号的出现次数大于等于预设阈值,则通知内存在下一次日志同步之前保留该数据区段编号对应的文件数据,并修改日志页对应的写入位置,将所述文件数据转储至高速存储介质。
本发明实施例中,第一次遍历日志盘的位图区之前,所述方法还包括:
比较所述已写入日志的起点页编号和终点页编号是否相同;
如果所述已写入日志的起点页编号和终点页编号不相同,则进行第一次遍历日志盘。
本发明实施例中,所述擦除日志盘的位图区和数据区中的内容,包括:
读取已写入日志的起点页编号和终点页编号;
在数据区中,将起点页编号所在的块擦除,将起点页编号所在的块的相邻下一个块擦除,直至将终点页编号所在的块的相邻前一个块擦除;判断终点页编号是否位于块的最后一页;如果终点页编号位于块的最后一页,则将终点页编号所在的块擦除;
在位图区中,将与起点页编号相等的位图编号所在的块擦除,依次擦除相邻的块直至将与终点页编号相等的位图编号所在的块擦除。
本发明实施例中,所述修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号,包括:
在所述日志盘的变量区中,读取处于有效态的已写入日志的起点页编号,作为旧起点页编号;
判断所述旧起点页编号所在的块中是否存在剩余空间;
如果所述旧起点页编号所在的块中存在剩余空间,则在所述旧起点页编号的相邻下一个位置处写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号标记为无效,将所述新起点页编号标记为有效;
如果所述旧起点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号所在的块擦除,将所述新起点页编号标记为有效。
本发明实施例提供的日志写入装置,包括:
读取单元,用于从日志盘的变量区中读取已写入日志的终点页编号;
第一写入单元,用于将日志写入所述终点页编号所对应的数据区页面中,形成日志页;
获取单元,用于获取所述日志页对应的写入位置和日志页所属的数据区段编号;
第二写入单元,用于将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中。
本发明实施例中,所述装置还包括:
设置单元,用于在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。
本发明实施例中,所述装置还包括:
同步触发单元,用于在日志盘的数据区中,判断处于空闲态的数据区页面的数量是否小于等于预设阈值;如果处于空闲态的数据区页面的数量小于等于预设阈值,则触发日志同步。
本发明实施例中,所述装置还包括:
确定单元,用于在日志盘的位图区中,确定所述日志页对应的位图编号,其中,所述日志页对应的位图编号等于所述已写入日志的终点页编号;
所述第二写入单元,具体用于:在所述日志盘的位图区中,将所述日志页对应的写入位置和日志页所属的数据区段编号写入所述位图编号所指定的槽位中,并将所述槽位标记为已写入。
本发明实施例提供的日志同步装置,包括:
读取单元,用于从日志盘的变量区中读取已写入日志的起点页编号和终点页编号;
第一遍历单元,用于第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1;
第二遍历单元,用于第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘;
处理单元,用于擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
本发明实施例中,所述装置还包括:
第三遍历单元,用于第三次遍历日志盘的位图区,统计各日志页所属的数据区段编号的出现次数;如果日志页所属的数据区段编号的出现次数大于等于预设阈值,则通知内存在下一次日志同步之前保留该数据区段编号对应的文件数据,并修改日志页对应的写入位置,将所述文件数据转储至高速存储介质。
本发明实施例中,所述装置还包括:
比较单元,用于比较所述已写入日志的起点页编号和终点页编号是否相同;如果所述已写入日志的起点页编号和终点页编号不相同,则进行第一次遍历日志盘。
本发明实施例提供的日志系统,包括所述的日志写入装置、以及日志同步装置。
本发明实施例提供的计算机存储介质中存储有计算机可执行指令,该计算机可执行指令用于所述的日志写入方法,或者,执行所述的日志同步方法。
本发明实施例的技术方案中,日志写入方法包括:从日志盘的变量区中读取已写入日志的终点页编号;将日志写入所述终点页编号所对应的数据区页面中,形成日志页;获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中;在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。日志同步方法包括:从日志盘的变量区中读取已写入日志的起点页编号和终点页编号;第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1;第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘;擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
采用本发明实施例的技术方案,大幅提升了日志盘的利用率(循环写入,不浪费存储空间),大幅提升了日志的写入、同步性能(日志顺序读写,重复日志删除,内存强制保留),大幅提升了固态硬盘的使用寿命(追加式地修改日志元数据,批量擦除,避免有效数据搬迁),同时满足了存储系统高性能、高可靠、低成本的三大需求。
附图说明
附图以示例而非限制的方式大体示出了本文中所讨论的各个实施例。
图1为单数据盘在单盘写入日志的示意图;
图2为单数据盘在分区写入日志的示意图;
图3为多数据盘在分区写入日志的示意图;
图4为本发明实施例的多数据盘在单盘写入日志的示意图;
图5为本发明实施例的日志写入方法的流程示意图;
图6为本发明实施例的日志同步方法的流程示意图;
图7为本发明实施例的日志盘中的磁盘空间划分示意图;
图8为本发明实施例的变量区的示意图;
图9为本发明实施例的位图区的示意图;
图10为本发明实施例的位图区与日志页的对应图;
图11为本发明实施例的日志写入装置的结构组成示意图;
图12为本发明实施例的日志同步装置的结构组成示意图;
图13为本发明实施例的日志系统的结构组成示意图。
具体实施方式
为了能够更加详尽地了解本发明实施例的特点与技术内容,下面结合附图对本发明实施例的实现进行详细阐述,所附附图仅供参考说明之用,并非用来限定本发明实施例。
以下对本发明实施例涉及到的概念进行解释说明:
1)存储系统包括但不限于:单机文件系统、分布式文件系统、分布式块存储系统以及分布式对象存储系统等。
2)专门用作记录日志的逻辑设备(整盘或者分区)被统称为“日志盘”。日志盘服务的对象被称为“数据盘”。如非特别说明,默认使用固态硬盘作为日志盘,使用传统硬盘作为数据盘。
3)在本发明实施例中,日志对应于英文释义Journal一词,而非英文释义Log一词。Log指系统运行过程中的行为记录,而非用于保证存储系统高可靠和高性能。日志技术的好处包括:(1)写入高速的日志盘即可认为写入成功,无须等待低速的数据盘的写入成功反馈,可以显著降低访问延迟;(2)保证了存储系统的可靠性,即能保持一致的状态,即便在断电导致数据并未真正全部写入磁盘的情况下,依然可以通过重启后的日志同步将未写入的数据写入数据盘,因为日志盘具有非易失性。
4)本发明实施例所指的日志与数据库日志有根本性的区别。在数据库系统中,一次原子操作由多条微语句封装而成。所谓原子操作,是指所封装的微操作或者全执行,或者全不执行。例如一次银行转账为原子操作,由两步微操作组成——A账户先减去50元,B再加上50元。数据库日志的作用是记录一次原子操作中的全部微操作,保证其全执行,或全不执行。在该次原子操作完成后,数据库日志即无效。该原子操作写入数据内容之后,底层存储系统返回成功,但存储系统实际上是将此次数据修改的日志写入了日志盘,数据库作为上层应用并不感知是否真正写入数据盘。
5)固态硬盘的特性与传统磁盘不同。传统磁盘没有写入次数限制,读、写、删除操作均以页为单位。固态硬盘存在写入次数限制,当达到一定写入、擦除次数时即为寿命用尽;固态硬盘的擦除操作以块为单位,通常一个块中包含32个连续的页。
目前,日志技术存在以下问题的全部或部分:系统扩展性差的问题、存储空间不均衡的问题、损害固态硬盘寿命的问题、日志写入效率低下的问题、日志同步效率低下的问题、日志删除效率低下的问题,这些问题归根到底是“日志盘的合理使用”和“日志盘写入、同步的性能”之间的矛盾,为此,本发明实施例提出一种基于固态硬盘的日志写入及同步方法,既能够合理使用日志盘,又能够保证日志写入及同步性能。
本发明实施例的技术方案中,如图4所示,单日志盘为多数据盘服务,其中,日志盘包括以下模块:
A:变量区模块。该模块负责记录当前已写入日志的起点页编号和终点页编号。日志以页为单位组织,一次写入的数据根据大小被拆分为若干页,页面中不足部分以0填充。为日志起点页编号和终点页号编各分配2个块,每次修改编号时,采用异地更新的方式——追加写入有效数据,旧数据失效。当整块写完时,继续写到下一个块中,同时将旧块擦除。
这里,为了适应固态硬盘“写前擦除”的特性——固态硬盘在写入之前必须先擦除,但是擦除是以块为单位,同时固态硬盘存在写入次数限制。因此“原地更新”的方式会大大降低固态硬盘的使用寿命。在本发明实施例中采用“异地更新”的方式,则尽可能延长了固态硬盘的使用寿命。
B:位图区模块。该模块负责记录各日志页应实际写入的位置、日志页所属数据区段编号、是否覆盖写。该模块由槽位组成,每一个槽位与数据区模块中一个数据页一一对应,即第1个槽位描述的即是数据区的第1个页的日志页应实际写入的位置、日志页所属数据区段编号、是否覆盖写信息,第2个槽位描述的即是数据区的第2个页的日志页应实际写入的位置、日志页所属数据区段编号、是否覆盖写信息,以此类推。该模块在日志回放之后统一擦除。日志页所属数据区段编号依据不同的存储系统,包括但不限于:文件索引节点号(ino)、对象编号(oid)、块号(BlockID)。优选地,在日志同步时,统计日志元数据中各日志页所属数据区段编号出现的次数,对于该值大于一定阈值的文件,则认为该数据区段访问热度高,则通知内存强制保留该数据区段的最新数据,保留到下一次日志同步之前,并通知存储系统修改日志页应实际写入的位置,将该数据区段存储于高速存储介质。是否覆盖写用于描述在本同步周期内是否存在覆盖写,如有,则最后一次覆盖写为有效写。
C:数据区模块。该模块负责日志的实际写入,由一个一个的页面组成。该模块仅负责记录写入内容。在磁盘空间中,日志以页为单位,顺序写入。当写到磁盘空间的最后一个页时,再循环写到磁盘空间的第一个页中。日志同步之后,将已同步的日志块擦除,如果最后一个块未写满,则将该块延迟到下次日志同步时擦除。触发日志同步的情况包括但不限于:(1)一定时间间隔;(2)日志空间达到一定阈值;(3)断电重启后强制系统恢复;(4)系统十分空闲的时段。
基于以上日志盘中各个模块的用途,以下阐述本发明实施例的日志写入及同步方法。
图5为本发明实施例的日志写入方法的流程示意图,如图5所示,所述方法包括:
步骤501:从日志盘的变量区中读取已写入日志的终点页编号。
步骤502:将日志写入所述终点页编号所对应的数据区页面中,形成日志页。
步骤503:获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中。
本发明实施例中,在日志盘的位图区中,确定所述日志页对应的位图编号,其中,所述日志页对应的位图编号等于所述已写入日志的终点页编号;获取所述日志页对应的写入位置和日志页所属的数据区段编号;在所述日志盘的位图区中,将所述日志页对应的写入位置和日志页所属的数据区段编号写入所述位图编号所指定的槽位中,并将所述槽位标记为已写入。
本发明实施例中,还包括如下步骤:
步骤504:在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。
本发明实施例中,在所述日志盘的变量区中,读取处于有效态的已写入日志的终点页编号,作为旧终点页编号;判断所述旧终点页编号所在的块中是否存在剩余空间;如果所述旧终点页编号所在的块中存在剩余空间,则在所述旧终点页编号的相邻下一个位置处写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号标记为无效,将所述新终点页编号标记为有效;如果所述旧终点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号所在的块擦除,将所述新终点页编号标记为有效。
本发明实施例中,所述方法还包括:在日志盘的数据区中,判断处于空闲态的数据区页面的数量是否小于等于预设阈值;如果处于空闲态的数据区页面的数量小于等于预设阈值,则触发日志同步。
图6为本发明实施例的日志同步方法的流程示意图,如图6所示,所述方法包括:
步骤601:从日志盘的变量区中读取已写入日志的起点页编号和终点页编号。
步骤602:第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1。
第一次遍历日志盘的位图区之前,所述方法还包括:
比较所述已写入日志的起点页编号和终点页编号是否相同;
如果所述已写入日志的起点页编号和终点页编号不相同,则进行第一次遍历日志盘。
步骤603:第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘。
本发明实施例中,第二次遍历日志盘的位图区之后,所述方法还包括:
第三次遍历日志盘的位图区,统计各日志页所属的数据区段编号的出现次数;如果日志页所属的数据区段编号的出现次数大于等于预设阈值,则通知内存在下一次日志同步之前保留该数据区段编号对应的文件数据,并修改日志页对应的写入位置,将所述文件数据转储至高速存储介质。
步骤604:擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
本发明实施例中,所述擦除日志盘的位图区和数据区中的内容,包括:
读取已写入日志的起点页编号和终点页编号;
在数据区中,将起点页编号所在的块擦除,将起点页编号所在的块的相邻下一个块擦除,直至将终点页编号所在的块的相邻前一个块擦除;判断终点页编号是否位于块的最后一页;如果终点页编号位于块的最后一页,则将终点页编号所在的块擦除;
在位图区中,将与起点页编号相等的位图编号所在的块擦除,依次擦除相邻的块直至将与终点页编号相等的位图编号所在的块擦除。
本发明实施例中,所述修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号,包括:
在所述日志盘的变量区中,读取处于有效态的已写入日志的起点页编号,作为旧起点页编号;
判断所述旧起点页编号所在的块中是否存在剩余空间;
如果所述旧起点页编号所在的块中存在剩余空间,则在所述旧起点页编号的相邻下一个位置处写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号标记为无效,将所述新起点页编号标记为有效;
如果所述旧起点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号所在的块擦除,将所述新起点页编号标记为有效。
下面结合具体应用场景对本发明实施例的技术方案做进一步详细描述:实施例1作为本发明创造的优选方式,应用场景为本发明的典型应用——分布式文件系统;实施例2作为本发明创造的一般方式,应用场景为分布式块存储系统,应用特点为虚拟机访问;实施例3作为本发明创造的一般方式,应用场景为分布式对象存储系统,应用特点为小文件访问;实施例4作为相对于实施例1的一种简化实施方式,应用场景为分布式文件系统。以上实施例在系统部分完全相同,根据不同的应用场景和应用目的,在流程上有不同的实现。
在本实施例中,数据盘为机械磁盘,日志盘为固态硬盘。固态硬盘的页大小为4KB,块大小为128KB,固态硬盘的总容量为128GB。该固态硬盘有1048576个块,每个块中有32个页。如图5所示,固态硬盘分为变量区、位图区、数据区。
块号范围为[1,5]作为日志盘变量区,分为三个子区。(1)块编号范围为[1,1]的块用于记录变量区的起始块编号、位图区的起始块编号、数据区的起始块编号(Start Page,简称SP)、数据区的终止块编号(Max Page,简称MP),该部分变量在日志盘初始化时写入,为只读。(2)块编号范围为[2,3]的块用于记录CP(Checked page,已写入日志起点的页编号)。(3)块编号范围为[4,5]的块用于记录LP(Last page,已写入日志终点的页编号)。如图8,子区(2)和子区(3)在写入时以槽位为单位进行写入,单个槽位由槽位号、值、有效标识组成,共占用16B,即共计16384个槽位。在修改CP或LP值时,先将当前有效标识为1的槽位有效标识写0,即表示旧槽位的值无效,并在下一个槽位中写入新值。当处在前面的块写满旧数据后,继续写入后面的块,同时将前面的块整体擦除。当后面的块写满旧数据后,重新写入前面的块,同时将后面的块整体擦除,以此类推。在读CP、LP时,遍历槽位,找到唯一有效标识为1的槽位,读出其中的值即可。
块编号范围为[6,4111]作为日志位图区。该区域由33554432个槽位组成,如图9所示,槽位记录ino、layout、is_repeat信息,单槽位占用16B。如图10所示,每个槽位按照顺序与该固态硬盘的页一一对应,表示该日志页的元数据。槽位编号与数据页编号相等。由于日志盘变量区和日志位图区不含元数据,因此前131552个槽位作废。在日志写入时,先将日志数据写入日志数据区的页面中,然后将该日志的元数据写入与该日志数据页面对应的日志位图槽位中。在日志同步时,根据位图槽位中的元数据,将日志数据页面实际写入数据盘中。由于日志页面在写入时是顺序、循环写入,因此日志位图同样是顺序、循环写入的。
块编号范围为[4112,1048576]作为日志数据区。日志数据均以页为单位,写不满一页的数据按照一页存储,超过一页的数据以页为单位拆分。日志同步时,根据日志位图区中记录的元数据,将日志数据页面拷贝到数据盘中即完成。CP和LP记录了日志数据区中的有效日志。每写入一个日志页面,在变量区中需要修改LP值。每做一次日志同步,在变量区中需要修改CP值。在日志同步之后,即可以将完整的脏块擦除。
实施例1
日志写入流程部分的处理步骤如下:
步骤1:读取CP、LP。初始值均为0。
步骤2:将日志页数据写入编号为LP的日志数据页面。
步骤3:从文件系统获取写入操作的元数据,包括layout、ino等。将layout和ino存放在日志位图区,槽位号即为LP。
步骤4:LP++。
步骤5:判断LP是否等于MP,如果相等,则LP赋值为SP。
步骤6:判断LP+5是否等于CP,如果等于,则触发日志同步。
日志同步流程部分的处理步骤如下:
步骤1:读取CP、LP。
步骤2:检查CP与LP是否相等,如果相等,则结束。如果CP小于LP,则进入步骤3。如果CP大于LP,则进入步骤7。
步骤3:读取日志位图区,遍历槽位号从CP至LP的元数据layout有无重复。如有重复则将槽位号最大的is_repeat保留,其余置1。
步骤4:读取日志位图区,再次遍历槽位号从CP至LP的元数据,如遇is_repeat为1,则跳过该日志元数据;否则,根据ino和layout将相应日志页的内容写入数据盘。
步骤5:读取日志位图区,第三次遍历槽位号从CP至LP的元数据,统计各ino的出现次数。对于次数大于5的ino,则通知内存强制保留该文件的最新数据,保留到下一次日志同步之前,并通知文件系统修改layout,将该文件转储于高速存储介质。
步骤6:擦除日志位图区中,槽位编号从CP至LP的元数据。擦除日志数据区中,页面编号从CP至LP的数据内容。进入步骤11。
步骤7:读取日志元数据区,遍历槽位号从CP至MP,SP至LP的元数据layout有无重复。如有重复则将CP至MP、SP至LP中分别编号最大的is_repeat保留,其余置1。如果有CP至MP、SP至LP均有保留is_repeat,则将CP至MP中保留的is_repeat置1。
步骤8:读取日志位图区,再次遍历槽位号从CP至LP,SP至LP的元数据,如遇is_repeat为1,则跳过该日志元数据;否则,根据ino和layout将相应日志页的内容写入数据盘。
步骤9:读取日志位图区,第三次遍历槽位号从CP至LP,SP至LP的元数据,统计各ino的出现次数。对于次数大于5的ino,则通知内存强制保留该文件的最新数据,保留到下一次日志同步之前,并通知文件系统修改layout,将该文件转储于高速存储介质。
步骤10:擦除日志位图区中,槽位编号从CP至LP,SP至LP的元数据。擦除日志数据区中,页面编号从CP至LP,SP至LP的数据内容。
步骤11:修改日志盘变量,将CP设置等于LP。
实施例2
日志写入流程部分的处理步骤如下:
步骤1:读取CP、LP。
步骤2:从文件系统获取写入操作的元数据,包括layout、BlockID等。将layout和BlockID存放在日志位图区,槽位号即为LP。
步骤3:将日志页数据写入编号为LP的日志数据页面。
步骤4:LP++。
步骤5:判断LP是否等于MP,如果相等,则LP赋值为SP。
步骤6:判断LP+1是否等于CP,如果等于,则触发日志同步。
日志同步流程部分的处理步骤如下:
步骤1:读取CP、LP。
步骤2:检查CP与LP是否相等,如果相等,则结束。如果CP小于LP,则进入步骤3。如果CP大于LP,则进入步骤6。
步骤3:读取日志位图区,遍历槽位号从CP至LP的元数据,根据BlockID和layout将相应日志页的内容写入数据盘。
步骤4:读取日志位图区,遍历槽位号从CP至LP的元数据,统计各BlockID的出现次数。对于次数大于5的BlockID,则通知内存强制保留该文件的最新数据,保留到下一次日志同步之前,并通知文件系统修改layout,将该文件转储于高速存储介质。
步骤5:擦除日志位图区中,槽位编号从CP至LP的元数据。擦除日志数据区中,页面编号从CP至LP的数据内容。进入步骤11。
步骤6:读取日志元数据区,遍历槽位号从CP至MP,SP至LP的元数据,根据BlockID和layout将相应日志页的内容写入数据盘。
步骤7:读取日志位图区,遍历槽位号从CP至LP,SP至LP的元数据,统计各BlockID的出现次数。对于次数大于5的BlockID,则通知内存强制保留该文件的最新数据,保留到下一次日志同步之前,并通知文件系统修改layout,将该文件转储于高速存储介质。
步骤8:擦除日志位图区中,槽位编号从CP至LP,SP至LP的元数据。擦除日志数据区中,页面编号从CP至LP,SP至LP的数据内容。
步骤9:修改日志盘变量,将CP设置等于LP。
实施例3
该实施方式的应用场景为互联网小图片存储业务,定义小于1KB的图片为小图片。因此单个page一定可以聚合存储4个小图片。位图区中,每个槽位增加一个名为gather的数组,数组的长度为4,数组的元素分别用于保存oid。其中,第1个元素保存该page中第1个1KB中存储小图片的oid,第2个元素用于保存该page中第2个1KB中存储小图片的oid,以此类推。数组元素为0时,表示该page中该1KB位置空缺。
日志写入流程部分的处理步骤如下:
步骤1:判断文件大小是否小于1KB,如否,则不写入日志,直接写入磁盘。
步骤2:读取CP、LP。初始值均为0。
步骤3:读取位图区槽位号为LP的layout,如果layout不为0,则进入步骤4,如果layout为0,则进入步骤5。
步骤4:读取位图区槽位号为LP的gather数组,依次判断第1元素、第2元素、第3元素、第4元素是否为0,将为0的最小元素的序号计入i。进入步骤6。
步骤5:将i赋值为0。
步骤6:将日志数据写入编号为LP的日志数据页面中的第i个1KB中。
步骤7:从文件系统获取该小图片的oid,将其存放在位图区槽位号为LP的gather数组的第i个元素中。
步骤8:如果i等于4,则LP++
步骤9:判断LP是否等于MP,如果相等,则LP赋值为SP。
步骤10:判断LP+5是否等于CP,如果等于,则触发日志同步。
日志同步流程部分的处理步骤如下:
步骤1:读取CP、LP。
步骤2:检查CP与LP是否相等,如果相等,则结束。如果CP小于LP,则进入步骤3。如果CP大于LP,则进入步骤7。
步骤3:读取日志位图区,遍历槽位号从CP至LP的元数据layout有无重复。如有重复则将槽位号最大的is_repeat保留,其余置1。
步骤4:读取日志位图区,遍历槽位号从CP至LP的元数据,如遇is_repeat为1,则跳过该日志元数据;否则,根据ino和layout将相应日志页的内容写入数据盘。
步骤5:读取日志位图区,遍历槽位号从CP至LP的gather数组,统计各oid的出现次数。对于次数大于5的oid,则通知内存强制保留该图片的最新数据,保留到下一次日志同步之前,并通知文件系统修改layout,将该文件转储于高速存储介质。
步骤6:擦除日志位图区中,槽位编号从CP至LP的元数据。擦除日志数据区中,页面编号从CP至LP的数据内容。进入步骤11。
步骤7:读取日志元数据区,遍历槽位号从CP至MP,SP至LP的元数据layout有无重复。如有重复则将CP至MP、SP至LP中分别编号最大的is_repeat保留,其余置1。如果有CP至MP、SP至LP均有保留is_repeat,则将CP至MP中保留的is_repeat置1。
步骤8:读取日志位图区,遍历槽位号从CP至LP,SP至LP的元数据,如遇is_repeat为1,则跳过该日志元数据;否则,根据ino和layout将相应日志页的内容写入数据盘。
步骤9:读取日志位图区,遍历槽位号遍历槽位号从CP至LP、SP至LP的gather数组,统计各oid的出现次数。对于次数大于5的oid,则通知内存强制保留该文件的最新数据,保留到下一次日志同步之前,并通知文件系统修改layout,将该文件转储于高速存储介质。
步骤10:擦除日志位图区中,槽位编号从CP至LP,SP至LP的元数据。擦除日志数据区中,页面编号从CP至LP,SP至LP的数据内容。
步骤11:修改日志盘变量,将CP设置等于LP。
实施例4
日志写入流程部分的处理步骤如下:
步骤1:读取CP、LP。
步骤2:将日志页数据写入编号为LP的日志数据页面。
步骤3:从文件系统获取写入操作的元数据,包括layout、ino等。将layout和ino存放在日志位图区,槽位号即为LP。
步骤4:LP++。
步骤5:判断LP是否等于MP,如果相等,则触发日志同步。
日志同步流程部分的处理步骤如下:
步骤1:读取CP、LP。
步骤2:读取日志位图区,遍历槽位号从CP至LP的元数据,根据ino和layout将相应日志页的内容写入数据盘。
步骤3:擦除日志位图区中,槽位编号从CP至LP的元数据。
步骤4:擦除日志数据区中,页面编号从CP至LP的数据内容。
步骤5:修改日志盘变量,将CP设置等于LP。
图11为本发明实施例的日志写入装置的结构组成示意图,如图11所示,所述装置包括:
读取单元1101,用于从日志盘的变量区中读取已写入日志的终点页编号;
第一写入单元1102,用于将日志写入所述终点页编号所对应的数据区页面中,形成日志页;
获取单元1103,用于获取所述日志页对应的写入位置和日志页所属的数据区段编号;
第二写入单元1104,用于将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中。
本发明实施例中,所述装置还包括:
设置单元1105,用于在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。
本发明实施例中,所述装置还包括:
同步触发单元1106,用于在日志盘的数据区中,判断处于空闲态的数据区页面的数量是否小于等于预设阈值;如果处于空闲态的数据区页面的数量小于等于预设阈值,则触发日志同步。
本发明实施例中,所述装置还包括:
确定单元1107,用于在日志盘的位图区中,确定所述日志页对应的位图编号,其中,所述日志页对应的位图编号等于所述已写入日志的终点页编号;
所述第二写入单元1104,具体用于:在所述日志盘的位图区中,将所述日志页对应的写入位置和日志页所属的数据区段编号写入所述位图编号所指定的槽位中,并将所述槽位标记为已写入。
本发明实施例中,所述设置单元1105,具体用于:在所述日志盘的变量区中,读取处于有效态的已写入日志的终点页编号,作为旧终点页编号;
判断所述旧终点页编号所在的块中是否存在剩余空间;
如果所述旧终点页编号所在的块中存在剩余空间,则在所述旧终点页编号的相邻下一个位置处写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号标记为无效,将所述新终点页编号标记为有效;
如果所述旧终点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号所在的块擦除,将所述新终点页编号标记为有效。
本领域技术人员应当理解,图11所示的日志写入装置中的各单元的实现功能可参照前述日志写入方法的相关描述而理解。
图12为本发明实施例的日志同步装置的结构组成示意图,如图12所示,所述装置包括:
读取单元1201,用于从日志盘的变量区中读取已写入日志的起点页编号和终点页编号;
第一遍历单元1202,用于第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1;
第二遍历单元1203,用于第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘;
处理单元1204,用于擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
本发明实施例中,所述装置还包括:
第三遍历单元1205,用于第三次遍历日志盘的位图区,统计各日志页所属的数据区段编号的出现次数;如果日志页所属的数据区段编号的出现次数大于等于预设阈值,则通知内存在下一次日志同步之前保留该数据区段编号对应的文件数据,并修改日志页对应的写入位置,将所述文件数据转储至高速存储介质。
本发明实施例中,所述装置还包括:
比较单元1206,用于比较所述已写入日志的起点页编号和终点页编号是否相同;如果所述已写入日志的起点页编号和终点页编号不相同,则进行第一次遍历日志盘。
本发明实施例中,所述处理单元1204包括:
擦除子单元12041,用于读取已写入日志的起点页编号和终点页编号;在数据区中,将起点页编号所在的块擦除,将起点页编号所在的块的相邻下一个块擦除,直至将终点页编号所在的块的相邻前一个块擦除;判断终点页编号是否位于块的最后一页;如果终点页编号位于块的最后一页,则将终点页编号所在的块擦除;在位图区中,将与起点页编号相等的位图编号所在的块擦除,依次擦除相邻的块直至将与终点页编号相等的位图编号所在的块擦除。
本发明实施例中,所述处理单元1204包括:
设置子单元12042,用于在所述日志盘的变量区中,读取处于有效态的已写入日志的起点页编号,作为旧起点页编号;判断所述旧起点页编号所在的块中是否存在剩余空间;如果所述旧起点页编号所在的块中存在剩余空间,则在所述旧起点页编号的相邻下一个位置处写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号标记为无效,将所述新起点页编号标记为有效;如果所述旧起点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号所在的块擦除,将所述新起点页编号标记为有效。
本领域技术人员应当理解,图12所示的日志同步装置中的各单元的实现功能可参照前述日志同步方法的相关描述而理解。
图13为本发明实施例的日志系统的结构组成示意图,如图13所示,所述系包括:日志写入装置1301、日志同步装置1302,其中,
所述日志写入装置1301,用于从日志盘的变量区中读取已写入日志的终点页编号;将日志写入所述终点页编号所对应的数据区页面中,形成日志页;获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中;在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头;
所述日志写入装置1301,还用于在日志盘的数据区中,判断处于空闲态的数据区页面的数量是否小于等于预设阈值;如果处于空闲态的数据区页面的数量小于等于预设阈值,则触发日志同步。
所述日志同步装置1302,用于从日志盘的变量区中读取已写入日志的起点页编号和终点页编号;第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1;第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘;擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
上述日志写入装置1301和日志同步装置1302所实现的具体功能可参照图11和图12的相关内容进行理解。
本领域内的技术人员应明白,本发明的实施例可提供为方法、系统、或计算机程序产品。因此,本发明可采用硬件实施例、软件实施例、或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器和光学存储器等)上实施的计算机程序产品的形式。
本发明是参照根据本发明实施例的方法、设备(系统)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
相应地,本发明实施例还提供一种计算机存储介质,其中存储有计算机程序,该计算机程序配置为执行本发明实施例的日志写入方法或者日志同步方法。
以上所述,仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。
Claims (19)
1.一种日志写入方法,其特征在于,所述方法包括:
从日志盘的变量区中读取已写入日志的终点页编号;
将日志写入所述终点页编号所对应的数据区页面中,形成日志页;
获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中。
2.根据权利要求1所述的日志写入方法,其特征在于,所述方法还包括:
在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。
3.根据权利要求1所述的日志写入方法,其特征在于,所述方法还包括:
在日志盘的数据区中,判断处于空闲态的数据区页面的数量是否小于等于预设阈值;
如果处于空闲态的数据区页面的数量小于等于预设阈值,则触发日志同步。
4.根据权利要求1所述的日志写入方法,其特征在于,所述获取所述日志页对应的写入位置和日志页所属的数据区段编号,将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中,包括:
在日志盘的位图区中,确定所述日志页对应的位图编号,其中,所述日志页对应的位图编号等于所述已写入日志的终点页编号;
获取所述日志页对应的写入位置和日志页所属的数据区段编号;
在所述日志盘的位图区中,将所述日志页对应的写入位置和日志页所属的数据区段编号写入所述位图编号所指定的槽位中,并将所述槽位标记为已写入。
5.根据权利要求1所述的日志写入方法,其特征在于,所述在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,包括:
在所述日志盘的变量区中,读取处于有效态的已写入日志的终点页编号,作为旧终点页编号;
判断所述旧终点页编号所在的块中是否存在剩余空间;
如果所述旧终点页编号所在的块中存在剩余空间,则在所述旧终点页编号的相邻下一个位置处写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号标记为无效,将所述新终点页编号标记为有效;
如果所述旧终点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新终点页编号,所述新终点页编号等于所述旧终点页编号加1;将所述旧终点页编号所在的块擦除,将所述新终点页编号标记为有效。
6.一种日志同步方法,其特征在于,所述方法包括
从日志盘的变量区中读取已写入日志的起点页编号和终点页编号;
第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1;
第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘;
擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
7.根据权利要求6所述的日志同步方法,其特征在于,第二次遍历日志盘的位图区之后,所述方法还包括:
第三次遍历日志盘的位图区,统计各日志页所属的数据区段编号的出现次数;
如果日志页所属的数据区段编号的出现次数大于等于预设阈值,则通知内存在下一次日志同步之前保留该数据区段编号对应的文件数据,并修改日志页对应的写入位置,将所述文件数据转储至高速存储介质。
8.根据权利要求6所述的日志同步方法,其特征在于,第一次遍历日志盘的位图区之前,所述方法还包括:
比较所述已写入日志的起点页编号和终点页编号是否相同;
如果所述已写入日志的起点页编号和终点页编号不相同,则进行第一次遍历日志盘。
9.根据权利要求6所述的日志同步方法,其特征在于,所述擦除日志盘的位图区和数据区中的内容,包括:
读取已写入日志的起点页编号和终点页编号;
在数据区中,将起点页编号所在的块擦除,将起点页编号所在的块的相邻下一个块擦除,直至将终点页编号所在的块的相邻前一个块擦除;判断终点页编号是否位于块的最后一页;如果终点页编号位于块的最后一页,则将终点页编号所在的块擦除;
在位图区中,将与起点页编号相等的位图编号所在的块擦除,依次擦除相邻的块直至将与终点页编号相等的位图编号所在的块擦除。
10.根据权利要求6所述的日志同步方法,其特征在于,所述修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号,包括:
在所述日志盘的变量区中,读取处于有效态的已写入日志的起点页编号,作为旧起点页编号;
判断所述旧起点页编号所在的块中是否存在剩余空间;
如果所述旧起点页编号所在的块中存在剩余空间,则在所述旧起点页编号的相邻下一个位置处写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号标记为无效,将所述新起点页编号标记为有效;
如果所述旧起点页编号所在的块中不存在剩余空间,则在另一个块的首部写入新起点页编号,所述新起点页编号等于所述旧起点页编号;将所述旧起点页编号所在的块擦除,将所述新起点页编号标记为有效。
11.一种日志写入装置,其特征在于,所述装置包括:
读取单元,用于从日志盘的变量区中读取已写入日志的终点页编号;
第一写入单元,用于将日志写入所述终点页编号所对应的数据区页面中,形成日志页;
获取单元,用于获取所述日志页对应的写入位置和日志页所属的数据区段编号;
第二写入单元,用于将所述日志页对应的写入位置和日志页所属的数据区段编号存储至日志盘的位图区中。
12.根据权利要求11所述的日志写入装置,其特征在于,所述装置还包括:
设置单元,用于在所述日志盘的变量区中,将所述已写入日志的终点页编号加1,并判断日志是否已写到日志盘的盘尾;如果日志已写到日志盘的盘尾,则将已写入日志的终点设置为盘头。
13.根据权利要求11所述的日志写入装置,其特征在于,所述装置还包括:
同步触发单元,用于在日志盘的数据区中,判断处于空闲态的数据区页面的数量是否小于等于预设阈值;如果处于空闲态的数据区页面的数量小于等于预设阈值,则触发日志同步。
14.根据权利要求11所述的日志写入装置,其特征在于,所述装置还包括:
确定单元,用于在日志盘的位图区中,确定所述日志页对应的位图编号,其中,所述日志页对应的位图编号等于所述已写入日志的终点页编号;
所述第二写入单元,具体用于:在所述日志盘的位图区中,将所述日志页对应的写入位置和日志页所属的数据区段编号写入所述位图编号所指定的槽位中,并将所述槽位标记为已写入。
15.一种日志同步装置,其特征在于,所述装置包括:
读取单元,用于从日志盘的变量区中读取已写入日志的起点页编号和终点页编号;
第一遍历单元,用于第一次遍历日志盘的位图区,查看从起点日志页至终点日志页对应的元数据,如果元数据中的写入位置有重复,则将旧元数据的是否覆盖写置为1;
第二遍历单元,用于第二次遍历日志盘的位图区,如果遇到是否覆盖写为1的元数据,则跳过该元数据;否则,根据元数据中的写入位置和日志页所属的数据区段编号将相应日志页的内容写入数据盘;
处理单元,用于擦除日志盘的位图区和数据区中的内容,并修改所述日志盘的变量区中的变量,将已写入日志的起点页编号设置等于已写入日志的终点页编号。
16.根据权利要求15所述的日志同步装置,其特征在于,所述装置还包括:
第三遍历单元,用于第三次遍历日志盘的位图区,统计各日志页所属的数据区段编号的出现次数;如果日志页所属的数据区段编号的出现次数大于等于预设阈值,则通知内存在下一次日志同步之前保留该数据区段编号对应的文件数据,并修改日志页对应的写入位置,将所述文件数据转储至高速存储介质。
17.根据权利要求15所述的日志同步装置,其特征在于,所述装置还包括:
比较单元,用于比较所述已写入日志的起点页编号和终点页编号是否相同;如果所述已写入日志的起点页编号和终点页编号不相同,则进行第一次遍历日志盘。
18.一种日志系统,其特征在于,所述日志系统包括权利要求11至14任一项所述的日志写入装置、以及权利要求15至17任一项所述的日志同步装置。
19.一种计算机存储介质,所述计算机存储介质中存储有计算机可执行指令,该计算机可执行指令用于执行权利要求1-5任一项所述的日志写入方法,或者,执行权利要求6-10任一项所述的日志同步方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710327224.7A CN108334277B (zh) | 2017-05-10 | 2017-05-10 | 一种日志写入及同步方法、装置、系统、计算机存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710327224.7A CN108334277B (zh) | 2017-05-10 | 2017-05-10 | 一种日志写入及同步方法、装置、系统、计算机存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108334277A true CN108334277A (zh) | 2018-07-27 |
CN108334277B CN108334277B (zh) | 2019-06-28 |
Family
ID=62922387
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710327224.7A Active CN108334277B (zh) | 2017-05-10 | 2017-05-10 | 一种日志写入及同步方法、装置、系统、计算机存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108334277B (zh) |
Cited By (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109408482A (zh) * | 2018-12-17 | 2019-03-01 | 浪潮电子信息产业股份有限公司 | 一种数据存储方法、系统、设备及计算机可读存储介质 |
CN111444154A (zh) * | 2020-03-26 | 2020-07-24 | 涵涡智航科技(玉溪)有限公司 | 一种在单片机系统中高效存储日志文件的方法 |
CN112988880A (zh) * | 2019-12-12 | 2021-06-18 | 阿里巴巴集团控股有限公司 | 数据同步方法、装置、电子设备及计算机存储介质 |
CN113434296A (zh) * | 2021-07-01 | 2021-09-24 | 曙光信息产业股份有限公司 | 缓存回刷方法、装置、电子设备及存储介质 |
CN113971001A (zh) * | 2020-07-23 | 2022-01-25 | 美光科技公司 | 存储器装置中的存储流量模式检测 |
CN117591345A (zh) * | 2024-01-18 | 2024-02-23 | 柏科数据技术(深圳)股份有限公司 | 针对Ceph的数据同步方法、装置、设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103838521A (zh) * | 2014-02-28 | 2014-06-04 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN104932841A (zh) * | 2015-06-17 | 2015-09-23 | 南京邮电大学 | 一种云存储系统中节约型重复数据删除方法 |
CN105335098A (zh) * | 2015-09-25 | 2016-02-17 | 华中科技大学 | 一种基于存储级内存的日志文件系统性能提高方法 |
-
2017
- 2017-05-10 CN CN201710327224.7A patent/CN108334277B/zh active Active
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103838521A (zh) * | 2014-02-28 | 2014-06-04 | 华为技术有限公司 | 一种数据处理方法及装置 |
CN104932841A (zh) * | 2015-06-17 | 2015-09-23 | 南京邮电大学 | 一种云存储系统中节约型重复数据删除方法 |
CN105335098A (zh) * | 2015-09-25 | 2016-02-17 | 华中科技大学 | 一种基于存储级内存的日志文件系统性能提高方法 |
Cited By (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109408482A (zh) * | 2018-12-17 | 2019-03-01 | 浪潮电子信息产业股份有限公司 | 一种数据存储方法、系统、设备及计算机可读存储介质 |
CN112988880A (zh) * | 2019-12-12 | 2021-06-18 | 阿里巴巴集团控股有限公司 | 数据同步方法、装置、电子设备及计算机存储介质 |
CN112988880B (zh) * | 2019-12-12 | 2024-03-29 | 阿里巴巴集团控股有限公司 | 数据同步方法、装置、电子设备及计算机存储介质 |
CN111444154A (zh) * | 2020-03-26 | 2020-07-24 | 涵涡智航科技(玉溪)有限公司 | 一种在单片机系统中高效存储日志文件的方法 |
CN111444154B (zh) * | 2020-03-26 | 2020-11-27 | 涵涡智航科技(玉溪)有限公司 | 一种在单片机系统中高效存储日志文件的方法 |
CN113971001A (zh) * | 2020-07-23 | 2022-01-25 | 美光科技公司 | 存储器装置中的存储流量模式检测 |
CN113971001B (zh) * | 2020-07-23 | 2024-04-12 | 美光科技公司 | 存储器装置中的存储流量模式检测 |
CN113434296A (zh) * | 2021-07-01 | 2021-09-24 | 曙光信息产业股份有限公司 | 缓存回刷方法、装置、电子设备及存储介质 |
CN117591345A (zh) * | 2024-01-18 | 2024-02-23 | 柏科数据技术(深圳)股份有限公司 | 针对Ceph的数据同步方法、装置、设备及存储介质 |
CN117591345B (zh) * | 2024-01-18 | 2024-05-14 | 柏科数据技术(深圳)股份有限公司 | 针对Ceph的数据同步方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN108334277B (zh) | 2019-06-28 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108334277B (zh) | 一种日志写入及同步方法、装置、系统、计算机存储介质 | |
KR101207510B1 (ko) | 클러스터 데이터 관리시스템 및 클러스터 데이터 관리 시스템에서 공유 재수행 로그를 이용한 데이터 재구축 방법 | |
US20180307413A1 (en) | Control of storage of data in a hybrid storage system | |
CN104461391B (zh) | 一种存储设备元数据管理处理方法及系统 | |
CN102467408B (zh) | 一种虚拟机数据的访问方法和设备 | |
KR101259557B1 (ko) | 클러스터 데이터 관리 시스템 및 클러스터 데이터 관리 시스템에서 병렬 처리를 이용한 데이터 복구 방법 | |
CN102023809B (zh) | 存储系统、从存储系统读取数据的方法及写入数据的方法 | |
CN101923568B (zh) | 布隆过滤器的元素增加、删除方法以及布隆过滤器 | |
CN104583930B (zh) | 数据迁移的方法、控制器和数据迁移装置 | |
US20160188227A1 (en) | Method and apparatus for writing data into solid state disk | |
CN104298681B (zh) | 一种数据存储方法及装置 | |
CN107798130A (zh) | 一种分布式存储的快照方法 | |
CN103473298B (zh) | 数据归档方法和装置以及存储系统 | |
CN104615594B (zh) | 一种数据更新方法及装置 | |
CN105574104A (zh) | 一种基于ObjectStore的LogStructure存储系统及其数据写入方法 | |
CN107391544B (zh) | 列式存储数据的处理方法、装置、设备及计算机储存介质 | |
CN105786401A (zh) | 服务器集群系统中的数据管理方法及装置 | |
US20120117297A1 (en) | Storage tiering with minimal use of dram memory for header overhead | |
CN108733306A (zh) | 一种文件合并方法及装置 | |
CN104281535B (zh) | 一种映射表在内存中的处理方法和装置 | |
US5604894A (en) | Memory management system for checkpointed logic simulator with increased locality of data | |
CN103019884A (zh) | 基于虚拟机快照的内存页去重方法及装置 | |
CN107766374A (zh) | 一种海量小文件存储读取的优化方法和系统 | |
CN109491605A (zh) | 一种基于cow的数据存储方法、装置和介质 | |
CN103092849A (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 |