一种消息持久化方法、服务器和计算机可读存储介质与流程

文档序号:13735863阅读:178来源:国知局
一种消息持久化方法、服务器和计算机可读存储介质与流程

本发明涉及网络通信技术领域,更具体地,涉及一种消息持久化方法、服务器和计算机可读存储介质。



背景技术:

随着信息技术的发展,以及分布式系统的广泛应用,在分布式软件系统中,消息中间件在许多行业的关键应用中扮演着至关重要的角色。

消息中间件适用于需要可靠的数据传送的分布式环境。采用消息中间件机制的系统中,不同的对象之间通过传递消息来激活对方的事件,完成相应的操作。消息发布端将消息发送给消息服务器,消息服务器将消息存放在若干队列中,在合适的时候再将消息转发给消息消费端。

消息中间件系统中,需要将消息发布端的消息持久化保存在硬盘等存储中,一般持久化保存到文件或数据库中,以备其他消息消费端可以可靠的接收消息。为了更高效地进行消息交互,目前对消息中间件系统的发送接收的单位时间吞吐率要求很高,对消息持久化存储消息的速率要求很高,对消息恢复时读取消息的速率要求也很高,即需要很高的读写文件或数据库的速率。

在现有的技术中,activemq是采用树的索引方式,在恢复指定消息序列号区间的消息时,需要遍历索引文件树的各个节点,再通过消息索引去查找数据文件,索引文件树的遍历效率较低,访问速率会比较慢。

kafka是一种高吞吐量的分布式发布订阅消息系统,在kafka系统的持久化消息方法中索引文件设置了消息偏移地址,可以通过消息偏移地址比较快的找到消息所在的段文件。段文件中很多个日志记录,通过每个日志记录的消息长度字段去一次次跳转找到需要恢复的消息位置。如果段文件中有n条消息,按照二分法去查找待恢复的消息,需要log2n次,也不能满足目前快速高效的要求。



技术实现要素:

有鉴于此,本发明提供了一种消息持久化方法、服务器和计算机可读存储介质,以实现快速读取指定时间的消息。

第一方面,提供一种消息持久化方法,包括:

接收需要持久化的消息后,获取所述消息所属的消息主题;

将所述消息存储在所述消息主题对应的数据文件中;

定时更新消息索引文件,建立所述消息对应的消息索引记录,所述消息索引文件包括索引头和消息索引记录;以及

在时间索引文件中,每隔单位时间生成一条时间索引记录;

其中,所述消息索引文件和所述时间索引文件是在预先设定的时间点创建的;所述索引头包括参考时间戳,所述参考时间戳对应的参考时间作为存储消息时间点的参考;所述消息索引记录包括对应的数据文件标识、所述消息在所述数据文件中的偏移地址和相对时间戳,所述相对时间戳是存储消息时间点相对所述参考时间而得到的;所述时间索引记录用于存储在当前单位时间内存储的第一条消息对应的消息索引记录在所述消息索引文件中的偏移地址。

进一步地,所述方法还包括:

在接收到读取指定时间段内消息的指令时根据所述时间索引文件和所述消息索引文件索引并读取对应数据文件中对应的消息。

进一步地,根据所述时间索引文件和所述消息索引文件索引并读取对应数据文件中对应的消息包括:

根据所述参考时间戳获取所述指定时间段的相对起始单位时间和相对结束单位时间;

根据所述相对起始单位时间和所述时间索引文件索引获取第一消息索引记录的偏移地址;

根据所述相对结束单位时间和所述时间索引文件索引获取第二消息索引记录的偏移地址;

在所述消息索引文件中获取所述第一消息索引记录的偏移地址和第二消息索引记录的偏移地址之间的所有消息索引记录;

根据所获取的消息索引记录读取对应的数据文件获得指定时间段的所有消息;

其中,根据所述第一消息索引记录的偏移地址依次加上一条消息索引记录的字节长度值直到得到所述第二消息索引记录的偏移地址可依次获取指定时间段内所有的消息索引记录的偏移地址。

进一步地,根据所述相对起始单位时间和所述时间索引文件索引获取第一消息索引记录的偏移地址包括:

计算第一时间索引记录在所述时间索引文件中的偏移地址;

根据所获得的所述第一时间索引记录的偏移地址查询所述第一时间索引记录获取所述第一消息索引记录的偏移地址;

其中,所述第一时间索引记录为相对起始单位时间对应的时间索引记录;所述第一时间索引记录的偏移地址是所述相对起始单位时间的数值乘以时间索引记录的长度值。

进一步地,根据所述相对结束单位时间和所述时间索引文件索引获取第二消息索引记录的偏移地址包括:

计算所述第二时间索引记录在所述时间索引文件中的偏移地址;

根据所获得的所述第二时间索引记录的偏移地址查询所述第二时间索引记录获取中间偏移地址;

将所述中间偏移地址减去消息索引记录的字节长度值从而获得所述第二消息索引记录的偏移地址;

其中,所述第二时间索引记录为相对结束时间的下一单位时间对应的时间索引记录;所述第二时间索引记录的偏移地址是所述相对结束单位时间的数值加上1后再乘以时间索引记录的长度值。

进一步地,每个消息主题对应一个所述时间索引文件、一个所述消息索引文件和至少一个所述数据文件。

进一步地,所述方法还包括:

创建第一个数据文件,所述第一个数据文件在预先设定的时间点创建和/或在存储此消息主题的第一条消息时创建;

在所述数据文件大小达到预定的阈值时,创建新的数据文件。

进一步地,消息在数据文件中存储方式为存储消息的前缀信息、消息的内容和消息的后缀信息;

其中,所述消息的前缀信息和/或后缀信息用于隔离相邻消息。

第二方面,提供一种服务器,包括:

至少一个处理器;

存储器,用于存储所述处理器可执行的指令;

所述处理器被配置为执行上述任一项所述的方法。

第三方面,一种计算机可读存储介质,其上存储计算机程序指令,所述计算机程序指令在被处理器执行时实现上述任一项所述的方法。

在本实施例的消息持久化存储方法中,创建数据文件用于存储需要持久化的消息,创建消息索引文件和时间索引文件用于索引读取数据文件中的消息。通过创建消息索引文件以使得只需要读取数据文件一次便可以得到所需消息。通过创建时间索引文件可读取指定时间的消息。因此,所述方法可以方便快速的从数据文件中读取指定时间的消息。

附图说明

通过以下参照附图对本实施例的描述,本发明的上述以及其它目的、特征和优点将更为清楚,在附图中:

图1是本实施例的消息持久化存储方法中文件的结构示意图;

图2是本实施例的消息持久化方法的流程图;

图3是本实施例的消息持久化方法中进行消息持久化的流程图;

图4是本实施例的消息持久化方法中进行消息读取流程图;

图5是本实施例的服务器的示意图。

具体实施方式

以下基于实施例对本发明进行描述,但是本发明并不仅仅限于这些实施例。在下文对本发明的细节描述中,详尽描述了一些特定的细节部分。对本领域技术人员来说没有这些细节部分的描述也可以完全理解本发明。为了避免混淆本发明的实质,公知的方法、过程、流程、元件和电路并没有详细叙述。

此外,本领域普通技术人员应当理解,在此提供的附图都是为了说明的目的,并且附图不一定是按比例绘制的。

除非上下文明确要求,否则整个说明书和权利要求书中的“包括”、“包含”等类似词语应当解释为包含的含义而不是排他或穷举的含义;也就是说,是“包括但不限于”的含义。

在本发明的描述中,需要理解的是,术语“第一”、“第二”等仅用于描述目的,而不能理解为指示或暗示相对重要性。此外,在本发明的描述中,除非另有说明,“多个”的含义是两个或两个以上。

图1是本实施例的消息持久化方法中文件的结构示意图。如图1所示,在本实施例中,消息持久化存储过程中涉及的文件包括时间索引文件1、消息索引文件2和至少一个数据文件3。时间索引文件1每隔单位时间生成一条时间索引记录,所述时间索引记录用于存储在当前单位时间内存储的第一条消息所对应的消息索引记录在消息索引文件2中的偏移地址。消息索引文件2定时更新以实时生成存储的消息所对应的消息索引记录。消息索引文件2包括索引头21和消息索引记录22。索引头21包括版本信息(version)、参考时间戳等,消息索引记录22包括数据文件标识、对应的消息在数据文件3中的偏移地址和相对时间戳等。数据文件3用于存储需要持久化的消息。在本实施例中,消息的存储方式为将消息的前缀信息(prefix)、消息的内容(data)和消息的后缀信息(suffix)依次存储。消息的前缀信息(prefix)和/或消息的后缀信息(suffix)用于存储消息的长度和/或隔离不同的消息。

应理解,每个消息主题对应一个时间索引文件1、消息索引文件2和至少一个数据文件3。

在本实施例中,单位时间设定为秒,参考时间戳对应的参考时间为过去的某一时刻到创建消息索引文件2时的秒数。相对时间戳对应的相对时间为从创建消息索引文件2到存储消息时刻的时间差,单位为纳秒。例如,在图1中,参考时间为1471564800s,是从1970年1月1日零点整到2016年08月19号零点整的秒数,2016年08月19号零点整是创建消息索引文件2和时间索引文件1的时间。相对时间表示接收存储消息的相对精确时间。系统在1秒内可能存储多条消息,例如在参考时间+21600s这1秒内存储两条了两条消息(message1和message2)。

应理解,在实际应用时,可以根据不同的需求来设定单位时间的单位、参考时间的单位和相对时间的单位。例如单位时间和参考时间的单位可以设定为更大的单位如分钟、小时和天等,也可以设定为更小的单位。相对时间也可以设定为更精确的时间单位或者更大的时间单位。

在本实施例中,时间索引文件1中的时间索引记录的长度为8个字节。消息索引文件2中的索引头21和消息索引记录22均为20个字节。其中,索引头21的前4个字节为版本信息(version),后续4个字节为参考时间戳,最后12个字节为保留位(reserved)。消息索引记录22的前4个字节为数据文件标识,通过数据文件标识查找消息所在数据文件,例如消息索引文件中消息索引记录message1的前4个字节存储为0,表示该消息索引记录对应的消息在数据文件#0中。后续8个字节为对应的消息在数据文件中的偏移地址,最后8个字节为相对时间戳。在数据文件3中消息的前缀信息(prefix)和后缀信息(suffix)均为4个字节。

应理解,在实际应用时,所述时间索引记录的字节长度、索引头21的字节长度、消息索引记录的字节长度及所述消息的前缀信息和后缀信息的字节长度等均可根据实际的需求进行相应修改,如消息的前缀信息和后缀信息的字节长度可以为0也可以是其他整数(字节为0时表示不需要添加此项信息)。对于索引头21中的版本信息、参考时间戳等信息的位置及其字节长度都可根据实际需求进行更改。索引头21中的保留位可以根据实际需求添加相应的信息。相似地,消息索引记录中的数据文件标识、对应消息的偏移地址和相对时间戳的字节长度和相对位置也可以作相应的变更。数据文件3中消息的前缀信息和后缀信息的作用及其字节长度值也可以作相应调整。例如消息的前缀信息存储消息的长度值,消息的后缀信息为保留位,或者消息的后缀信息存储消息的长度值,消息的前缀信息为保留位等。

在本实施例中,在预先设定的时刻创建时间索引文件1和消息索引文件2。一个消息主题的第一个数据文件3可以在预先设定的时间创建,也可以在接收到第一条需要持久化的此消息主题的消息后创建。优选地,在数据文件3的文件大小达到设定的阈值时,自动创建新的数据文件3。

在接收到需要持久化的消息后,判断所述消息所属的消息主题。然后将所述消息存储到对应的数据文件3中。定时更新消息索引文件2以便实时地生成消息对应的消息索引记录。

