数据文件的存取方法及装置与流程

文档序号:11707775阅读:210来源:国知局
数据文件的存取方法及装置与流程

本发明涉及通信技术领域,具体涉及一种数据文件的存取方法及装置。



背景技术:

在并发环境中,常常会出现对数据文件同时进行读操作与写操作的情况,在此种情况下容易引发数据的丢失更新、脏读、不可重复读取等问题。为解决这一问题,技术人员常常采用加锁的方式来保证任务的顺利进行。

但是,发明人在实现本发明的过程中发现,现有技术中的上述方式至少存在下述缺陷:采用加锁的方式会大大降低并发数,影响系统的吞吐量,降低系统处理任务的效率。



技术实现要素:

鉴于上述问题,提出了本发明以便提供一种克服上述问题或者至少部分地解决上述问题的数据文件的存取方法及装置。

根据本发明的一个方面,提供了一种数据文件的存取方法,其包括:将数据文件分别存储到第一存储空间和第二存储空间中;每当接收到用于更新所述数据文件的更新指令时,将所述更新指令存储到预设的消息队列中;将所述第一存储空间作为读取存储空间,并将所述第二存储空间作为更新存储空间;每当预设的存储空间切换条件满足时,将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间;其中,读取存储空间用于处理来自用户的读取请求,更新存储空间用于根据所述消息队列中存储的更新指令进行更新。

根据本发明的另一个方面,提供了一种数据文件的存取装置,其包括:数据存储模块,适于将数据文件分别存储到第一存储空间和第二存储空间中;将所述第一存储空间作为读取存储空间,并将所述第二存储空间作为更新存储空间;指令存储模块,适于每当接收到用于更新所述数据文件的更新指令时,将所述更新指令存储到预设的消息队列中;切换模块,适于每当预设的存储空间切换条件满足时,将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间;其中,读取存储空间用于处理来自用户的读取请求,更新存储空间用于根据所述消息队列中存储的更新指令进行更新。

在本发明提供的数据文件的存取方法及装置中,首先通过将数据文件分别存储在两个存储空间中,从而将数据文件的读操作与写操作进行空间上的分化,利用读取存储空间来处理来自用户的读取请求,利用更新存储空间来根据更新指令进行数据的更新,并在满足切换条件时读取存储空间与更新存储空间可以进行切换,从而实现了在无锁的情况下对数据同时进行读写,提高系统的并发数和吞吐量的效果;同时,一般情况下,读取存储空间与更新存储空间相互切换后,需将切换前的更新存储空间中的全部数据拷贝至切换前读取存储空间中来保证数据的一致性,但拷贝的数据中往往只有少部分数据进行了更新,从而造成拷贝数据中存在大量的无效和冗余数据,而本发明中通过将更新指令存储到消息队列中,在存储空间与更新存储空间进行切换后,当前的更新存储空间(即切换前的存储空间)仍可根据消息队列中的更新指令对之前的数据进行更新,避免了拷贝大量无效数据的弊端。

上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。

附图说明

通过阅读下文优选实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。而且在整个附图中,用相同的参考符号表示相同的部件。在附图中:

图1示出了根据本发明一个实施例提供的一种数据文件的存取方法的流程图;

图2示出了根据本发明另一个实施例提供的一种数据文件的存取方法的流程图;

图3示出了根据本发明一个实施例提供的一种数据文件的存取装置的结构框图。

具体实施方式

下面将参照附图更详细地描述本公开的示例性实施例。虽然附图中显示了本公开的示例性实施例,然而应当理解,可以以各种形式实现本公开而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本公开,并且能够将本公开的范围完整的传达给本领域的技术人员。

图1示出了根据本发明一个实施例提供的一种数据文件的存取方法的流程图。如图1所示,该方法包括以下步骤:

步骤s110:将数据文件分别存储到第一存储空间和第二存储空间中。

其中,数据文件可以包括各种类型的数据文件,例如,可以包括新闻数据文件、财经数据文件等。本步骤中第一存储空间和第二存储空间中的数据文件内容相同,也就是说,在执行步骤s120之前,第一存储空间和第二存储空间中的存储内容是完全相同的。并且本发明对数据文件存储在第一存储空间和第二存储空间的具体形式不做限定。例如,可以将数据文件中的数据以键值对的方式进行存储,也可以以列式或其他方式进行存储。

步骤s120:每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。

当需要对数据文件进行更新时,会接收到用于更新数据文件的更新指令,每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。其中,本发明中的更新指令包括多种类型,例如,新增类型的更新指令、删除类型的更新指令以及修改类型的更新指令等。由此可见,本发明中的更新指令不局限于对数据文件中原有数据的更新操作指令,还包括在数据文件中写入新的数据的写入操作指令。

步骤s130:将第一存储空间作为读取存储空间,并将第二存储空间作为更新存储空间。

在执行完步骤s110之后,初始的默认状态可以为第一存储空间为读取存储空间,第二存储空间为更新存储空间;或者,当系统重新启动但未保存有之前读取存储空间和更新存储空间与第一存储空间和第二存储空间的对应关系的相关信息时,也可将第一存储空间作为读取存储空间,并将第二存储空间作为更新存储空间。其中,第一存储空间与第二存储空间中的“第一”及“第二”并不表示任何顺序,只是为区分存储空间而设。

其中,读取存储空间用于处理来自用户的读取请求,更新存储空间用于根据消息队列中存储的更新指令进行更新。本发明中读取存储空间与更新存储空间的作用与此处相同。具体地,当接收到用户的读取请求时,根据读取存储空间中的数据来处理用户的读取请求;而更新存储空间则不断地根据更新指令对更新存储空间中的数据文件进行更新。

步骤s140:每当预设的存储空间切换条件满足时,将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

每当满足预设的存储空间切换条件时,切换读取存储空间与更新存储空间,即将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。例如,当预设的存储空间切换条件为当前时间距上次切换时间的时间间隔等于30秒时,则将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

其中,本发明对上述的各个步骤的具体执行顺序不做限定,本领域技术人员可以根据需要灵活调整各个步骤之间的先后顺序。例如,步骤s120与步骤s130既可以同时执行,也可以先后执行,本发明对此不做限定。

