CN104657366B - 海量日志写入数据库的方法、装置和日志容灾系统 - Google Patents
海量日志写入数据库的方法、装置和日志容灾系统 Download PDFInfo
- Publication number
- CN104657366B CN104657366B CN201310580987.4A CN201310580987A CN104657366B CN 104657366 B CN104657366 B CN 104657366B CN 201310580987 A CN201310580987 A CN 201310580987A CN 104657366 B CN104657366 B CN 104657366B
- Authority
- CN
- China
- Prior art keywords
- log
- byte
- write
- database
- buffer area
- 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.)
- Active
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明公开了一种海量日志写入数据库的方法、装置和日志容灾系统,以在日志产生装置产生大量日志时减小日志入库的丢失率。所述方法包括:将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;从缓冲区读取日志;按照顺序写磁盘的操作方式将读取的日志保存至数据库。由于日志在写入数据前可在缓冲区进行缓存,由此可以减轻在网络I/O速度较大时日志入库的写磁盘压力,另一方面,在从缓冲区读取日志后,是按照顺序写磁盘的操作方式将日志保存至数据库,由于顺序写磁盘的速度远远大于随机写磁盘的速度,因此,本发明提供的日志入库时写磁盘的方式大大提高了日志写入数据库的速度,减小了网络I/O速度较大时导致的日志入库的丢失率。
Description
技术领域
本发明涉及数据存储领域,具体涉及海量日志写入数据库的方法、装置和日志容灾系统。
背景技术
日志是对用户在终端或通过终端所进行的一些行为的记录,这种记录一旦被保存下来,便可以作为以后查询、跟踪和分析的依据。日志的类型很多,常见的例如网站日志,是记录Web服务器接收处理请求以及运行时错误等各种原始信息的文件,网站日志最大的意义是记录网站运营中空间的运营情况和被访问请求的记录等内容。再如,在电话系统中,每产生一次通话,日志系统将会记录该通话的双方号码、起始时间、产生的话费等,这些内容也被称为日志。类似的还有银行的存取款记录和即时通信软件的登录记录等也可以称为日志。
产生日志的装置可以是处理业务的终端(例如,ATM机),也可以是处理该业务的后台服务器(例如,电话交换机和计费服务器等),而接收和保存日志的服务器被称为日志服务器。日志可以由日志服务器保存在文件中,也可以通过向数据库写入日志从而将日志保存在数据库中,其中,后者因为其易管理性而成为主流。
现有技术提供的一种将日志写入数据库的方法是首先将日志产生装置和日志服务器分开,即采用专门的日志服务器来接收和保存日志。日志产生装置将日志发送到日志服务器特定的网络端口(通常需要定义内部协议),日志服务器负责监听特定的网络端口,一旦有日志到达,就将日志接收下来,保存到磁盘,其中,保存到磁盘的一种方式是将日志直接插入到数据库,另一种方式先将日志保存到文件,再用数据库插入装置(inserter)读取文件内容,将日志 一次一行地或一次多行地插入到数据库中。
然而,对于上述现有的将日志写入数据库的方法,在保存日志时无论采取上述两种保存方式中的哪一种,都面临一个重要的问题:磁盘输入输出(Input/Output,I/O)的速度赶不上网络I/O的速度。在海量日志即日志量很大时会导致日志来不及写而丢失,严重情况下,日志的丢失率可达90%甚至更高。
发明内容
本发明实施例提供海量日志写入数据库的方法、装置和日志容灾系统,以在日志产生装置产生大量日志时减小日志入库的丢失率。
本发明实施例提供一种海量日志写入数据库的方法,所述方法包括:
将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;
从所述缓冲区读取所述日志;
按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。
本发明另一实施例提供一种海量日志写入数据库的装置,所述装置包括:
缓存模块,用于将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;
读取模块,用于从所述缓冲区读取所述日志;
写入模块,用于按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。
本发明另一实施例提供一种日志容灾系统,所述系统包括接口服务器、主日志服务器和备日志服务器;
所述接口服务器,用于将日志产生装置生成的日志按照同一日志内容制作成正本和副本的方式分别发送至所述主日志服务器和备日志服务器;
所述主日志服务器或备日志服务器用于执行如下方法步骤:将日志产生装 置生成并通过接口服务器发送的日志写入缓冲区进行缓存;从所述缓冲区读取所述日志;按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。
从上述本发明实施例可知,一方面,由于日志在写入数据前可在缓冲区进行缓存,由此可以减轻在网络I/O速度较大时日志入库的写磁盘压力,另一方面,在从缓冲区读取日志后,是按照顺序写磁盘的操作方式将所述读取的日志保存至数据库,由于顺序写磁盘的速度远远大于随机写磁盘的速度,因此,本发明实施例提供的日志入库时写磁盘的方式大大提高了日志写入数据库的速度,减小了由于网络I/O速度较大时导致的日志入库的丢失率。
附图说明
图1是本发明实施例提供的海量日志写入数据库的方法的基本流程示意图;
图2是本发明实施例提供的海量日志写入数据库的装置逻辑结构示意图;
图3是本发明另一实施例提供的海量日志写入数据库的装置逻辑结构示意图;
图4是本发明另一实施例提供的海量日志写入数据库的装置逻辑结构示意图;
图5-a是本发明另一实施例提供的海量日志写入数据库的装置逻辑结构示意图;
图5-b是本发明另一实施例提供的海量日志写入数据库的装置逻辑结构示意图;
图5-c是本发明另一实施例提供的海量日志写入数据库的装置逻辑结构示意图;
图6是本发明实施例提供的日志容灾系统逻辑结构示意图;
图7是本发明实施例提供的实现海量日志写入数据库的系统架构图。
具体实施方式
本发明实施例提供海量日志写入数据库的方法,所述方法包括:将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;从所述缓冲区读取所述日志;按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。本发明实施例还提供相应的海量日志写入数据库的装置和日志容灾系统。以下分别进行详细说明。
本发明实施例的海量日志写入数据库的方法可应用于日志服务器,其执行主体可以是日志服务器或者其中的功能模块。本发明实施例提供的海量日志写入数据库的方法的基本流程可参考图1,主要包括步骤S101至步骤S103,详细说明如下:
S101,将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存。
在本发明实施例中,可以使用共享内存实现缓冲区,即本发明实施例的缓冲区可以为环状缓冲区。作为本发明一个实施例,将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存可以是将所述日志产生装置生成并通过接口服务器发送的日志从所述环状缓冲区的尾部写入所述环状缓冲区,即,假设环状缓冲区大小为K个字节(byte),其当前的头部是第H字节,尾部是第T字节,向环状缓冲区写入日志时,从第(T+1)%K个字节开始写,其中,符号“%”表示将T+1与K相除后对结果取余。也就是说,如果T+1=K,那么从缓冲区的第0个字节开始写,这样就实现了环状缓冲区。在本发明实施例中,环状缓冲区应该足够大,例如,能容纳500万条日志(即假设每条日志200字节,共需要1G内存空间),以免缓冲区容易溢出,造成日志丢失。
S102,从缓冲区读取日志。
从缓冲区读取日志时,是从环状缓冲区的头部开始读取,分为两种情况,即:若H+N<K,则将环状缓冲区的第H字节至第H+N-1字节的日志内容导出;若H+N≥K,则读取环状缓冲区的第H字节至第K-1字节以及第0字节至第N-1-K+H字节的日志内容,此处,H为所述环状缓冲区当前头部对应的字节所在的序号,N为单条数据所占字节数,K为所述环状缓冲区的大小,其量纲为字节(byte)。
S103,按照顺序写磁盘的操作方式将读取的日志保存至数据库。
在本发明实施例中,按照顺序写磁盘的操作方式将读取的日志保存至数据库时,是调用腾讯(Tencent)公司自行研发的mysql入库引擎直接向磁盘(这里可以是硬盘)写数据,具体地,按照顺序写磁盘的操作方式将读取的日志保存至数据库包括如下S1031和S1032:
S1031,以MyIsam格式将读取的日志写入数据库所在的磁盘形成MyIsam格式的数据库表。
MyIsam格式的数据库表(以下将“MyIsam格式的数据库表”简称为“MyIsam表”)包括MYD文件、MYI文件和frm文件等三个文件,其中,frm文件存放MyIsam表的结构,MYI文件存放MyIsam表的索引以及记录条数等相关信息,MYD文件存放MyIsam表的数据。这些文件在没有索引并且只增加新数据的操作的情况下,增加一条新记录会改变两个文件:MYD文件会顺序增长,MYI文件中的记录条数会变化。基于上述MYD文件和MYI文件的特性、mysql数据库的开源特点、MYD文件、MYI文件以及frm文件的组成格式,本发明实施例可以MyIsam格式将从环状缓冲区读取的日志写入数据库所在的磁盘形成MyIsam格式的数据库表。直接写磁盘文件生成MyIsam表的方式绕开mysql的入库接口,绕开了mysql本身的词法语法语义分析,可以得到很大的性能优化。
S1032,在写入新的日志数据时从MYD文件的尾部追加数据。
上述MYD文件存放的是MyIsam表数据,即需要保存到数据库的日志数据。MYD文件按照如下方式存储数据,即,每一条日志都会保存为一段有一定格式的数据,每一段数据顺序保存下去(类似于排队),如此可以组成一个MYD文件。向MYD文件中插入新的数据,可以有两种方式,一种是插在中间,类似于插队,一种是追加在末尾,类似于排在队尾,其中,将数据插在MYD文件中间就是随机读写磁盘,将数据追加在MYD文件末尾就是顺序读写磁盘。由于保存日志时所有的操作都是插入操作,因此,本发明实施例中,在写入新的日志数据时从MYD文件的尾部追加数据,即,MYD文件的增长是往后追加数据。具体地,腾讯(Tencent)公司自行研发的mysql入库引擎在向磁盘写数据时可使用fwrite函数(fwrite函数是Linux系统标准I/O函数),其自带了写缓冲区的操作,每次执行写入操作时都会写多条数据到磁盘,避免了向磁盘的频繁写入操作。由于MYD文件的增长是往后追加数据,mysql入库引擎写数据则是顺序写磁盘,避免了随机写磁盘的性能瓶颈,从而获得很高的性能。入库引擎的缓冲写入和顺序写磁盘操作,保证了写磁盘的最大速度,远远大于网络I/O速度,避免了由于磁盘I/O速度导致的日志丢失问题。
从上述本发明实施例提供的海量日志写入数据库的方法可知,一方面,由于日志在写入数据前可在缓冲区进行缓存,由此可以减轻在网络I/O速度较大时日志入库的写磁盘压力,另一方面,在从缓冲区读取日志后,是按照顺序写磁盘的操作方式将所述读取的日志保存至数据库,由于顺序写磁盘的速度远远大于随机写磁盘的速度,因此,本发明实施例提供的日志入库时写磁盘的方式大大提高了日志写入数据库的速度,减小了由于网络I/O速度较大时导致的日志入库的丢失率。
下面对用于执行上述海量日志写入数据库的方法的本发明实施例的海量日志写入数据库的装置进行说明,其基本逻辑结构参考图2。为了便于说明, 仅仅示出了与本发明实施例相关的部分。附图2示例的海量日志写入数据库的装置可以是日志服务器或者其中的功能单元或模块。附图2示例的海量日志写入数据库的装置主要包括缓存模块201、读取模块202和读取模块203,各模块详细说明如下:
缓存模块201,用于将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;
读取模块202,用于从所述缓冲区读取所述日志;
写入模块203,用于按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。
需要说明的是,以上附图2示例的海量日志写入数据库的装置的实施方式中,各功能模块的划分仅是举例说明,实际应用中可以根据需要,例如相应硬件的配置要求或者软件的实现的便利考虑,而将上述功能分配由不同的功能模块完成,即将所述海量日志写入数据库的装置的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。而且,实际应用中,本实施例中的相应的功能模块可以是由相应的硬件实现,也可以由相应的硬件执行相应的软件完成,例如,前述的缓存模块,可以是具有执行前述将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存的硬件,例如缓存器,也可以是能够执行相应计算机程序从而完成前述功能的一般处理器或者其他硬件设备;再如前述的写入模块,可以是按照顺序写磁盘的操作方式将所述读取的日志保存至数据库功能的硬件,例如验证器,也可以是能够执行相应计算机程序从而完成前述功能的一般处理器或者其他硬件设备(本说明书提供的各个实施例都可应用上述描述原则)。
附图2示例的海量日志写入数据库的装置中,缓冲区可以为环状缓冲区。
附图2示例的缓存模块201可以包括尾部写入单元301,如附图3所示本发明 另一实施例提供的海量日志写入数据库的装置。尾部写入单元301用于将日志产生装置生成并通过接口服务器发送的日志从环状缓冲区的尾部写入环状缓冲区。
附图2示例的读取模块202可以包括第一读取单元401和第二读取单元402,如附图4所示本发明另一实施例提供的海量日志写入数据库的装置,其中:
第一读取单元401,用于若H+N<K,则将环状缓冲区的第H字节至第H+N-1字节的日志内容导出;
第二读取单元402,用于若H+N≥K,则读取环状缓冲区的第H字节至第K-1字节以及第0字节至第N-1-K+H字节的日志内容。
本实施例中,H为所述环状缓冲区当前头部对应的字节所在的序号,N为单条数据所占字节数,K为所述环状缓冲区的大小,量纲为字节。
附图2至4任一示例的写入模块203可以包括生成单元501和尾部追加单元502,如附图5-a至附图5-c所示本发明另一实施例提供的海量日志写入数据库的装置,其中:
生成单元501,用于以MyIsam格式将读取的日志写入数据库所在的磁盘形成MyIsam格式的数据库表,其中,MyIsam格式的数据库表包括MYD文件;
尾部追加单元502,用于在写入新的日志数据时从MYD文件的末尾追加数据。
请参阅附图6,是本发明实施例提供的日志容灾系统基本逻辑结构。为了便于说明,仅仅示出了与本发明实施例相关的部分。附图6示例的日志容灾系统主要包括接口服务器601、主日志服务器602和备日志服务器603,其中,主日志服务器602和备日志服务器603可以是附图1示例的海量日志写入数据库的方法的执行主体或者附图2至附图5-c任一示例的海量日志写入数据库的装置,具体说明如下:
接口服务器601,用于将日志产生装置生成的日志按照同一日志内容制作成正本和副本的方式分别发送至主日志服务器602和备日志服务器603;
主日志服务器602或备日志服务器603用于执行如下方法步骤:将日志产生装置生成并通过接口服务器601发送的日志写入缓冲区进行缓存;从所述缓冲区读取所述日志;按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。
通过主日志服务器602和备日志服务器603执行同样的操作即海量日志写入数据库的方法,可以防止其中一台日志服务器出现故障时导致系统的崩溃,实现了容灾功能,从而保证系统的鲁棒性(robustness)。
请参阅附图7,是本发明实施例提供的实现海量日志写入数据库的系统架构图。该系统架构图包括日志产生装置701、提供接口层的接口服务器702、主日志服务器703、备日志服务器704、主数据库系统705和备数据库系统706。
日志产生装置701生成日志后,使用内网路由服务获取接口服务器702接口层的IP地址,将日志发送至接口服务器702。接口服务器702将日志产生装置701发送过来的日志按照同一日志内容制作成正本和副本的方式分别发送至主日志服务器703和备日志服务器704。主日志服务器703收到日志的正本后,将日志的正本写入其缓冲区进行缓存,从所述缓冲区读取所述日志的正本,并按照顺序写磁盘的操作方式将所述读取的日志的正本保存至主数据库系统705。备日志服务器704收到日志的副本后,将日志的副本写入其缓冲区进行缓存,从所述缓冲区读取所述日志的副本,并按照顺序写磁盘的操作方式将所述读取的日志的副本保存至备数据库系统706。
本发明实施例还给出一种日志服务器,该日志服务器可以用于实施上述实施例中提供的海量日志写入数据库的方法。具体来讲:日志服务器可以包括有一个或一个以上计算机可读存储介质的存储器、一个或者一个以上处理核心的 处理器等部件。本领域技术人员可以理解,上述存储器结构并不构成对日志服务器的限定,可以包括更多或更少的部件,或者组合某些部件,或者不同的部件布置。其中:
存储器可用于存储软件程序以及模块,处理器通过运行存储在存储器的软件程序以及模块,从而执行各种功能应用以及数据处理。存储器可主要包括存储程序区和存储数据区,其中,存储程序区可存储操作系统、至少一个功能所需的应用程序(比如声音播放功能、图像播放功能等)等;存储数据区可存储根据日志服务器的使用所创建的数据等。此外,存储器可以包括高速随机存取存储器,还可以包括非易失性存储器,例如至少一个磁盘存储器件、闪存器件、或其他易失性固态存储器件。相应地,存储器还可以包括存储器控制器,以提供处理器对存储器的访问。
尽管未示出,日志服务器还还包括有存储器,以及一个或者一个以上的程序,其中一个或者一个以上程序存储于存储器中,且经配置以由一个或者一个以上处理器执行述一个或者一个以上程序包含用于进行以下操作的指令:
将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;
从所述缓冲区读取所述日志;
按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述日志服务器的存储器中,还包含用于执行以下操作的指令:
将所述日志产生装置生成并通过接口服务器发送的日志从所述环状缓冲区的尾部写入所述环状缓冲区。
假设上述为第二种可能的实施方式,则在第二种可能的实施方式作为基础而提供的第三种可能的实施方式中,所述日志服务器的存储器中,还包含以下指令:
若H+N<K,则将所述环状缓冲区的第H字节至第H+N-1字节的日志内容导出;
若H+N≥K,则读取所述环状缓冲区的第H字节至第K-1字节以及第0字节至第N-1-K+H字节的日志内容;
所述H为所述环状缓冲区当前头部对应的字节所在的序号,所述N为单条数据所占字节数,所述K为所述环状缓冲区的大小,量纲为字节。
假设上述为第三种可能的实施方式,则在第一种至第三种种任意一种可能的实施方式作为基础而提供的第四种可能的实施方式中,所述日志服务器的存储器中,还包含以下指令:
以MyIsam格式将所述读取的日志写入数据库所在的磁盘形成MyIsam格式的数据库表,所述MyIsam格式的数据库表包括MYD文件;
在写入新的日志数据时从所述MYD文件的末尾追加数据。
作为另一方面,本发明再一实施例还提供了一种计算机可读存储介质,该计算机可读存储介质可以是上述实施例中的存储器中所包含的计算机可读存储介质;也可以是单独存在,未装配入日志服务器中的计算机可读存储介质。所述计算机可读存储介质存储有一个或者一个以上程序,所述一个或者一个以上程序被一个或者一个以上的处理器用来执行一个海量日志写入数据库的方法,所述方法包括:
将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;
从所述缓冲区读取所述日志;
按照顺序写磁盘的操作方式将所述读取的日志保存至数据库。
假设上述为第一种可能的实施方式,则在第一种可能的实施方式作为基础而提供的第二种可能的实施方式中,所述缓冲区为环状缓冲区。
假设上述为第二种可能的实施方式,则在第二种可能的实施方式作为基础而提供的第三种可能的实施方式中,所述将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存包括:将所述日志产生装置生成并通过接口服务器发送的日志从所述环状缓冲区的尾部写入所述环状缓冲区。
假设上述为第三种可能的实施方式,则在第三种可能的实施方式作为基础而提供的第四种可能的实施方式中,所述从所述缓冲区读取所述日志包括:
若H+N<K,则将所述环状缓冲区的第H字节至第H+N-1字节的日志内容导出;
若H+N≥K,则读取所述环状缓冲区的第H字节至第K-1字节以及第0字节至第N-1-K+H字节的日志内容;
所述H为所述环状缓冲区当前头部对应的字节所在的序号,所述N为单条数据所占字节数,所述K为所述环状缓冲区的大小,量纲为字节。
假设上述为第四种可能的实施方式,则在第一种至第四种种任意一种可能的实施方式作为基础而提供的第五种可能的实施方式中,所述按照顺序写磁盘的操作方式将所述读取的日志保存至数据库,包括:
以MyIsam格式将所述读取的日志写入数据库所在的磁盘形成MyIsam格式的数据库表,所述MyIsam格式的数据库表包括MYD文件;
在写入新的日志数据时从所述MYD文件的末尾追加数据。
需要说明的是,上述装置各模块/单元之间的信息交互、执行过程等内容,由于与本发明方法实施例基于同一构思,其带来的技术效果与本发明方法实施 例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
本领域普通技术人员可以理解上述实施例的各种方法中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器(ROM,Read Only Memory)、随机存取存储器(RAM,RandomAccess Memory)、磁盘或光盘等。
以上对本发明实施例所提供的海量日志写入数据库的方法、装置和日志容灾系统进行了详细介绍,本文中应用了具体个例对本发明的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本发明的方法及其核心思想;同时,对于本领域的一般技术人员,依据本发明的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本发明的限制。
Claims (7)
1.一种海量日志写入数据库的方法,其特征在于,所述方法包括:
将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;
从所述缓冲区读取所述日志;
按照顺序写磁盘的操作方式将所述读取的日志保存至数据库;
其中,所述缓冲区为环状缓冲区;
所述从所述缓冲区读取所述日志包括:
若H+N<K,则将所述环状缓冲区的第H字节至第H+N-1字节的日志内容导出,所述H为所述环状缓冲区当前头部对应的字节所在的序号,所述N为单条数据所占字节数,所述K为所述环状缓冲区的大小,量纲为字节;
若H+N≥K,则读取所述环状缓冲区的第H字节至第K-1字节以及第0字节至第N-1-K+H字节的日志内容。
2.根据权利要求1所述的方法,其特征在于,所述将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存,包括:
将所述日志产生装置生成并通过接口服务器发送的日志从所述环状缓冲区的尾部写入所述环状缓冲区。
3.根据权利要求1或2所述的方法,其特征在于,所述按照顺序写磁盘的操作方式将所述读取的日志保存至数据库,包括:
以MyIsam格式将所述读取的日志写入数据库所在的磁盘形成MyIsam格式的数据库表,所述MyIsam格式的数据库表包括MYD文件;
在写入新的日志数据时从所述MYD文件的末尾追加数据。
4.一种海量日志写入数据库的装置,其特征在于,所述装置包括:
缓存模块,用于将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;
读取模块,用于从所述缓冲区读取所述日志;
写入模块,用于按照顺序写磁盘的操作方式将所述读取的日志保存至数据库;
其中,所述缓冲区为环状缓冲区;
所述读取模块包括:
第一读取单元,用于若H+N<K,则将所述环状缓冲区的第H字节至第H+N-1字节的日志内容导出,所述H为所述环状缓冲区当前头部对应的字节所在的序号,所述N为单条数据所占字节数,所述K为所述环状缓冲区的大小,量纲为字节;
第二读取单元,用于若H+N≥K,则读取所述环状缓冲区的第H字节至第K-1字节以及第0字节至第N-1-K+H字节的日志内容。
5.根据权利要求4所述的装置,其特征在于,所述缓存模块包括:
尾部写入单元,用于将所述日志产生装置生成并通过接口服务器发送的日志从所述环状缓冲区的尾部写入所述环状缓冲区。
6.根据权利要求4或5所述的装置,其特征在于,所述写入模块包括:
生成单元,用于以MyIsam格式将所述读取的日志写入数据库所在的磁盘形成MyIsam格式的数据库表,所述MyIsam格式的数据库表包括MYD文件;
尾部追加单元,用于在写入新的日志数据时从所述MYD文件的末尾追加数据。
7.一种日志容灾系统,其特征在于,所述系统包括接口服务器、主日志服务器和备日志服务器;
所述接口服务器,用于将日志产生装置生成的日志按照同一日志内容制作成正本和副本的方式分别发送至所述主日志服务器和备日志服务器;
所述主日志服务器或备日志服务器用于执行如下方法步骤:将日志产生装置生成并通过接口服务器发送的日志写入缓冲区进行缓存;从所述缓冲区读取所述日志;按照顺序写磁盘的操作方式将所述读取的日志保存至数据库;
其中,所述缓冲区为环状缓冲区;
所述主日志服务器或备日志服务器还用于执行如下方法步骤:若H+N<K,则将所述环状缓冲区的第H字节至第H+N-1字节的日志内容导出,所述H为所述环状缓冲区当前头部对应的字节所在的序号,所述N为单条数据所占字节数,所述K为所述环状缓冲区的大小,量纲为字节;
若H+N≥K,则读取所述环状缓冲区的第H字节至第K-1字节以及第0字节至第N-1-K+H字节的日志内容。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310580987.4A CN104657366B (zh) | 2013-11-18 | 2013-11-18 | 海量日志写入数据库的方法、装置和日志容灾系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310580987.4A CN104657366B (zh) | 2013-11-18 | 2013-11-18 | 海量日志写入数据库的方法、装置和日志容灾系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104657366A CN104657366A (zh) | 2015-05-27 |
CN104657366B true CN104657366B (zh) | 2019-05-24 |
Family
ID=53248513
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310580987.4A Active CN104657366B (zh) | 2013-11-18 | 2013-11-18 | 海量日志写入数据库的方法、装置和日志容灾系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN104657366B (zh) |
Families Citing this family (11)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105224444B (zh) * | 2015-10-14 | 2019-02-01 | 深圳市金证科技股份有限公司 | 日志生成方法及装置 |
CN105429783A (zh) * | 2015-10-30 | 2016-03-23 | 上海帝联信息科技股份有限公司 | 边缘节点服务器、日志文件处理方法及系统 |
CN106202307B (zh) * | 2016-07-01 | 2019-10-11 | 百势软件(北京)有限公司 | 一种批量日志保存方法及装置 |
CN106776803A (zh) * | 2016-11-24 | 2017-05-31 | 北京锐安科技有限公司 | 一种日志记录的更新方法及装置 |
CN107844405B (zh) * | 2017-10-12 | 2021-11-19 | 华为技术有限公司 | 日志处理方法及装置、服务器 |
CN108829342B (zh) * | 2018-05-09 | 2021-06-25 | 青岛海信宽带多媒体技术有限公司 | 一种日志存储方法、系统及存储装置 |
CN108829730A (zh) * | 2018-05-11 | 2018-11-16 | 中国平安人寿保险股份有限公司 | 一种对日志数据进行存储的方法、装置及其可读存储介质 |
CN109347899B (zh) * | 2018-08-22 | 2022-03-25 | 北京百度网讯科技有限公司 | 在分布式存储系统中写入日志数据的方法 |
CN110716695A (zh) * | 2019-09-12 | 2020-01-21 | 北京浪潮数据技术有限公司 | 一种节点日志的存储方法、系统、电子设备及存储介质 |
CN110795413A (zh) * | 2019-10-30 | 2020-02-14 | 珠海港联科技有限公司 | 一种带有日志记录功能的数据库操作接口服务系统 |
CN112612677A (zh) * | 2020-12-28 | 2021-04-06 | 北京天融信网络安全技术有限公司 | 日志存储方法、装置、电子设备及可读存储介质 |
Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1932812A (zh) * | 2005-09-16 | 2007-03-21 | 腾讯科技(深圳)有限公司 | 一种日志保存方法及装置 |
CN101534213A (zh) * | 2009-04-09 | 2009-09-16 | 成都市华为赛门铁克科技有限公司 | 一种日志的获取方法及日志服务器 |
CN101876996A (zh) * | 2009-12-01 | 2010-11-03 | 广州从兴电子开发有限公司 | 一种内存数据库到文件数据库的数据同步方法及系统 |
CN102043686A (zh) * | 2009-10-20 | 2011-05-04 | 华为技术有限公司 | 一种内存数据库的容灾方法、备用服务器及系统 |
CN102053923A (zh) * | 2009-11-05 | 2011-05-11 | 北京金山软件有限公司 | 一种日志数据的存储方法及存储装置 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102542054B (zh) * | 2011-12-29 | 2017-02-08 | 厦门雅迅网络股份有限公司 | 一种利用缓存表来提高数据库数据插入性能的方法 |
-
2013
- 2013-11-18 CN CN201310580987.4A patent/CN104657366B/zh active Active
Patent Citations (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1932812A (zh) * | 2005-09-16 | 2007-03-21 | 腾讯科技(深圳)有限公司 | 一种日志保存方法及装置 |
CN101534213A (zh) * | 2009-04-09 | 2009-09-16 | 成都市华为赛门铁克科技有限公司 | 一种日志的获取方法及日志服务器 |
CN102043686A (zh) * | 2009-10-20 | 2011-05-04 | 华为技术有限公司 | 一种内存数据库的容灾方法、备用服务器及系统 |
CN102053923A (zh) * | 2009-11-05 | 2011-05-11 | 北京金山软件有限公司 | 一种日志数据的存储方法及存储装置 |
CN101876996A (zh) * | 2009-12-01 | 2010-11-03 | 广州从兴电子开发有限公司 | 一种内存数据库到文件数据库的数据同步方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN104657366A (zh) | 2015-05-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104657366B (zh) | 海量日志写入数据库的方法、装置和日志容灾系统 | |
EP3057272B1 (en) | Technologies for concurrency of cuckoo hashing flow lookup | |
CN102467408B (zh) | 一种虚拟机数据的访问方法和设备 | |
CN107168657B (zh) | 一种基于分布式块存储的虚拟磁盘分层缓存设计方法 | |
US10678437B2 (en) | Method and device for managing input/output (I/O) of storage device | |
KR101719500B1 (ko) | 캐싱된 플로우들에 기초한 가속 | |
TW201520889A (zh) | 混合儲存的控制方法及混合儲存系統 | |
US9703821B2 (en) | Database auditing for bulk operations | |
CN106446159B (zh) | 一种存储文件的方法、第一虚拟机及名称节点 | |
CN107608627B (zh) | 一种远端数据分级存储方法、电子设备及存储介质 | |
US11210228B2 (en) | Method, device and computer program product for cache management | |
US11947842B2 (en) | Method for writing data in append mode, device and storage medium | |
CN106951488A (zh) | 一种日志记录方法和装置 | |
CN109471843A (zh) | 一种元数据缓存方法、系统及相关装置 | |
CN111367991B (zh) | 一种基于消息队列的MongoDB数据实时同步方法及系统 | |
CN103744975A (zh) | 基于分布式文件的高效缓存服务器 | |
CN105740413A (zh) | Linux平台上使用FUSE的文件移动方法 | |
CN109347899B (zh) | 在分布式存储系统中写入日志数据的方法 | |
CN110232029A (zh) | 一种基于索引的fpga中ddr4包缓存的实现方法 | |
US20130304754A1 (en) | Self-Parsing XML Documents to Improve XML Processing | |
CN109299059A (zh) | 文件存储、检索方法、装置、存储介质及服务器 | |
CN104850548B (zh) | 一种实现大数据平台输入/输出处理的方法及系统 | |
CN109791469A (zh) | 设置高速缓冲存储器的时钟速度/电压的装置及方法 | |
US9311225B2 (en) | DMA channels | |
US10909044B2 (en) | Access control device, access control method, and recording medium containing access control program |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |