一种键值数据库内存日志的写入方法

文档序号:8487843阅读:351来源:国知局
一种键值数据库内存日志的写入方法
【技术领域】
[0001]本申请涉及计算机内存管理领域,更具体地涉及一种键值数据库内存日志的写入方法。
【背景技术】
[0002]常见数据库系统使用WAL (Write Ahead Logging)写入策略,即修改数据时并不直接写入到数据库文件中,而是先写入到日志文件(Log文件)中;如果事务失败,日志中的记录会被忽略,撤销修改;如果事务成功,它将在随后的某个时间被写回到数据库文件中,提交修改。
[0003]Log文件作为数据库系统的日志,其工作原理为:数据库在写入内存前先将操作记录到Log文件中,然后再写入内存,这样即使系统崩溃,也可以从Log文件中恢复相应数据,从而避免数据丢失。如果没有Log文件,因为写入的记录刚开始是保存在内存中,此时如果系统崩溃,内存中的数据还没来得及存储到磁盘,就会因为内存重启或断电等原因而丢失。
[0004]在实际操作中,由于所有写入操作都需要先写入日志,日志的写入成为了整个系统写入性能的瓶颈所在,因此如何解决日志写入瓶颈成为了提高系统吞吐量和并发性的关键。

【发明内容】

[0005]有鉴于此,本发明的主要目的之一在于提出一种键值数据库内存日志的写入方法,以便利用Hash算法和多磁盘系统的特性,提高日志写入并发性,有效降低1寻道时间,实现快速高效的日志写入。
[0006]为了实现上述目的,本发明提出了一种键值数据库内存日志的写入方法,包括以下步骤:
[0007]根据系统实际能够使用的磁盘数N,并行写入N个Log文件,且将所述N个Log文件中的每一个分别放置在不同的磁盘上;
[0008]其中,N为自然数。
[0009]其中,在所述并行写入N个Log文件之前先通过Hash算法将原来的Log文件拆分得到M个Log子文件,所述M个Log子文件保存成相同的后缀名文件,且如果M > N,则每次并行写入N个子文件,剩余不足N的最后一次并行写入,通过多次这样的并行写入直到全部文件都写入完;如果M < N,则一次并行写入M个文件;
[0010]其中,M为自然数。
[0011]其中,所述Log文件由三个块构成。
[0012]其中,所述三个块的每一个的大小均为32K。
[0013]其中,所述Log文件为键值对序列。
[0014]其中,所述Log文件中包括多个键值对,其中每一个键值对为一条记录,且每一条所述记录包括一个记录头,以用来记载管理信息。
[0015]其中,所述记录头包含三个字段:CRC32字段、记录长度字段和记录类型字段;其中,所述CRC32字段用于对记录类型和数据字段进行校验,所述记录长度字段用于记录数据的大小,所述记录类型字段用于标识每条记录的逻辑结构和物理分块结构之间的关系。
[0016]其中,所述记录类型字段有四种取值:FULL、FIRST、MIDDLE、LAST ;其中,FULL类型表明该记录包含了完整的数据;当键值对大小超过了每块32K时,需要将数据存储在多条记录中,此时第一条记录的记录类型设置为FIRST,中间记录的记录类型设置为MIDDLE,最后一条记录的记录类型设置为LAST。
[0017]其中,所述记录的最短大小为7B,即记录头的大小。
[0018]其中,当所述Log文件块的剩余空间不足6B时,剩余部分将被填充为空字符串。
[0019]基于上述技术方案可知,本发明的方法通过Hash散列算法提高并发性,多个硬盘同时写入,减少随机10,提高吞吐量,从而达到合理利用硬件资源,有效降低1寻道时间,最终达到尚并发、尚吞吐、快速尚效的日志与入。
【附图说明】
[0020]图1是Log文件块结构的布局示意图;
[0021]图2是数据库内记录的结构示意图。
【具体实施方式】
[0022]为使本发明的目的、技术方案和优点更加清楚明白,以下结合具体实施例,并参照附图,对本发明作进一步的详细说明。
[0023]日志文件(Log文件)在系统中的主要作用是在系统崩溃恢复时防止丢失数据,由于现有技术中所有写入操作都需要先写入日志,因此日志的写入成为了整个系统写入性能的瓶颈所在。
[0024]为了提高日志文件的写入速度,本发明尝试通过Hash算法,将写入日志文件的操作分解成同时写入多个文件,但是在实际使用时发现,数据库的写入效率没有改善,反而大大的降低。经分析可知,日志文件经过Hash后,会写入到不同的文件中。写入不同Log文件时磁盘通常调用随机磁盘1/0,而随机磁盘I/O由于两次写入地址并不相邻,有可能相距很远,磁头需要很长的换道时间,磁头不停地换道导致系统性能大大降低。
[0025]为了避免上述随机磁盘I/O带来的弊端,本发明将多块磁盘组织起来,先通过Hash算法将日志文件分成与磁盘数相等数目的子文件,然后将每个Log子文件分别放置在不同的磁盘上,从而避免了随机磁盘I/O。其实现方式也极为简单,只需要将每个磁盘分配不同的目录,如有三块磁盘,分别将三块磁盘中存储Log的位置软连接为/home/Deluge/LogO> /home/Deluge/Logl、/home/Deluge/Log2。记录在 Hash 之后分别写到三个文件:/home/Deluge/LogO/1gging0.XXX、/home/Deluge/Logl/loggingl.XXX、/home/Deluge/Log2/loggingl.XXX中,这会引发三个磁盘的顺序写入,而不会导致随机磁盘1/0的产生。每个Log子文件保存成相同的后缀名文件,用于作为还原日志内容的标志。
[0026]下面结合附图来对本发明的一个优选实施例进行进一步的阐释说明。
[0027]Log文件的物理布局
[0028]本发明的数据库为了方便Log的读取和写入,将Log文件以32K为单位进行了分害J,以块(chunk)作为磁盘
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1