由此可见,本发明实施例提供的数据文件的存取方法,首先通过将数据文件分别存储在两个存储空间中,从而将数据文件的读操作与写操作进行空间上的分化,利用读取存储空间来处理来自用户的读取请求,利用更新存储空间来根据更新指令进行数据的更新,并在满足切换条件时读取存储空间与更新存储空间可以进行切换,从而实现了在无锁的情况下对数据同时进行读写,提高系统的并发数和吞吐量的效果。同时,一般情况下,读取存储空间与更新存储空间相互切换后,需将切换前的更新存储空间中的全部数据拷贝至切换前的读取存储空间中来保证数据的一致性,但拷贝的数据中往往只有少部分数据进行了更新,从而造成拷贝数据中存在大量的无效和冗余数据,而本发明中通过将更新指令存储到消息队列中,在存储空间与更新存储空间进行切换后,当前的更新存储空间(即切换前的存储空间)仍可根据消息队列中的更新指令对之前的数据进行更新,避免了拷贝大量无效数据的弊端。

图2示出了根据本发明另一个实施例提供的一种数据文件的存取方法的流程图。如图2所示,该方法包括以下步骤:

步骤s210,将数据文件分别存储到第一存储空间和第二存储空间中。

本步骤中第一存储空间和第二存储空间中存储的数据文件的内容相同。并且本发明对数据文件存储在第一存储空间和第二存储空间的具体形式不做限定。例如,可以将数据文件中的数据以键值对的方式进行存储,也可以以列式或其他方式进行存储。

第一存储空间和第二存储空间可设置于系统磁盘,也可位于系统内存中的物理内存或缓存区域中,由于系统内存中的缓存区域数据的存取速度相对较高,所以本实施例优选地将第一存储空间和第二存储空间设置在系统内存中的缓存区域。

在实际的应用场景中,本发明中的数据文件可以包括新闻数据文件,新闻数据文件可进一步包括每条新闻的具体内容、展现逻辑(如新闻数据的具体展现形式等)或反映每条新闻的权重信息(权重信息可以与新闻热度及用户偏好相关)等。

步骤s220,每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。

当需要对数据文件进行更新时,会接收到用于更新数据文件的更新指令,每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。其中,本发明中更新数据文件的更新指令不局限于对数据文件中原有数据的更新操作指令,还包括在数据文件中写入新的数据的写入操作指令。且更新指令包括多种类型,从而能够对新闻数据文件的具体内容、展现逻辑和/或权重信息等各种属性进行更新。

发明人在实现本发明的过程中发现:若直接通过预设的通信接口接收并处理更新指令会导致如下弊端:通常情况下,所有的新闻数据文件的默认更新周期大致相同,因此,每当更新时间到达时所有的新闻数据文件将集中进行更新,相应地,则会因瞬时接收到的更新指令过多而导致系统瞬时负载过高,进而导致指令丢失或延时过长等一系列问题;相反,在下一次更新时间到达之前,又可能由于系统空闲而导致资源的浪费。基于上述原因,在本发明中,每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。具体地,在分布式系统中,消息队列可以为分布式消息队列,采用该消息队列可以实现更新指令发送端与更新指令消费端的解耦,以及更新指令发送与更新指令消费的异步进行,并使更新指令可以以一定的速度被消费,从而避免了系统瞬时负载过高的情况。

本实施例中存储更新指令的消息队列可以为分布式消息队列,其可以支持发布/订阅模式(如kafka消息队列),其对应的消费端可以为多个消费端,消息队列中的同一条消息可以被一个或多个消费端所消费。由此可见,通过采用支持发布/订阅模式的消息队列能够对更新指令进行保存,从而为多个消费端的异步消费提供了保障。

步骤s230,将第一存储空间作为读取存储空间,并将第二存储空间作为更新存储空间。

在执行完步骤s210后,初始的默认状态可以为第一存储空间为读取存储空间,第二存储空间为更新存储空间;或者,当系统重新启动但未保存有之前读取存储空间和更新存储空间与第一存储空间和第二存储空间的对应关系的相关信息时,也可将第一存储空间作为读取存储空间,并将第二存储空间作为更新存储空间。其中,第一存储空间与第二存储空间中的“第一”及“第二”并不表示任何顺序,只是为区分存储空间而设。

步骤s240,当第一存储空间为更新存储空间时,第一消费端根据消息队列中的更新指令对第一存储空间进行更新;当第二存储空间为更新存储空间时,第二消费端根据消息队列中的更新指令对第二存储空间进行更新。

其中,读取存储空间用于处理来自用户的读取请求,更新存储空间用于根据消息队列中存储的更新指令进行更新。当第一存储空间为更新存储空间时,其对应的消费端为第一消费端,第一消费端可根据消息队列中的更新指令对第一存储空间进行更新;当第二存储空间为更新存储空间时,其对应的消费端为第二消费端,第二消费端可根据消息队列中的更新指令对第二存储空间进行更新。

具体地,本步骤可以分为以下情形:

情形一,执行完步骤s230后首次执行本步骤,则本步骤具体为:

由于步骤s230中第一存储空间作为读取存储空间,第二存储空间作为更新存储空间,则更新存储空间对应的消费端为第二消费端,第二消费端根据消息队列中的更新指令对第二存储空间进行更新。其中,第二消费端订阅步骤s220中的消息队列。具体地,第二消费端根据第二消费偏移消费消息队列中的更新指令,并根据更新指令对第二存储空间中的数据文件进行更新,其中,第二消费偏移为第二存储空间刚刚切换为更新存储空间时第二消费端从消息队列中开始消费消息的偏移点。例如,第二消费偏移初始值为1,则在执行完步骤s230后,第二消费端从消费偏移为1处开始消费消息队列中的更新指令,即从消息队列中的第一条消息处开始消费任务,并根据更新指令更新第二存储空间数据文件中相应的数据。

情形二,执行完步骤s260后执行本步骤,则本步骤具体为:

当第一存储空间切换为更新存储空间时,第一消费端根据第一消费偏移消费消息队列中的更新指令;当第一存储空间切换为读取存储空间时,第一消费端根据当前偏移信息更新第一消费偏移;

当第二存储空间切换为更新存储空间时,第二消费端根据第二消费偏移消费消息队列中的更新指令;当第二存储空间切换为读取存储空间时,第二消费端根据当前偏移信息更新第二消费偏移。

其中,第一消费端及第二消费端订阅步骤s220中的存储有更新指令的消息队列,第一消费端维护有第一存储空间为更新存储空间时的消息消费状态、订阅关系及消费速度等;第二消费端维护有第二存储空间为更新存储空间时的消息消费状态、订阅关系及消费速度等。其中,第一消费偏移为第一存储空间刚刚切换为更新存储空间时,第一消费端从消息队列中开始消费消息的偏移点,第二消费偏移为第二存储空间刚刚切换为更新存储空间时,从消息队列中开始消费消息的偏移点。也就是说,第一消费端固定地负责对第一存储空间进行更新,且第一消费偏移专用于表示第一消费端的消费进度;第二消费端固定地负责对第二存储空间进行更新,且第二消费偏移专用于表示第二消费端的消费进度。