时间索引文件每1秒生成一个长度为8个字节的时间索引记录,所述时间索引记录表示当前1秒内存储的第一条消息对应的消息索引记录在消息索引文件2中的偏移地址,若在当前一秒内没有消息的存储,即顺延到下一秒内的第一条消息对应的消息索引记录的偏移地址。

在本实施例中的消息持久化方法中,通过创建时间索引文件1、消息索引文件2和数据文件3使得系统能够快速地读取指定时间的消息。例如,从数据文件3中读取指定时间段t1-t2的消息(时间以秒为单位)。根据消息索引文件2中的参考时间戳、指定时间段的起始时刻t1和结束时刻t2得到相对起始秒数n1(相对起始秒数n1为从参考时间到t1之间的秒数)和相对结束秒数n2(相对结束秒数n2为从参考时间到t2之间的秒数)。由于时间索引文件1从创建时开始每秒生成一个长度为8个字节的时间索引记录,所以时刻t1对应的第一时间索引记录的偏移地址为n1*8。根据第一时间索引记录索引获得第一消息索引记录在消息索引文件2中的偏移地址st_index1,第一消息索引记录为指定时间段t1-t2中第一条消息的消息索引记录。根据偏移地址st_index1在消息索引文件2中索引第一消息索引记录获取指定时间段t1-t2中第一条消息在对应的数据文件3中的偏移地址s_data1。根据偏移地址s_data1在对应的数据文件3中索引读取第一条消息的内容。

应理解,偏移地址st_index1表示第一消息索引记录在消息索引文件2中的起始位置,偏移地址s_data1表示第一条消息在数据文件中消息的后缀信息的位置。但是,这并不是唯一的处理方案,时间索引记录中所存储的偏移地址可以为能够代表其所对应的消息索引记录在消息索引文件中的任意位置(如起始、末尾和中间的任意位置)。相似地,消息索引记录中所存储的偏移地址可以为消息的前缀消息的偏移地址和/或消息的后缀信息的位置。

同理,时刻t2+1s对应的第二时间索引记录的偏移地址为(n2+1)*8。根据第二时间索引记录索引获得第二消息索引记录在消息索引文件2中的偏移地址st_index2(偏移地址st_index2为第二时间索引记录中所存储的偏移地址值-20),第二消息索引记录为指定时间段t1-t2中最后一条消息的消息索引记录。根据偏移地址st_index2在消息索引文件2中索引第二消息索引记录获取指定时间段t1-t2中最后一条消息在对应的数据文件中的偏移地址s_data2。根据偏移地址s_data2在对应的数据文件3中索引读取最后一条消息的内容。

根据偏移地址st_index1+20获取指定时间段t1-t2中第二条消息的消息索引记录进而可在数据文件3中索引读取指定时间段t1-t2中的第二条消息。由此,将偏移地址st_index1依次加上20直到st_index2即可获取指定时间段t1-t2中所有的消息。

例如,读取参考时间+21600s到参考时间+21604s之间所有的消息,即上述n1的值为21600,n2的值为21604。根据参考时间+21600s对应的第一时间索引记录的偏移地址n1*8查询所述第一时间索引记录获得第一消息索引记录的偏移地址st_index1为20。根据第一消息索引记录的偏移地址st_index1查询第一消息索引记录(图1中message1)。根据第一消息索引记录中的数据文件标识0可知所查询的消息位于数据文件#0中。根据第一消息索引记录中的偏移地址在数据文件#0中读取对应的消息。此消息为参考时间+21600s到参考时间+21604s之间的第一条消息。

根据参考时间+21604s+1s对应的第二时间索引记录的偏移地址(n2+1)*8查询所述第二时间索引记录获得中间消息索引记录的偏移地址st_index为80。将st_index减去消息索引记录的字节长度值得到第二消息索引记录的偏移地址st_index2,消息索引记录的字节长度值为20,即第二消息索引记录的偏移地址st_index2为60。根据第二消息索引记录的偏移地址st_index2查询第二消息索引记录(图1中message3)。根据第二消息索引文件中的数据文件标识和偏移地址在对应的数据文件中读取对应的消息。此消息为参考时间+21600s到参考时间+21604s之间的最后一条消息。