以下以具体示例来阐明本步骤:

若执行完步骤s260,第一存储空间切换为更新存储空间,第一消费偏移为501,则第一消费端从消息队列偏移为501处(即消息队列中第501条消息处)开始拉取更新指令,并不断地根据拉取到的更新指令对第一存储空间的数据文件进行更新,第一消费端不断记录当前的偏移信息,当当前偏移为1500,即第一消费端拉取到消息队列中第1500条消息对应的更新指令时,第一存储空间切换为更新存储空间,则第一消费端将第一消费偏移从501更新为1501,即当下次第一存储空间切换为更新存储空间时,第一消费端开始从第1501条消息处开始消费;

若执行完步骤s260,第二存储空间切换为更新存储空间,第二消费偏移为1,则第二消费端从消息队列偏移为1处(即消息队列中第1条消息处)开始拉取更新指令,并不断地根据拉取到的更新指令对第二存储空间的数据文件进行更新,第二消费端不断记录当前的偏移信息,当当前偏移为1000,即第二消费端拉取到消息队列中第1000条消息对应的更新指令时,第二存储空间切换为更新存储空间,则第二消费端更新第二消费偏移为1001,即当下次第二存储空间切换为更新存储空间时,第二消费端开始从第1001条消息处开始消费。

情形三,执行完步骤s252后执行本步骤,或执行完步骤s253后执行本步骤,则本步骤具体为:

当步骤s252判断结果为否或步骤s253判断结果为否时,当前的读取存储空间继续用于处理来自用户的读取请求,而当前的更新存储空间所对应的消费端根据当前的偏移信息继续从消息队列中拉取更新指令,并根据更新指令对当前的更新存储空间中的数据文件进行更新。

综上所述,本步骤中当第一存储空间为更新存储空间,第二存储空间为读取存储空间时,第二存储空间用于处理来自用户的读取请求,第一消费端根据消息队列中的更新指令对第一存储空间进行更新;当第二存储空间为更新存储空间,第一存储空间为读取存储空间时,第一存储空间用于处理来自用户的读取请求,第二消费端根据消息队列中的更新指令对第二存储空间进行更新。

可选的,更新存储空间对应的消费端(第一消费端或第二消费端)的消费速度可以调整。具体地,可根据消息队列的写入速度和/或消息队列中的未消费消息数量调整更新存储空间对应的消费端的消费速度。具体的消费速度调整策略本领域技术人员可自行设置,在此仅示例两种消费速度调整策略:

消费速度调整策略一:设置消费端的消费速度与消息队列的写入速度成函数对应关系。

具体地,消息队列的写入速度越大,则应提升消费端的消费速度。可设置消费端的消费速度与消息队列的写入速度的函数关系,如y=kx,其中y为消费端的消费速度,x为消息队列的写入速度,k为比例常数,则可通过获取消息队列的写入速度,动态调整消费端的消费速度。

消费速度调整策略二:根据消息队列中的未消费消息数量调整消费端的消费速度。

其中,可根据消息队列中的最大数据偏移以及消费端当前偏移信息确定消息队列中的未消费消息数量。例如,消息队列目前已写入了2000条消息,则当前该消息队列中的最大数据偏移为2000;当前更新存储空间对应的消费端为第一消费端,第一消费端目前已读取至第50条消息,则第一消费端对应的当前消费偏移为50,则消息队列中的未消费消息数量为1950。当消息队列中的未消费消息数量较多时,可适当提高消费端的消费速度。所以,可通过获取消息队列中的未消费消息数量调整消费端的消费速度。

步骤s250,判断是否满足预设的存储空间切换条件,若是,则执行步骤s260;若否,则执行步骤s240。

其中,预设的存储空间切换条件为当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间;和/或,与当前更新存储空间相对应的消费端消费的消息条数到达预设数量。即,当当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间,和/或,与当前更新存储空间相对应的消费端消费的消息条数到达预设数量时则执行步骤s260;否则,执行步骤s240。

在具体实施过程中,步骤s250可进一步包括步骤s251、s252及s253。

步骤s251,判断更新存储空间与读取存储空间是否已发生交换,若是,则执行步骤s253;若否,则执行步骤s252。

当更新存储空间与读取存储空间未发生交换,则执行步骤s252,当更新存储空间与读取存储空间已发生交换,则执行步骤s253。可选的,可在更新存储空间与读取存储空间发生过交换后设置已交换的标签,根据该标签可判断更新存储空间与读取存储空间是否已发生交换。

步骤s252,判断是否满足预设的首次存储空间切换的条件,若是,则执行步骤s260;若否,则执行步骤s240。

当首次切换读取存储空间和更新存储空间时,应满足首次存储空间切换条件。

在一种具体实施方式中,首次存储空间切换的条件为当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间,该预设时间为第一阈值,其中,由于在执行步骤s252前,读取存储空间和更新存储空间未发生过切换,则在本具体实施方式中上一次切换读取存储空间和更新存储空间的时间点为步骤s230将第一存储空间作为读取空间,第二存储空间作为更新存储空间的开始时间点。举例来说,若第一阈值为30秒,步骤s230中将第一存储空间作为读取空间,第二存储空间作为更新存储空间的开始时间点为12分00秒,若当前时间点为12分27秒,则当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔未达到第一阈值,则不满足预设的首次存储空间切换的条件,则执行步骤s240;若当前时间点为12分30秒,则当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到第一阈值,则满足预设的首次存储空间切换的条件,则执行步骤s260。

在另一种具体实施方式中,首次存储空间切换的条件为与当前更新存储空间相对应的消费端消费的消息条数达到预设数量,该预设数量为第一阈值。举例来说,若第一阈值为500条,由于在执行步骤s252前,读取存储空间和更新存储空间未发生过切换,则当前的更新存储空间为第二存储空间,第二存储空间对应的消费端为第二消费端,若第二消费端在此过程中消费的消息条数为480条,则表明当前更新存储空间相对应的消费端消费的消息条数未达到预设数量,即不满足预设的首次存储空间切换的条件,则执行步骤s240;若第二消费端在此过程中消费的消息条数为500条,则表明当前更新存储空间相对应的消费端消费的消息条数达到预设数量,即满足预设的首次存储空间切换的条件,则执行步骤s260。

步骤s253,判断是否满足预设的非首次存储空间切换的条件,若是,则执行步骤s260;若否,则执行步骤s240。

当非首次切换读取存储空间和更新存储空间时,应满足非首次存储空间切换条件。

在一种具体实施方式中,非首次存储空间切换的条件为当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间,该预设时间为第二阈值,其中第二阈值大于步骤s252中的第一阈值(首次存储空间切换的条件中当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到的预设时间为第一阈值),优选的,第二阈值为第一阈值的二倍。举例来说,若第一阈值为30s,第二阈值为60s,则当当前时间距步骤s230中的开始时间达到30秒时,执行步骤s260即读取存储空间与更新存储空间进行交换,则第一存储空间切换为更新存储空间,第二存储空间切换为读取存储空间;而在读取存储存储空间与更新存储空间已经进行交换过后,当当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到60s时,则执行步骤s260。

在另一种具体实施方式中,非首次存储空间切换的条件为与当前更新存储空间相对应的消费端消费的消息条数达到预设数量,该预设数量为第二阈值,其中第二阈值大于第一阈值(首次存储空间切换的条件中与当前更新存储空间相对应的消费端消费的消息条数达到的预设数量为第一阈值),优选的,第二阈值为第一阈值的二倍;当前更新存储空间相对应的消费端消费的消息条数m=nt-n1+1,其中,nt为更新存储空间相对应的消费端当前的偏移,n1为更新存储空间相对应的消费端当前的第一消费偏移或第二消费偏移。举例来说,若第一阈值为500条,第二阈值可以为1000条,当读取存储空间与更新存储空间未发生过交换时,即对应初始状态第一存储空间为读取存储空间,第二存储空间为更新存储空间,此时更新存储空间对应的消费端为第二消费端,则当第二消费端从第一条消息开始消费到第500条消息时,其消费的条数达到500条,即满足了首次存储空间的切换条件,则执行步骤s260;当读取存储空间与更新存储空间已经发生过交换,若当前第一存储空间切换为更新存储空间,则此时更新存储空间对应的消费端为第一消费端,若此时第一消费偏移为1001,则当第一消费端当前偏移为2000,即第一消费端从第一消费偏移为1001开始消费的消息条数达到了1000条,即达到第二阈值,满足了非首次存储空间的切换条件,则执行步骤s260。

可选的,步骤s252中首次切换条件中的预设时间/预设数量,和/或步骤s253中的预设时间/预设数量可以根据消息队列的写入速度和/或消息队列中的未消费消息数量进行调整。

具体地,若步骤s252中首次切换条件中的预设时间较长或预设数量越大,则读取存储空间与更新存储空间首次切换的时间就越长,则读取存储空间中数据文件在较长的时间内不会更新,从而使用户从读取存储空间读取到的数据为脏数据的概率将增加,尤其是当消息队列写入速度较快和/或消息队列中的未消费消息数量较多时,说明数据文件的更新较为频繁,所以在消息队列的写入速度较快和/或消息队列中的未消费消息数量较多时,可适当缩短步骤s252中首次切换条件中的预设时间。

同理,若步骤s253中非首次切换条件中的预设时间较长或预设数量越大,则读取存储空间与更新存储空间非首次切换的时间就越长,则读取存储空间中数据文件在较长的时间内不会更新,从而使用户从读取存储空间读取到的数据为脏数据的概率将增加,尤其是当消息队列写入速度较快和/或消息队列中的未消费消息数量较多时,说明数据文件的更新较为频繁,所以在消息队列的写入速度较快和/或消息队列中的未消费消息数量较多时,可适当缩短步骤s252中首次切换条件中的预设时间。

步骤s260,将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

若步骤s250中满足预设的存储空间切换条件,则将读取存储空间与更新存储空间进行交换,即将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

另外,本领域技术人员能够理解的是,在本实施例中,将步骤s250进一步划分为步骤s251、s252及s253,并将存储空间切换条件进一步划分为首次存储空间切换条件和非首次存储空间切换条件,是为了更好地满足实际需求:由于非首次存储空间切换条件中的预设时间或预设数量大于首次存储空间切换条件中的预设时间或预设数量,从而可以确保在后续的切换过程中,每次切换后的更新存储空间在其更新期间不仅可以追赶上切换前的更新存储空间的更新进度,而且还能进一步超越切换前的更新存储空间的更新进度,从而使每次切换后的更新存储空间都能尽可能地及时更新,从而更好地满足了实时更新的需求,更加符合新闻的时效性要求。优选地,通过合理设置首次存储空间切换条件和非首次存储空间切换条件,并合理调整各个消费端的消费进度,能够使每次切换后的更新存储空间在其更新期间消费到消息队列的当前最大偏移处,从而确保该切换后的更新存储空间转为读取存储空间后能够为用户提供最新的数据内容。当然,在本发明其他的实施例中,本领域技术人员也可以将首次存储空间切换条件和非首次存储空间切换条件合并为同一条件,本发明对存储空间切换条件的具体实现方式不做限定。

由此可见,本发明实施例提供的数据文件的存取方法,首先通过将数据文件分别存储在读取存储空间和更新存储空间中,从而将数据文件的读操作与写操作进行空间上的分化,利用读取存储空间来处理来自用户的读取请求,利用更新存储空间来根据更新指令进行数据的更新,并在满足切换条件中的预设阈值时读取存储空间与更新存储空间可以进行切换,从而实现了在无锁的情况下对数据同时进行读写时保证数据的一致性,提高系统的并发数和吞吐量;并且切换条件中的预设阈值可以根据消息队列的写入速度和未消费消息数量进行调整,避免了预设阈值固化带来的不能适应系统不同状态的弊端。