根据第一消息索引记录的偏移地址st_index1+20得到指定时间段内的第二条消息的消息索引记录的偏移地址,根据此偏移地址查询对应的消息索引记录(图1中message2),进而查询读取对应的消息。由此可知将第一消息索引记录的偏移地址依次加上20直到st_index2可依次读取指定时间段内的所有消息。在图1中参考时间+21600s到参考时间+21604s之间共有message1、message2和message3三条消息索引记录,也即共读取三条消息。

在本实施例的另一种实施方式中,读取指定时间段t1-t2(t1和/或t2的单位比秒小,本实施方式中举例为纳秒)的消息。根据消息索引文件2中的参考时间戳(单位时间为秒)、t1和t2计算相对起始秒数n1和相对结束秒数n2。其中n1和n2为整数(即将不足一秒的小数舍去,如实际相对起始时间为21600.78s,则n1取值为21600s)。

根据相对起始秒数n1和时间索引记录的字节长度值计算得第一时间索引记录的偏移地址为n1*8。根据第一时间索引记录的偏移地址获得第一时间索引记录。根据第一时间索引记录获得对应的第一消息索引记录的偏移地址进而在消息索引文件2中索引获取第一消息索引记录。所述第一消息索引记录为相对起始单位时间内第一条消息对应的消息索引记录。查询第一消息索引记录中的相对时间戳,若实际相对起始时间大于第一消息索引记录中的相对时间戳对应的相对时间,则查询第一消息索引记录的下一条消息索引记录直到实际相对起始时间不大于所查询的消息索引记录中的相对时间。则此消息索引记录为指定时间段内的第一条消息对应的消息索引记录。根据此消息索引记录在对应的数据文件3中索引并读取对应的消息。

根据相对结束秒数n2和时间索引记录的字节长度值计算得第二时间索引记录的偏移地址为(n2+1)*8。根据第二时间索引记录的偏移地址获得第二时间索引记录。根据第二时间索引记录获得对应的第二消息索引记录的偏移地址(第二时间索引记录中存储的偏移地址减去消息索引记录的长度值)进而在消息索引文件2中索引并获取第二消息多音记录。所述第二消息索引记录为相对结束单位时间内的最后一条消息对应的消息索引记录。查询第二索引记录中的相对时间戳,若实际相对结束时间小于第二消息索引记录中的相对时间戳对应的相对时间,则查询第二消息索引记录的前一条消息索引记录直到实际相对结束时间不小于所查询的消息索引记录中的相对时间。则该消息索引记录为指定时间段内的最后一条消息对应的消息索引记录。根据该消息索引记录在对应的数据文件3中索引并读取对应的消息。

根据指定时间段的第一条消息对应的消息索引记录和最后一条消息对应的时间索引记录获得指定时间段所有消息对应的消息索引记录,进而根据所获得的所有消息索引记录在数据文件3中索引并读取对应的消息。

例如,读取参考时间+21600123245321到参考时间+21604012345678之间所有的消息,即上述n1的值为21600,n2的值为21604。

根据第一时间索引记录的偏移地址n1*8查询第一时间索引记录获得第一消息索引记录的偏移地址20。根据第一消息索引记录的偏移地址获得第一消息索引记录(图1中message1)。如图1所示,message1中的相对时间为21600112681324。实际相对起始时间21600123245321大于第一消息索引记录中的相对时间,查询message2中的相对时间为21600135321050大于实际相对起始时间。所以消息索引记录message2对应的消息为指定时间段中的第一条消息。根据消息索引记录message2在数据文件#0中读取对应的消息。

根据第二时间索引记录的偏移地址(n2+1)*8查询第二时间索引记录获得中间消息索引记录的偏移地址st_index为80。将st_index减去消息索引记录的字节长度值得到第二消息索引记录的偏移地址为60。根据第二消息索引记录的偏移地址获得第二消息索引记录(图1中message3)。如图1所示,message3中的相对时间为21604223482313,大于实际相对结束时间21604012345678。查询message2中的相对时间为21600135321050小于实际相对结束时间。所以消息索引记录message2对应的消息也为指定时间段中的最后一条消息。