另外,发明人在实现本发明的过程中发现:当两个存储空间交替作为更新存储空间和读取存储空间时,假设存储空间一刚刚从更新存储空间切换为读取存储空间,而存储空间二刚刚从读取存储空间切换为更新存储空间,则存储空间二需要根据存储空间一中存储的更新后的数据文件进行相应更新,此时,传统做法为:将存储空间一中的全部数据文件拷贝至存储空间二,虽然全量拷贝的方式费时费力,但是由于传统方式的存储空间一中仅保留了更新操作的结果,而未保留更新操作的中间过程,因此当存储空间二根据存储空间一进行相应更新时,显然只能采取全量拷贝的实现方式。例如,若存储空间一中存储有上万条数据记录,而在存储空间一作为更新存储空间期间,仅其中的数十条数据记录进行了更新操作,但由于存储空间二无法从上万条数据记录中识别出进行了更新操作的数十条数据记录,因此只能将存储空间一中的上万条数据记录逐一拷贝。而该种实现方式必然会导致以下问题:由于全量拷贝操作耗时巨大,因此,若更新存储空间与读取存储空间的切换间隔设置得太短,必然无法在一个切换周期内完成全量拷贝操作,进而导致后续的读取和更新过程出错;若更新存储空间与读取存储空间的切换间隔设置得太长,又必然导致用户根据当前读取存储空间读取到的数据的时效性过低,即:用户将读取到较多的脏数据(例如,若用户读取到数小时前的数据,则该数据很可能与最新的数据不同),进而无法满足新闻数据文件的时效性要求。基于上述原因,本发明中通过将更新指令存储到消息队列中,在存储空间与更新存储空间进行切换后,当前的更新存储空间(即切换前的读取存储空间)仍可根据消息队列中的更新指令对之前的数据进行更新,避免了拷贝大量无效数据的弊端。并且更新存储空间对应的消费端的消费速度可以根据消息队列的写入速度和未消费消息数量进行调整,避免了消费速度僵化带来的不能适应系统不同状态的弊端。由此可见,本发明中的实现方式至少具备如下优势:首先,消息队列中存储的是更新指令,因此能够根据该更新指令准确定位到相应的数据记录,从而仅针对相应的数据记录进行更新即可,避免了全量拷贝的弊端;其次,消息队列支持订阅,可由两个消费端相互独立地进行消费且互不影响;而且,消息队列实现了消息消费端和消息生产者之间的解耦,若没有消息队列,一旦消息消费端和消息生产者之中有一个出现故障均会导致消息传输的失败,但采用消息队列后,无论消息消费端还是消息生产者出现故障,只要故障恢复后仍可依据消息队列正常传递消息,进而提升了整个系统的健壮性;最后,消息队列还具有均衡系统负载的优势,避免了系统瞬时负载过大所导致的消息丢失延误问题,也避免了因系统空闲所导致的资源浪费问题。

图3示出了根据本发明一个实施例提供的一种数据文件的存取装置的结构框图。如图3所示,该装置包括:数据存储模块31、指令存储模块32、设定模块33、切换模块34。

数据存储模块31,适于将数据文件分别存储到第一存储空间和第二存储空间中。

本模块中的第一存储空间和第二存储空间中的数据文件内容相同。并且本发明对数据文件存储在第一存储空间和第二存储空间的具体形式不做限定。例如,可以将数据文件中的数据以键值对的方式进行存储,也可以以列式或其他方式进行存储。

可选的,第一存储空间和第二存储空间可设置于系统磁盘,也可位于系统内存中的物理内存或缓存区域中,由于系统内存中的缓存区域数据的存取速度相对较高,所以可优选地将第一存储空间和第二存储空间设置在系统内存中的缓存区域。

可选的,本发明中的数据文件可以包括新闻数据文件,新闻数据文件可进一步包括每条新闻的具体内容、展现逻辑(如新闻数据的具体展现形式等)或反映每条新闻的权重信息(权重信息可以与新闻热度及用户偏好相关)等。

指令存储模块32,适于每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。

当需要对数据文件进行更新时,会接收到用于更新数据文件的更新指令,每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。其中,本发明中更新数据文件的更新指令不局限于对数据文件中原有数据的更新操作指令,还包括在数据文件中写入新的数据的写入操作指令。且更新指令包括多种类型,从而能够对新闻数据文件的具体内容、展现逻辑和/或权重信息等各种属性进行更新。

在本发明中,每当接收到用于更新数据文件的更新指令时,将更新指令存储到预设的消息队列中。具体地,在分布式系统中,消息队列可以为分布式消息队列,采用该消息队列可以实现更新指令发送端与更新指令消费端的解耦,以及更新指令发送与更新指令消费的异步进行,并使更新指令可以以一定的速度被消费,从而避免了系统瞬时负载过高的情况。

可选的,本实施例中存储更新指令的消息队列可以为分布式消息队列,其可以支持发布/订阅模式(如kafka消息队列),其对应的消费端可以为多个消费端,消息队列中的同一条消息可以被一个或多个消费端所消费。由此可见,通过采用支持发布/订阅模式的消息队列能够对更新指令进行保存,从而为多个消费端的异步消费提供了保障。

设定模块33,适于将第一存储空间作为读取存储空间,并将第二存储空间作为更新存储空间。

设定模块33初始的默认状态可以为第一存储空间为读取存储空间,第二存储空间为更新存储空间;或者,当系统重新启动但未保存有之前读取存储空间和更新存储空间与第一存储空间和第二存储空间的对应关系的相关信息时,也可将第一存储空间作为读取存储空间,并将第二存储空间作为更新存储空间。其中,第一存储空间与第二存储空间中的“第一”及“第二”并不表示任何顺序,只是为区分存储空间而设。

切换模块34,适于每当预设的存储空间切换条件满足时,将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

每当满足预设的存储空间切换条件时,切换读取存储空间与更新存储空间,即将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。例如,当预设的存储空间切换条件为当前时间距上次切换时间的时间间隔等于30秒时,则将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

其中,读取存储空间用于处理来自用户的读取请求,更新存储空间用于根据消息队列中存储的更新指令进行更新。本发明中读取存储空间与更新存储空间的作用与此处相同。具体地,当接收到用户的读取请求时,根据读取存储空间中的数据来处理用户的读取请求;而更新存储空间则不断地根据更新指令对更新存储空间中的数据文件进行更新。

可选的,本装置还包括:第一消费端35、第二消费端36。

第一消费端35,适于在第一存储空间作为更新存储空间时,根据消息队列中的更新指令对第一存储空间进行更新。

其中,第一消费端35订阅存储有更新指令的消息队列,第一消费端35维护有第一存储空间为更新存储空间时的消息消费状态、订阅关系及消费速度等。其中,第一消费偏移为第一存储空间刚刚切换为更新存储空间时,第一消费端35从消息队列中开始消费消息的偏移点。

具体地,第一消费端35进一步适于:每当第一存储空间切换为更新存储空间时,根据第一消费偏移消费消息队列中的更新指令;并且,每当第一存储空间切换为读取存储空间时,根据当前偏移信息更新第一消费偏移。

举例来说,若第一存储空间切换为更新存储空间,第一消费偏移为501,则第一消费端35从消息队列偏移为501处(即消息队列中第501条消息处)开始拉取更新指令,并不断地根据拉取到的更新指令对第一存储空间的数据文件进行更新,第一消费端35不断记录当前的偏移信息,当当前偏移为1500,即第一消费端消费到消息队列中第1500条消息对应的更新指令时,第一存储空间切换为更新存储空间,则第一消费端35将第一消费偏移从501更新为1501,即当下次第一存储空间切换为更新存储空间时,第一消费端35开始从第1501条消息处开始消费。也就是说,第一消费端35固定地负责对第一存储空间进行更新,且第一消费偏移专用于表示第一消费端的消费进度。

第二消费端36,适于在第二存储空间作为更新存储空间时,根据消息队列中的更新指令对第二存储空间进行更新。

其中,第二消费端36订阅存储有更新指令的消息队列,第二消费端36维护有第二存储空间为更新存储空间时的消息消费状态、订阅关系及消费速度等。其中,第二消费偏移为第二存储空间刚刚切换为更新存储空间时,从消息队列中开始消费消息的偏移点。

具体地,第二消费端36进一步适于:每当第二存储空间切换为更新存储空间时,根据预设的第二消费偏移消费消息队列中的更新指令;并且,每当第二存储空间切换为读取存储空间时,第二消费端根据当前偏移信息更新所述第二消费偏移。

举例来说,若第二存储空间切换为更新存储空间,第二消费偏移为1,则第二消费端36从消息队列偏移为1处(即消息队列中第1条消息处)开始拉取更新指令,并不断地根据拉取到的更新指令对第二存储空间的数据文件进行更新,第二消费端36不断记录当前的偏移信息,当当前偏移为1000,即第二消费端36消费到消息队列中第1000条消息对应的更新指令时,第二存储空间切换为更新存储空间,则第二消费端36更新第二消费偏移为1001,即当下次第二存储空间切换为更新存储空间时,第二消费端36开始从第1001条消息处开始消费。也就是说,第二消费端36固定地负责对第二存储空间进行更新,且第二消费偏移专用于表示第二消费端的消费进度。

可选的,本实施例中,预设的存储空间切换条件进一步包括:当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间;和/或,与当前更新存储空间相对应的消费端消费的消息条数到达预设数量。

当当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间,和/或,与当前更新存储空间相对应的消费端消费的消息条数到达预设数量时通过切换模块34将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

具体地,当首次切换读取存储空间和更新存储空间时,应满足首次存储空间切换条件。

在一种具体实施方式中,首次存储空间切换的条件为当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间,该预设时间为第一阈值,其中,当读取存储空间和更新存储空间未发生过切换,则在本具体实施方式中上一次切换读取存储空间和更新存储空间的时间点为设定模块33将第一存储空间作为读取空间,第二存储空间作为更新存储空间的开始时间点。举例来说,若第一阈值为30秒,设定模块33中将第一存储空间作为读取空间,第二存储空间作为更新存储空间的开始时间点为12分00秒,若当前时间点为12分27秒,则当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔未达到第一阈值,则不满足预设的首次存储空间切换的条件;若当前时间点为12分30秒,则当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到第一阈值,则满足预设的首次存储空间切换的条件,则通过切换模块34将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

在另一种具体实施方式中,首次存储空间切换的条件为与当前更新存储空间相对应的消费端消费的消息条数达到预设数量,该预设数量为第一阈值。举例来说,若第一阈值为500条,若读取存储空间和更新存储空间未发生过切换,若当前的更新存储空间为第二存储空间,第二存储空间对应的消费端为第二消费端36,第二消费端36在此过程中消费的消息条数为480条,则表明当前更新存储空间相对应的消费端消费的消息条数达到预设数量,即不满足预设的首次存储空间切换的条件;若第二消费端在此过程中消费的消息条数为500条,则表明当前更新存储空间相对应的消费端消费的消息条数达到预设数量,即满足预设的首次存储空间切换的条件,则通过切换模块34将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间。

当非首次切换读取存储空间和更新存储空间时,应满足非首次存储空间切换条件。

在一种具体实施方式中,非首次存储空间切换的条件为当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间,该预设时间为第二阈值,其中第二阈值大于第一阈值(首次存储空间切换的条件中当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到的预设时间为第一阈值),优选的,第二阈值为第一阈值的二倍。举例来说,若第一阈值为30s,第二阈值为60s,则当当前时间设定模块33将第一存储空间作为读取空间,第二存储空间作为更新存储空间的开始时间点达到30秒时,则通过切换模块34将读取存储存储空间与更新存储空间进行交换,则第一存储空间切换为更新存储空间,第二存储空间切换为读取存储空间;而在读取存储存储空间与更新存储空间已经进行交换过后,当当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到60s时,则通过切换模块34将读取存储存储空间与更新存储空间进行交换。

在另一种具体实施方式中,非首次存储空间切换的条件为与当前更新存储空间相对应的消费端消费的消息条数达到预设数量,该预设数量为第二阈值,其中第二阈值大于第一阈值(首次存储空间切换的条件中与当前更新存储空间相对应的消费端消费的消息条数达到的预设数量为第一阈值),优选的,第二阈值为第一阈值的二倍;当前更新存储空间相对应的消费端消费的消息条数m=nt-n1+1,其中,nt为更新存储空间相对应的消费端当前的偏移,n1为更新存储空间相对应的消费端当前的第一消费偏移或第二消费偏移。举例来说,若第一阈值为500条,第二阈值可以为1000条,当读取存储空间与更新存储空间未发生过交换时,即对应初始状态第一存储空间为读取存储空间,第二存储空间为更新存储空间,此时更新存储空间对应的消费端为第二消费端36,则当第二消费端36从第一条消息开始消费到第500条消息时,其消费的条数达到500条,即满足了首次存储空间的切换条件,则执行步骤s260;当读取存储空间与更新存储空间已经发生过交换,若当前第一存储空间切换为更新存储空间,则此时更新存储空间对应的消费端为第一消费端35,若此时第一消费偏移为1001,则当第一消费端35当前偏移为2000,即第一消费端35从第一消费偏移为1001开始消费的消息条数达到了1000条,即达到第二阈值,满足了非首次存储空间的切换条件,则通过切换模块34将读取存储存储空间与更新存储空间进行交换。

在本实施例中,将存储空间切换条件进一步划分为首次存储空间切换条件和非首次存储空间切换条件,是为了更好地满足实际需求:由于非首次存储空间切换条件中的预设时间或预设数量大于首次存储空间切换条件中的预设时间或预设数量,从而可以确保在后续的切换过程中,每次切换后的更新存储空间在其更新期间不仅可以追赶上切换前的更新存储空间的更新进度,而且还能进一步超越切换前的更新存储空间的更新进度,从而使每次切换后的更新存储空间都能尽可能地及时更新,从而更好地满足了实时更新的需求,更加符合新闻的时效性要求。优选地,通过合理设置首次存储空间切换条件和非首次存储空间切换条件,并合理调整各个消费端的消费进度,能够使每次切换后的更新存储空间在其更新期间消费到消息队列的当前最大偏移处,从而确保该切换后的更新存储空间转为读取存储空间后能够为用户提供最新的数据内容。当然,在本发明其他的实施例中,本领域技术人员也可以将首次存储空间切换条件和非首次存储空间切换条件合并为同一条件,本发明对存储空间切换条件的具体实现方式不做限定。

可选的,本装置还包括:第一调整模块37、第二调整模块38。