所以,在参考时间+21600123245321到参考时间+21604012345678之间只有消息索引记录message2对应的消息。

由上所述,在本实施例中,创建数据文件用于存储需要持久化的消息,创建消息索引文件和时间索引文件用于索引读取数据文件中的消息。通过创建消息索引文件以使得只需要读取数据文件一次便可以得到所需消息。通过创建时间索引文件可读取指定时间的消息。因此,所述方法可以方便快速的从数据文件中读取指定时间的消息。

图2是本实施例的消息持久化方法的流程图。如图2所示,在步骤s110,接收到需要持久化的消息后,判断消息主题。

在步骤s120,持久化存储接收到的消息。

具体地,将接收到的消息持久化到对应的数据文件中。定时更新消息索引文件以实时地生成消息的消息索引记录。在时间索引文件中每隔单位时间生成一条时间索引记录以查询单位时间内第一条消息的消息索引记录。

在步骤s130,读取指定时间的消息。

具体地,通过指定时间的起始时刻及消息索引文件中的参考时间戳计算相对起始单位时间,根据相对起始单位时间计算第一时间索引记录在时间索引文件中的偏移地址。所述第一时间索引记录存储指定时间段内第一条消息的消息索引记录在消息索引文件中的偏移地址。根据第一时间索引记录在消息索引文件中查询第一消息索引记录。根据第一消息索引记录在数据文件中查询读取指定时间段内的第一条消息。

通过指定时间的结束时刻及消息索引文件中的参考时间戳计算相对结束单位时间,根据相对结束单位时间计算第二时间索引记录在时间索引文件中的偏移地址进而获取第二时间索引记录。根据第二时间索引记录在消息索引文件中查询第二消息索引记录。根据第二消息索引记录在数据文件中查询读取指定时间段内的最后一条消息。

根据第一消息索引记录的偏移地址、第二消息索引记录的偏移地址及消息索引记录的字节长度值可依次计算指定时间段内的全部消息的消息索引记录在消息索引文件中的偏移地址,进而获得所有的消息索引记录。根据所有的消息索引记录在数据文件中读取所对应的全部消息。

根据上述步骤可了解,在本实施例中,通过创建消息索引文件、时间索引文件和数据文件,使得方便快速的从数据文件中读取指定时间的消息。

图3是本实施例的消息持久化方法进行消息持久化的流程图。如图3所示,在步骤s210,在预先设定的时刻创建时间索引文件和消息索引文件。时间索引文件用于索引单位时间内第一条消息的消息索引记录。消息索引文件用于索引对应的消息。

在步骤s220,创建数据文件。具体地,该消息主题的第一个数据文件可以在预先设定的时间创建,也可以在接收到需要持久化的第一条该消息主题的消息时创建。

应理解,步骤210在新的消息主题出现时才会执行。步骤s220在新的消息主题出现或者数据文件的大小达到设定的阈值时才会执行。

在步骤s230,在接收到需要持久化的消息后,判断消息所属的消息主题。

在步骤s240,将消息持久化存储在对应的数据文件中。

在步骤s250,定时更新消息索引文件以使得实时地生成消息对应的消息索引记录。

在步骤s260,更新时间索引文件。具体地,在时间索引文件中,每隔单位时间生成一条时间索引记录。

在步骤s270,判断数据文件大小是否达到预定的阈值。若数据文件大小达到阈值,则执行步骤s220。若数据文件大小没有达到阈值,则执行步骤s230。

在本实施例中,在持久化存储消息到数据文件的过程中,创建时间索引文件和消息索引文件,以使得可以快速地读取指定时间的消息。

图4是本实施例的消息持久化方法进行消息读取的流程图。如图4所示,在步骤s310,接收到读取某时间段的消息的指令后,根据消息索引文件中的参考时间戳、指定时间段的起始时刻和结束时刻计算相对起始单位时间n1和相对结束单位时间n2。其中,相对起始单位时间n1为从参考时间到指定时间段的起始时刻的单位时间数。相对结束单位时间n2为从参考时间到指定时间段的结束时刻的单位时间数。