第一调整模块37,适于获取消息队列的写入速度和/或消息队列中的未消费消息数量,根据写入速度和/或消息队列中的未消费消息数量调整预设时间和/或预设数量。

首次切换条件中的预设时间/预设数量,和/或非首次切换条件中的预设时间/预设数量可以根据消息队列的写入速度和/或消息队列中的未消费消息数量进行调整。

具体地,若首次切换条件中的预设时间较长或预设数量越大,则读取存储空间与更新存储空间首次切换的时间就越长,则读取存储空间中数据文件在较长的时间内不会更新,从而使用户从读取存储空间读取到的数据为脏数据的概率将增加,尤其是当消息队列写入速度较快和/或消息队列中的未消费消息数量较多时,说明数据文件的更新较为频繁,所以在消息队列的写入速度较快和/或消息队列中的未消费消息数量较多时,可适当缩短首次切换条件中的预设时间。

同理,若非首次切换条件中的预设时间较长或预设数量越大,则读取存储空间与更新存储空间非首次切换的时间就越长,则读取存储空间中数据文件在较长的时间内不会更新,从而使用户从读取存储空间读取到的数据为脏数据的概率将增加,尤其是当消息队列写入速度较快和/或消息队列中的未消费消息数量较多时,说明数据文件的更新较为频繁,所以在消息队列的写入速度较快和/或消息队列中的未消费消息数量较多时,可适当缩短中首次切换条件中的预设时间。

第二调整模块38,适于根据消息队列写入速度和/或消息队列中的未消费消息数量调整与更新存储空间相对应的消费端的消费速度。

更新存储空间对应的消费端(第一消费端35或第二消费端36)的消费速度可以调整。具体地,可根据消息队列的写入速度和/或消息队列中的未消费消息数量调整更新存储空间对应的消费端的消费速度。具体的消费速度调整策略本领域人员可自行设置。

由此可见,本发明实施例提供的数据文件的存取装置,首先通过数据存储模块将数据文件分别存储在读取存储空间和更新存储空间中,从而将数据文件的读操作与写操作进行空间上的分化,利用读取存储空间来处理来自用户的读取请求,利用更新存储空间来根据更新指令进行数据的更新,并在满足切换条件中的预设阈值时读取存储空间与更新存储空间可以进行切换,从而实现了在无锁的情况下对数据同时进行读写时保证数据的一致性,提高系统的并发数和吞吐量;并且切换条件中的预设阈值可以根据消息队列的写入速度和未消费消息数量进行调整,避免了预设阈值固化带来的不能适应系统不同状态的弊端。

另外,本发明中通过将更新指令存储到消息队列中,在存储空间与更新存储空间进行切换后,当前的更新存储空间(即切换前的读取存储空间)仍可根据消息队列中的更新指令对之前的数据进行更新,避免了拷贝大量无效数据的弊端。并且更新存储空间对应的消费端的消费速度可以根据消息队列的写入速度和未消费消息数量进行调整,避免了消费速度僵化带来的不能适应系统不同状态的弊端。由此可见,本发明中的实现方式至少具备如下优势:首先,消息队列中存储的是更新指令,因此能够根据该更新指令准确定位到相应的数据记录,从而仅针对相应的数据记录进行更新即可,避免了全量拷贝的弊端;其次,消息队列支持订阅,可由两个消费端相互独立地进行消费且互不影响;而且,消息队列实现了消息消费端和消息生产者之间的解耦,若没有消息队列,一旦消息消费端和消息生产者之中有一个出现故障均会导致消息传输的失败,但采用消息队列后,无论消息消费端还是消息生产者出现故障,只要故障恢复后仍可依据消息队列正常传递消息,进而提升了整个系统的健壮性;最后,消息队列还具有均衡系统负载的优势,避免了系统瞬时负载过大所导致的消息丢失延误问题,也避免了因系统空闲所导致的资源浪费问题。

在此提供的算法和显示不与任何特定计算机、虚拟系统或者其它设备固有相关。各种通用系统也可以与基于在此的示教一起使用。根据上面的描述,构造这类系统所要求的结构是显而易见的。此外,本发明也不针对任何特定编程语言。应当明白,可以利用各种编程语言实现在此描述的本发明的内容,并且上面对特定语言所做的描述是为了披露本发明的最佳实施方式。

在此处所提供的说明书中,说明了大量具体细节。然而,能够理解,本发明的实施例可以在没有这些具体细节的情况下实践。在一些实例中,并未详细示出公知的方法、结构和技术,以便不模糊对本说明书的理解。

类似地,应当理解,为了精简本公开并帮助理解各个发明方面中的一个或多个,在上面对本发明的示例性实施例的描述中,本发明的各个特征有时被一起分组到单个实施例、图、或者对其的描述中。然而,并不应将该公开的方法解释成反映如下意图:即所要求保护的本发明要求比在每个权利要求中所明确记载的特征更多的特征。更确切地说,如下面的权利要求书所反映的那样,发明方面在于少于前面公开的单个实施例的所有特征。因此,遵循具体实施方式的权利要求书由此明确地并入该具体实施方式,其中每个权利要求本身都作为本发明的单独实施例。

本领域那些技术人员可以理解,可以对实施例中的设备中的模块进行自适应性地改变并且把它们设置在与该实施例不同的一个或多个设备中。可以把实施例中的模块或单元或组件组合成一个模块或单元或组件,以及此外可以把它们分成多个子模块或子单元或子组件。除了这样的特征和/或过程或者单元中的至少一些是相互排斥之外,可以采用任何组合对本说明书(包括伴随的权利要求、摘要和附图)中公开的所有特征以及如此公开的任何方法或者设备的所有过程或单元进行组合。除非另外明确陈述,本说明书(包括伴随的权利要求、摘要和附图)中公开的每个特征可以由提供相同、等同或相似目的的替代特征来代替。

此外,本领域的技术人员能够理解,尽管在此所述的一些实施例包括其它实施例中所包括的某些特征而不是其它特征,但是不同实施例的特征的组合意味着处于本发明的范围之内并且形成不同的实施例。例如,在下面的权利要求书中,所要求保护的实施例的任意之一都可以以任意的组合方式来使用。

本发明的各个部件实施例可以以硬件实现,或者以在一个或者多个处理器上运行的软件模块实现,或者以它们的组合实现。本领域的技术人员应当理解,可以在实践中使用微处理器或者数字信号处理器(dsp)来实现根据本发明实施例的基于集群的数据存储空间装置模块中的一些或者全部部件的一些或者全部功能。本发明还可以实现为用于执行这里所描述的方法的一部分或者全部的设备或者装置程序(例如,计算机程序和计算机程序产品)。这样的实现本发明的程序可以存储在计算机可读介质上,或者可以具有一个或者多个信号的形式。这样的信号可以从因特网网站上下载得到,或者在载体信号上提供,或者以任何其他形式提供。

应该注意的是上述实施例对本发明进行说明而不是对本发明进行限制,并且本领域技术人员在不脱离所附权利要求的范围的情况下可设计出替换实施例。在权利要求中,不应将位于括号之间的任何参考符号构造成对权利要求的限制。单词“包含”不排除存在未列在权利要求中的元件或步骤。位于元件之前的单词“一”或“一个”不排除存在多个这样的元件。本发明可以借助于包括有若干不同元件的硬件以及借助于适当编程的计算机来实现。在列举了若干装置的单元权利要求中,这些装置中的若干个可以是通过同一个硬件项来具体体现。单词第一、第二、以及第三等的使用不表示任何顺序。可将这些单词解释为名称。

本发明公开了:a1.一种数据文件的存取方法,包括:

将数据文件分别存储到第一存储空间和第二存储空间中;

每当接收到用于更新所述数据文件的更新指令时,将所述更新指令存储到预设的消息队列中;

将所述第一存储空间作为读取存储空间,并将所述第二存储空间作为更新存储空间;

每当预设的存储空间切换条件满足时,将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间;

其中,读取存储空间用于处理来自用户的读取请求,更新存储空间用于根据所述消息队列中存储的更新指令进行更新。

a2.根据a1所述的方法,其中,进一步包括步骤:通过预设的第一消费端和第二消费端订阅所述消息队列;

其中,所述第一消费端负责在所述第一存储空间作为更新存储空间时,根据所述消息队列中的更新指令对所述第一存储空间进行更新;

所述第二消费端负责在所述第二存储空间作为更新存储空间时,根据所述消息队列中的更新指令对所述第二存储空间进行更新。

a3.根据a2所述的方法,其中,每当所述第一存储空间切换为更新存储空间时,所述第一消费端根据预设的第一消费偏移消费所述消息队列中的更新指令;并且,每当所述第一存储空间切换为读取存储空间时,所述第一消费端根据当前偏移信息更新所述第一消费偏移;

每当所述第二存储空间切换为更新存储空间时,所述第二消费端根据预设的第二消费偏移消费所述消息队列中的更新指令;并且,每当所述第二存储空间切换为读取存储空间时,所述第二消费端根据当前偏移信息更新所述第二消费偏移。

a4.根据a1-a3任一所述的方法,其中,所述预设的存储空间切换条件包括:

当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间;和/或,与当前更新存储空间相对应的消费端消费的消息条数到达预设数量。

a5.根据a4所述的方法,其中,所述存储空间切换条件具体包括:

当首次切换读取存储空间和更新存储空间时,所述预设时间和/或预设数量为第一阈值;当后续切换读取存储空间和更新存储空间时,所述预设时间和/或预设数量为第二阈值;其中,所述第二阈值大于所述第一阈值。

a6.根据a4或a5所述的方法,其中,进一步包括步骤:获取所述消息队列的写入速度和/或所述消息队列中的未消费消息数量,根据所述写入速度和/或所述消息队列中的未消费消息数量调整所述预设时间和/或预设数量。

a7.根据a6所述的方法,其中,进一步包括步骤:根据所述写入速度和/或所述消息队列中的未消费消息数量调整与更新存储空间相对应的消费端的消费速度。

a8.根据a1-a7任一所述的方法,其中,所述第一存储空间和第二存储空间为设置在内存中的缓存区域。

a9.根据权利要求a1-a8任一所述的方法,其中,所述消息队列为分布式消息队列;且所述数据文件包括:新闻数据文件。

本发明还公开:b10.一种数据文件的存取装置,包括:

数据存储模块,适于将数据文件分别存储到第一存储空间和第二存储空间中;

指令存储模块,适于每当接收到用于更新所述数据文件的更新指令时,将所述更新指令存储到预设的消息队列中;

设定模块,适于将所述第一存储空间作为读取存储空间,并将所述第二存储空间作为更新存储空间;

切换模块,适于每当预设的存储空间切换条件满足时,将当前的读取存储空间切换为更新存储空间,并将当前的更新存储空间切换为读取存储空间;

其中,读取存储空间用于处理来自用户的读取请求,更新存储空间用于根据所述消息队列中存储的更新指令进行更新。

b11.根据b10所述的装置,其中,所述装置还包括:

第一消费端,适于在所述第一存储空间作为更新存储空间时,根据所述消息队列中的更新指令对所述第一存储空间进行更新;

第二消费端,适于在所述第二存储空间作为更新存储空间时,根据所述消息队列中的更新指令对所述第二存储空间进行更新;

所述第一消费端和第二消费端订阅所述消息队列。

b12.根据b11所述的装置,其中,

所述第一消费端进一步适于:每当所述第一存储空间切换为更新存储空间时,根据预设的第一消费偏移消费所述消息队列中的更新指令;并且,每当所述第一存储空间切换为读取存储空间时,根据当前偏移信息更新所述第一消费偏移;

所述第二消费端进一步适于:每当所述第二存储空间切换为更新存储空间时,根据预设的第二消费偏移消费所述消息队列中的更新指令;并且,每当所述第二存储空间切换为读取存储空间时,所述第二消费端根据当前偏移信息更新所述第二消费偏移。

b13.根据b10-b13任一所述的装置,其中,所述预设的存储空间切换条件包括:

当前时间点与上一次切换读取存储空间和更新存储空间的时间点之间的间隔达到预设时间;和/或,与当前更新存储空间相对应的消费端消费的消息条数到达预设数量。

b14.根据b13所述的装置,其中,所述存储空间切换条件具体包括:

当首次切换读取存储空间和更新存储空间时,所述预设时间和/或预设数量为第一阈值;当后续切换读取存储空间和更新存储空间时,所述预设时间和/或预设数量为第二阈值;其中,所述第二阈值大于所述第一阈值。

b15.根据b13或b14所述的装置,其中,所述装置还包括:

第一调整模块,适于获取所述消息队列的写入速度和/或所述消息队列中的未消费消息数量,根据所述写入速度和/或所述消息队列中的未消费消息数量调整所述预设时间和/或预设数量。

b16.根据b15所述的装置,其中,所述装置还包括:

第二调整模块,根据所述写入速度和/或所述消息队列中的未消费消息数量调整与更新存储空间相对应的消费端的消费速度。

b17.根据b10-b16任一所述的装置,其中,所述第一存储空间和第二存储空间为设置在内存中的缓存区域。

b18.根据b10-b17任一所述的装置,其中,所述消息队列为分布式消息队列;且所述数据文件包括:新闻数据文件。

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