在步骤s320,获取第一时间索引记录和第二时间索引记录。

具体地,根据相对起始单位时间n1和时间索引记录的字节长度值tn得到第一时间索引记录在时间索引文件中的偏移地址n1*tn。根据相对结束单位时间n2和时间索引记录的字节长度值tn得到第一时间索引记录在时间索引文件中的偏移地址(n2+1)*tn。根据偏移地址n1*tn和偏移地址(n2+1)*tn在时间索引文件中查询获取第一时间索引记录和第二时间索引记录。

在步骤s330,根据第一时间索引记录和第二时间索引记录获取第一消息索引记录和第二消息索引记录。

具体地,第一时间索引记录中存储的偏移地址st_index1为第一消息索引记录在消息索引文件中的偏移地址,即可根据第一时间索引记录在消息索引文件中查询获取第一消息索引记录。第二时间索引记录中存储的偏移地址为st_index,消息索引记录的字节长度值为in。由于时间索引记录每隔单位时间生成一条,且存储该单位时间内第一条消息索引记录的偏移地址。所以第二消息索引记录在消息索引文件中的偏移地址为st_index2为st_index-in。根据第二消息索引记录的偏移地址st_index2在消息索引文件中查询获取第二消息索引记录。容易理解,所述第一消息索引记录为指定时间段内第一条消息所对应的消息索引记录。所述第二消息索引记录为指定时间段内最后一条消息所对应的消息索引记录。

在步骤s340,获取指定时间段内的所有消息索引记录。

具体地,由步骤s330可知,指定时间段内第一条消息对应的消息索引记录在消息索引文件中的偏移地址为st_index1,消息索引记录的字节长度值为in。则指定时间段内第二条消息对应的消息索引记录在消息索引文件中的偏移地址为st_index1+in。由此,将st_index1依次加上in直到st_index2可依次获取指定时间段内所有消息对应的消息索引记录在消息索引文件中的偏移地址。根据所得的所有偏移地址可查询获取所有的消息索引记录。

在步骤s350,根据所有的消息索引记录查询读取对应数据文件中对应的消息。通过消息索引记录中的数据文件标识可查询消息所在的数据文件,通过消息索引文件中存储的偏移地址可准确地读取对应的消息。

在本实施例中,通过时间索引文件和消息索引文件可快速查询读取指定时间段内的所有消息。

图5是本实施例的服务器的示意图。图5所示的服务器为通用数据处理装置,其包括通用的计算机硬件结构,其至少包括处理器51和存储器52。处理器51和存储器52通过总线53连接。存储器52适于存储处理器51可执行的指令或程序。处理器51可以是独立的微处理器,也可以是一个或者多个微处理器集合。由此,处理器51通过执行存储器52所存储的指令,从而执行如上所述的本实施例的方法流程实现对于数据的处理和对于其它装置的控制。总线53将上述多个组件连接在一起,同时将上述组件连接到显示控制器54和显示装置以及输入/输出(i/o)装置55。输入/输出(i/o)装置55可以是鼠标、键盘、调制解调器、网络接口、触控输入装置、体感输入装置、打印机以及本领域公知的其他装置。典型地,输入/输出装置55通过输入/输出(i/o)控制器56与系统相连。

本领域的技术人员应明白,本发明的实施例可提供为方法、装置(设备)或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可读存储介质(包括但不限于磁盘存储器、cd-rom、光学存储器等)上实施的计算机程序产品。

本发明是参照根据本实施例的方法、装置(设备)和计算机程序产品的流程图来描述的。应理解可由计算机程序指令实现流程图中的每一流程。

这些计算机程序指令可以存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现流程图一个流程或多个流程中指定的功能。

也可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程中指定的功能的装置。

以上所述仅为本发明的优选实施例,并不用于限制本发明,对于本领域技术人员而言,本发明可以有各种改动和变化。凡在本发明的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1