CN105068762B - 一种数据读取方法及装置 - Google Patents
一种数据读取方法及装置 Download PDFInfo
- Publication number
- CN105068762B CN105068762B CN201510478357.5A CN201510478357A CN105068762B CN 105068762 B CN105068762 B CN 105068762B CN 201510478357 A CN201510478357 A CN 201510478357A CN 105068762 B CN105068762 B CN 105068762B
- Authority
- CN
- China
- Prior art keywords
- server
- key
- corresponding value
- effective time
- value
- 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
- Computer And Data Communications (AREA)
Abstract
本发明提供一种数据读取方法及装置,其中第一服务器中每个键对应的值的第一有效时间依据第二服务器的情况进行动态调整,例如在第二服务器异常的情况下提高第一服务器中每个键对应的值的存储时长,这样在第二服务器异常时,仍可以从第一服务器中读取每个键对应的值,以降低对第二服务器的依赖,从而降低数据读取异常情况的发生。在第二服务器正常的情况下逐渐将第一有效时间恢复至初始值,使第一服务器中每个键对应的值的存储时长逐渐降低,这样当第二服务器中的某个键对应的值发生变更时,第一服务器中某个键对应的值可以在尽可能短的时间内变更为与第二服务器中相同键对应的值,从而在尽可能短的时间内实现第一服务器和第二服务器内的数据同步。
Description
技术领域
本发明属于数据库处理技术领域,更具体的说,尤其涉及一种数据读取方法及装置。
背景技术
Couchbase Server简称为Couchbase,其作为一个服务器集群,形成了一个集群化的、基于文档的数据库系统,通常情况下,Couchbase将大部分数据都存储在RAM(Random-Access Memory,随机存取存储器)中,并使用一个缓存层来为电子设备中的各项进程提供较快的数据访问。其中缓存层是服务器集群中的多个服务器或一个服务器的缓存层,这样在使用Couchbase时可以按照实际需求扩大或者紧缩服务器集群,以便于利用更多的RAM来提升系统性能。
但是在使用Couchbase时,由于其内存储的键(key)的值(value)比较大,因此会导致Couchbase对网络要求较高,一旦网络异常就会引起数据读取的超时。
发明内容
有鉴于此,本发明的目的在于提供一种数据读取方法及装置,用于降低对某一种服务器的依赖,从而降低某一种服务器异常时数据读取异常情况的发生。技术方案如下:
本发明提供一种数据读取方法,应用于第一服务器中,所述方法包括:
接收数据读取请求,其中所述数据读取请求中携带有至少一个键,所述键用于指示所述数据读取请求所要请求的数据;
依据所述数据读取请求,判断所述第一服务器中是否命中所述键对应的值,所述值为所述数据读取请求所要请求的数据,且每个键所对应的值分别具有第一有效时间,所述第一服务器具有第二有效时间,所述第一有效时间小于等于所述第二有效时间,所述第一有效时间用于指示所述键所对应的值在所述第一服务器中的存储时长,第二有效时间用于指示所述第一服务器中存储的所述键对应的值的最大存储时长;
当所述第一服务器命中所述键对应的值时,返回所述键对应的值;
当所述第一服务器未命中所述键对应的值时,向第二服务器转发所述数据读取请求,用于触发所述第二服务器返回所述数据读取请求中携带的所述键对应的值;
其中所述第一有效时间依据所述第二服务器的情况动态调整。
优选的,所述第一有效时间依据所述第二服务器的情况动态调整包括:在所述第二服务器异常的情况下,依据所述第二服务器查找到所述键对应的值的情况,提高所述第一有效时间,其中调整后的第一有效时间小于等于所述第二有效时间;
在所述第二服务器正常的情况下,将所述第一有效时间逐渐恢复至所述第一有效时间的初始值。
优选的,所述方法还包括:在所述第二服务器中存储有所述键对应的值的情况下,写入所述第二服务器发送的所述键对应的值,并将写入所述键对应的值的时间确定为所述值的第一有效时间。
优选的,所述判断所述第一服务器中是否命中所述键对应的值包括以下任意一种方式:
判断所述第一服务器中是否有所述键对应的值;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间与当前时间的差值是否大于预设时间差;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的读取是否异常;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间的类型转换是否正确。
优选的,所述第一有效时间记录在所述键对应的值后,且所述第一有效时间和所述键对应的值间间隔一空格。
本发明还提供一种数据读取装置,应用于第一服务器中,所述装置包括:
接收单元,用于接收数据读取请求,其中所述数据读取请求中携带有至少一个键,所述键用于指示所述数据读取请求所要请求的数据;
判断单元,用于依据所述数据读取请求,判断所述第一服务器中是否命中所述键对应的值,所述值为所述数据读取请求所要请求的数据,且每个键所对应的值分别具有第一有效时间,所述第一服务器具有第二有效时间,所述第一有效时间小于等于所述第二有效时间,所述第一有效时间用于指示所述键所对应的值在所述第一服务器中的存储时长,第二有效时间用于指示所述第一服务器中存储的所述键对应的值的最大存储时长;
返回单元,用于当所述第一服务器命中所述键对应的值时,返回所述键对应的值;
转发单元,用于当所述第一服务器未命中所述键对应的值时,向第二服务器转发所述数据读取请求,用于触发所述第二服务器返回所述数据读取请求中携带的所述键对应的值;
其中所述第一有效时间依据所述第二服务器的情况动态调整。
优选的,所述装置还包括:调整单元,用于在所述第二服务器异常的情况下,依据所述第二服务器查找到所述键对应的值的情况,提高所述第一有效时间,其中调整后的第一有效时间小于等于所述第二有效时间,以及用于在所述第二服务器正常的情况下,将所述第一有效时间逐渐恢复至所述第一有效时间的初始值。
优选的,所述装置还包括:写入单元,用于在所述第二服务器中存储有所述键对应的值的情况下,写入所述第二服务器发送的所述键对应的值,并将写入所述键对应的值的时间确定为所述值的第一有效时间。
优选的,所述判断单元通过以下任意一种方式判断所述第一服务器中是否命中所述键对应的值:
判断所述第一服务器中是否有所述键对应的值;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间与当前时间的差值是否大于预设时间差;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的读取是否异常;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间的类型转换是否正确。
优选的,所述第一有效时间记录在所述键对应的值后,且所述第一有效时间和所述键对应的值间间隔一空格。
与现有技术相比,本发明提供的上述技术方案具有如下优点:
本发明提供的上述技术方案,第一服务器中每个键对应的值的第一有效时间依据第二服务器的情况进行动态调整,例如可以在第二服务器异常的情况下提高第一有效时间,在第二服务器正常的情况下,将第一有效时间逐渐恢复至初始值。即在第二服务器异常的情况下提高第一服务器中每个键对应的值的存储时长,这样在第二服务器异常的情况下,仍可以从第一服务器中读取每个键对应的值,以降低对第二服务器的依赖,从而降低第二服务器异常时数据读取异常情况的发生。在第二服务器正常的情况下逐渐将第一有效时间恢复至初始值,使第一服务器中每个键对应的值的存储时长逐渐降低,这样当第二服务器中的某个键对应的值发生变更时,第一服务器中某个键对应的值可以在尽可能短的时间内变更为与第二服务器中相同键对应的值,从而在尽可能短的时间内实现第一服务器和第二服务器内的数据同步。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例提供的数据读取方法的一种流程图;
图2是本发明实施例提供的数据读取方法的另一种流程图;
图3是本发明实施例提供的数据读取装置的一种结构示意图;
图4是本发明实施例提供的数据读取装置的另一种结构示意图;
图5是本发明实施例提供的数据读取装置的再一种结构示意图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
请参阅图1,其示出了本发明实施例提供的数据读取方法的一种流程图,其应用于第一服务器中,可以包括以下步骤:
101:接收数据读取请求,其中数据读取请求中携带有至少一个键,键用于指示数据读取请求所要请求的数据。可以理解的是:数据读取请求是由客户端上的任一进程运行时发送的请求,比如客户端上运行的某个搜索进程,用户在搜索进程中输入某个人名并点击搜索,此时与搜索关联的数据读取请求被触发,且数据读取请求携带的键为人名,该键用于指示某个服务器上获取到人名对应的数据,如该人名对应的年龄和身高等。
102:依据数据读取请求,判断第一服务器是否命中键对应的值,如果命中则执行步骤103,如果未命中则执行步骤104。
在本发明实施例中,值为数据读取请求所要请求的数据,如上述人名这一键对应的年龄和身高等。并且每个键所对应的值分别具有第一有效时间,第一服务器具有第二有效时间,其中第一有效时间小于等于第二有效时间,第一有效时间用于指示键所对应的值在第一服务器中的存储时长,第二有效时间用于指示第一服务器中存储的键对应的值的最大存储时长。
当某个键对应的值的存储时长大于第一有效时间时,需要对其进行更新,具体可以是从第一服务器相关联的第二服务器中获取相同键对应的值进行更新,这样可以使第一服务器中的任意键对应的值依据第二服务器中的数据进行及时更新,以降低从第一服务器中获取数据错误的情况发生。
可以理解的是:命中是指第一服务器可以正确反馈所述键对应的值。在本发明实施例中,判断第一服务器是否命中键对应的值的方式包括但不限于下述任意一种:
判断第一服务器中是否有键对应的值,当第一服务器中有键对应的值时,确定第一服务器命中键对应的值;当第一服务器中没有键对应的值时,确定第一服务器未命中键对应的值。
或者
当第一服务器中有键对应的值时,判断键对应的值的第一有效时间与当前时间的差值是否大于预设时间差;当判断出键对应的值的第一有效时间与当前时间的差值大于预设时间差时,确定第一服务器命中键对应的值;当判断出键对应的值的第一有效时间与当前时间的差值小于等于预设时间差时,确定第一服务器未命中键对应的值,其中预设时间差可以依据不同应用进行设置,其以当前时间为基准用于指示第一服务器中每个键对应的值的有效时间,对于其具体取值本发明实施例并不加以限制。
又或者
当第一服务器中有键对应的值时,判断键对应的值的读取是否异常,其中读取是否异常可以包括:读取是否超时等。当判断出键对应的值的读取异常时,确定第一服务器命中键对应的值;当判断出键对应的值的读取正常时,确定第一服务器未命中键对应的值
又或者
当第一服务器中有键对应的值时,判断键对应的值的第一有效时间的类型转换是否正确,比如第一有效时间由字符型(string)转换为ptime时其转换是否正确,当转换正确时确定第一服务器命中键对应的值,当转换失败时确定第一服务器未命中键对应的值。其中ptime是引用boost库中的一个时间类型,boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。
在这里需要说明的是:第一服务器中存储的键对应的值是第二服务器中选取的读取次数较高的值。例如一分钟内第二服务器中键为test的读取次数是100次,这就意味着存在大量重复读取test的应用,因此可以将其存储在作为本地服务器的第一服务器上,这样在每次读取test时可以直接从第一服务器上直接读取,而无需从远程的第二服务器中读取。
103:当第一服务器命中键对应的值时,返回键对应的值。
104:当第一服务器未命中键对应的值时,向第二服务器转发数据读取请求,用于触发第二服务器返回数据读取请求中携带的键对应的值。在本发明实施例中,第二服务器为与第一服务器进行交互的远程服务器,当第一服务器未命中键对应的值时,需要向第二服务器转发数据读取请求,以由第二服务器判断是否存储有数据读取请求中携带的键对应的值,并在判断出存储有数据读取请求中携带的键对应的值时,返回键对应的值。
并且上述第一有效时间可以依据第二服务器的情况动态调整,比如在第二服务器异常的情况下提高第一有效时间,在第二服务器正常的情况下将第一有效时间恢复至初始值。具体过程如下:
在第二服务器异常的情况下,依据第二服务器查找到键对应的值的情况,提高第一有效时间,其中调整后的第一有效时间小于等于第二有效时间。在第二服务器正常的情况下,将第一有效时间逐渐恢复至第一有效时间的初始值。
在本发明实施例中第二服务器查找到键对应的值的情况是指成功查找到以及未成功查找到键对应的值的情况,第二服务器每接收到一次数据读取请求,则会对查找次数进行加一,并记录每次的查找情况是成功还是未成功,根据这些信息则可以调整第一有效时间。比如访问10次第二服务器,其中有5次不成功时,也就是50%的失败率,那么第一服务器中的第一有效时间由初始的5分钟变为了10分钟,其计算方法是:5min/0.5=10min,直到第一有效时间等于第二有效时间。其中第二服务器的失败率的计算方式为:失败率=失败的次数/总访问的次数。
从上述技术方案可以看出,本发明提供的上述技术方案,在接收到数据读取请求后,首先判断第一服务器中是否命中所述数据读取请求中携带的键对应的值,当第一服务器命中键对应的值时,返回键对应的值;当第一服务器中未命中键对应的值时,向第二服务器转发数据读取请求,用于触发第二服务器返回数据读取请求中携带的键对应的值,这样通过第一服务器和第二服务器相结合的方式可以降低对某一种服务器的依赖,从而降低某一种服务器异常时数据读取异常情况的发生。
并且第一服务器中每个键对应的值的第一有效时间依据第二服务器的情况进行动态调整,例如可以在第二服务器异常的情况下提高第一有效时间,在第二服务器正常的情况下,将第一有效时间逐渐恢复至初始值。即在第二服务器异常的情况下提高第一服务器中每个键对应的值的存储时长,这样在第二服务器异常的情况下,仍可以从第一服务器中读取每个键对应的值,以降低对第二服务器的依赖,从而降低第二服务器异常时数据读取异常情况的发生。在第二服务器正常的情况下逐渐将第一有效时间恢复至初始值,使第一服务器中每个键对应的值的存储时长逐渐降低,这样当第二服务器中的某个键对应的值发生变更时,第一服务器中某个键对应的值可以在尽可能短的时间内变更为与第二服务器中相同键对应的值,从而在尽可能短的时间内实现第一服务器和第二服务器内的数据同步。
此外,在获取到数据读取请求后,优先从第一服务器中查找,也就是说对于客户端的所有进程来说,相当于在第一服务器中为所有进程开辟一共享内存,提高同一个键的命中率并节省内存占用。与现有技术相比本发明实施例对于同一类型的进程,节省大约70%的内存占用。
请参阅图2,其示出了本发明实施例提供的数据读取方法的另一种流程图,在图1基础上,还可以包括以下步骤:
105:在第二服务器中存储有键对应的值的情况下,写入第二服务器发送的键对应的值,并将写入键对应的值的时间确定为值的第一有效时间。在写入第二服务器发送的键对应的值时可以通过一专用进程来执行,即在第一服务器中开发一进程,该进程仅用于写入第二服务器发送的键对应的值。
之所以在第一服务器中开发一进程来写入第二服务器发送的键对应的值是因为:第一服务器和第二服务器所涉及的服务均是在线服务,在线服务通常要求低延迟,也就是说,第一服务器和第二服务器要以最快的速度响应每个请求,其响应时长不能超过1秒钟。在这种追求低延迟的服务架构中,不允许有非常耗时的操作存在,而刚好将数据写入到第一服务器中是一件比较耗时的事情,因此本发明实施例采用一进程来专门写入键对应的值到第一服务器中,以降低写入消耗的时间。
在写入值之后将写入值的时间确定为其第一有效时间。在本发明实施例中,第一有效时间的类型为string类型,其与键、值的格式为:键+值+空格+第一有效时间,即每个键对应的值位于键和第一有效时间之间,且第一有效时间和值之间间隔一空格,比如:键=123,值=abc,第一有效时间加在值后面,则变为:value(值)=abc 2015-05-1411:19。这种格式相对于采用Hash(哈希)算法记录方式来说,降低内存碎片数量。
因为对于Hash算法来说其适用于一个键对应多个值的应用场景,如Key=人名,value=对应多个Field,包括Gender:女;年龄:29;身高:158cm;体重:45KG。而本发明实施例所基于的应用场景是:键是一数字串,值和第一有效时间分别是以字符串,且不同值的长度跨度较大,有的只占几十KB,有的却占用上百。对于这种长度跨度较大的数据来说,采用Hash算法这种复杂的结构进行存储,更容易造成内存碎片,因此本发明实施例采用上述格式,即每个键对应的值位于键和第一有效时间之间,且第一有效时间和值之间间隔一空格来存储以降低内存碎片数量。
并且在将值写入第一服务器时是将值写入到第一服务器的内存中,这样在第一服务器中写入值的时间等于自身的第一有效时间时,可以从内存中将其移出并从第二服务器中获取其更新后的值写入,以便于及时对第一服务器中每个键对应的值进行更新。
在这里需要说明的一点是:本发明实施例中第一服务器为客户端使用的本地服务器,第二服务器为远程的服务器,第一服务器和第二服务器分别是应用键值对这种类型数据库的服务器,如第一服务器为redis服务器,第二服务器为Couchbase服务器,其中redis服务器是运行redis服务的服务器,该redis服务器无需与其他服务器上数据库redis中的数据保持一致。redis的全称是:Remote Dictionary Server(远程字典服务器),其是一个高性能的key-value数据库。并且在从第一服务器和第二服务器中读取数据时,都会统计读取失败或者成功的次数,这样则后续可以根据统计次数对第一服务器中每个键对应的值的第一有效时间进行调整。
对于前述的各方法实施例,为了简单描述,故将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其他顺序或者同时进行。其次,本领域技术人员也应该知悉,说明书中所描述的实施例均属于优选实施例,所涉及的动作和模块并不一定是本发明所必须的。
与上述方法实施例相对应,本发明实施例还提供一种数据读取装置,应用于第一服务器中,其结构示意图如图3所示,可以包括:接收单元11、判断单元12、返回单元13和转发单元14。
接收单元11,用于接收数据读取请求,其中数据读取请求中携带有至少一个键,键用于指示数据读取请求所要请求的数据。可以理解的是:数据读取请求是由客户端上的任一进程运行时发送的请求,比如客户端上运行的某个搜索进程,用户在搜索进程中输入某个人名并点击搜索,此时与搜索关联的数据读取请求被触发,且数据读取请求携带的键为人名,该键用于指示某个服务器上获取到人名对应的数据,如该人名对应的年龄和身高等。
判断单元12,用于依据数据读取请求,判断第一服务器中是否命中键对应的值,值为数据读取请求所要请求的数据,且每个键所对应的值分别具有第一有效时间,第一服务器具有第二有效时间,第一有效时间小于等于第二有效时间,第一有效时间用于指示键所对应的值在第一服务器中的存储时长,第二有效时间用于指示第一服务器中存储的键对应的值的最大存储时长。
当某个键对应的值的存储时长大于第一有效时间时,需要对其进行更新,具体可以是从第一服务器相关联的第二服务器中获取相同键对应的值进行更新,这样可以使第一服务器中的任意键对应的值依据第二服务器中的数据进行及时更新,以降低从第一服务器中获取数据错误的情况发生。
可以理解的是:命中是指第一服务器可以正确反馈所述键对应的值。在本发明实施例中,判断单元12判断第一服务器是否命中键对应的值的方式包括但不限于下述任意一种:
判断第一服务器中是否有键对应的值,当第一服务器中有键对应的值时,确定第一服务器命中键对应的值;当第一服务器中没有键对应的值时,确定第一服务器未命中键对应的值。
或者
当第一服务器中有键对应的值时,判断键对应的值的第一有效时间与当前时间的差值是否大于预设时间差;当判断出键对应的值的第一有效时间与当前时间的差值大于预设时间差时,确定第一服务器命中键对应的值;当判断出键对应的值的第一有效时间与当前时间的差值小于等于预设时间差时,确定第一服务器未命中键对应的值,其中预设时间差可以依据不同应用进行设置,其以当前时间为基准用于指示第一服务器中每个键对应的值的有效时间,对于其具体取值本发明实施例并不加以限制。
又或者
当第一服务器中有键对应的值时,判断键对应的值的读取是否异常,其中读取是否异常可以包括:读取是否超时等。当判断出键对应的值的读取异常时,确定第一服务器命中键对应的值;当判断出键对应的值的读取正常时,确定第一服务器未命中键对应的值
又或者
当第一服务器中有键对应的值时,判断键对应的值的第一有效时间的类型转换是否正确,比如第一有效时间由字符型(string)转换为ptime时其转换是否正确,当转换正确时确定第一服务器命中键对应的值,当转换失败时确定第一服务器未命中键对应的值。其中ptime是引用boost库中的一个时间类型,boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一。
在这里需要说明的是:第一服务器中存储的键对应的值是第二服务器中选取的读取次数较高的值。例如一分钟内第二服务器中键为test的读取次数是100次,这就意味着存在大量重复读取test的应用,因此可以将其存储在作为本地服务器的第一服务器上,这样在每次读取test时可以直接从第一服务器上直接读取,而无需从远程的第二服务器中读取。
返回单元13,用于当第一服务器命中键对应的值时,返回键对应的值。
转发单元14,用于当第一服务器未命中键对应的值时,向第二服务器转发数据读取请求,用于触发第二服务器返回数据读取请求中携带的键对应的值。在本发明实施例中,第二服务器为与第一服务器进行交互的远程服务器,当第一服务器未命中键对应的值时,需要向第二服务器转发数据读取请求,以由第二服务器判断是否存储有数据读取请求中携带的键对应的值,并在判断出存储有数据读取请求中携带的键对应的值时,返回键对应的值。
并且上述第一有效时间可以依据第二服务器的情况动态调整,具体可以由数据读取装置中的调整单元15进行调整,如图4所示。其中调整单元在第二服务器异常的情况下提高第一有效时间,在第二服务器正常的情况下将第一有效时间恢复至初始值。具体过程如下:
在第二服务器异常的情况下,依据第二服务器查找到键对应的值的情况,提高第一有效时间,其中调整后的第一有效时间小于等于第二有效时间。在第二服务器正常的情况下,将第一有效时间逐渐恢复至第一有效时间的初始值。
在本发明实施例中第二服务器查找到键对应的值的情况是指成功查找到以及未成功查找到键对应的值的情况,第二服务器每接收到一次数据读取请求,则会对查找次数进行加一,并记录每次的查找情况是成功还是未成功,根据这些信息则可以调整第一有效时间。比如访问10次第二服务器,其中有5次不成功时,也就是50%的失败率,那么第一服务器中的第一有效时间由初始的5分钟变为了10分钟,其计算方法是:5min/0.5=10min,直到第一有效时间等于第二有效时间。其中第二服务器的失败率的计算方式为:失败率=失败的次数/总访问的次数。
从上述技术方案可以看出,本发明提供的上述技术方案,在接收到数据读取请求后,首先判断第一服务器中是否命中所述数据读取请求中携带的键对应的值,当第一服务器命中键对应的值时,返回键对应的值;当第一服务器中未命中键对应的值时,向第二服务器转发数据读取请求,用于触发第二服务器返回数据读取请求中携带的键对应的值,这样通过第一服务器和第二服务器相结合的方式可以降低对某一种服务器的依赖,从而降低某一种服务器异常时数据读取异常情况的发生。
并且第一服务器中每个键对应的值的第一有效时间依据第二服务器的情况进行动态调整,例如可以在第二服务器异常的情况下提高第一有效时间,在第二服务器正常的情况下,将第一有效时间逐渐恢复至初始值。即在第二服务器异常的情况下提高第一服务器中每个键对应的值的存储时长,这样在第二服务器异常的情况下,仍可以从第一服务器中读取每个键对应的值,以降低对第二服务器的依赖,从而降低第二服务器异常时数据读取异常情况的发生。在第二服务器正常的情况下逐渐将第一有效时间恢复至初始值,使第一服务器中每个键对应的值的存储时长逐渐降低,这样当第二服务器中的某个键对应的值发生变更时,第一服务器中某个键对应的值可以在尽可能短的时间内变更为与第二服务器中相同键对应的值,从而在尽可能短的时间内实现第一服务器和第二服务器内的数据同步。
此外,在获取到数据读取请求后,优先从第一服务器中查找,也就是说对于客户端的所有进程来说,相当于在第一服务器中为所有进程开辟一共享内存,提高同一个键的命中率并节省内存占用。与现有技术相比本发明实施例对于同一类型的进程,节省大约70%的内存占用。
此外,在图3基础上,本发明实施例提供的数据读取装置还包括:写入单元16,如图5所示。其中写入单元16用于在第二服务器中存储有键对应的值的情况下,写入第二服务器发送的键对应的值,并将写入键对应的值的时间确定为值的第一有效时间。在写入第二服务器发送的键对应的值时可以通过一专用进程来执行,即在第一服务器中开发一进程,该进程仅用于写入第二服务器发送的键对应的值。
之所以在第一服务器中开发一进程来写入第二服务器发送的键对应的值是因为:第一服务器和第二服务器所涉及的服务均是在线服务,在线服务通常要求低延迟,也就是说,第一服务器和第二服务器要以最快的速度响应每个请求,其响应时长不能超过1秒钟。在这种追求低延迟的服务架构中,不允许有非常耗时的操作存在,而刚好将数据写入到第一服务器中是一件比较耗时的事情,因此本发明实施例采用一进程来专门写入键对应的值到第一服务器中,以降低写入消耗的时间。
在写入值之后将写入值的时间确定为其第一有效时间。在本发明实施例中,第一有效时间的类型为string类型,其与键、值的格式为:键+值+空格+第一有效时间,即每个键对应的值位于键和第一有效时间之间,且第一有效时间和值之间间隔一空格,比如:键=123,值=abc,第一有效时间加在值后面,则变为:value(值)=abc 2015-05-1411:19。这种格式相对于采用Hash(哈希)算法记录方式来说,降低内存碎片数量,具体理由可以参阅方法实施例中的相关说明。
需要说明的是,本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。对于装置类实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
最后,还需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
对所公开的实施例的上述说明,使本领域技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
以上所述仅是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。
Claims (8)
1.一种数据读取方法,其特征在于,应用于第一服务器中,所述方法包括:
接收数据读取请求,其中所述数据读取请求中携带有至少一个键,所述键用于指示所述数据读取请求所要请求的数据;
依据所述数据读取请求,判断所述第一服务器中是否命中所述键对应的值,所述值为所述数据读取请求所要请求的数据,且每个键所对应的值分别具有第一有效时间,所述第一服务器具有第二有效时间,所述第一有效时间小于等于所述第二有效时间,所述第一有效时间用于指示所述键所对应的值在所述第一服务器中的存储时长,第二有效时间用于指示所述第一服务器中存储的所述键对应的值的最大存储时长;
当所述第一服务器命中所述键对应的值时,返回所述键对应的值;
当所述第一服务器未命中所述键对应的值时,向第二服务器转发所述数据读取请求,用于触发所述第二服务器返回所述数据读取请求中携带的所述键对应的值;
其中所述第一有效时间依据所述第二服务器的情况动态调整;
所述第一有效时间依据所述第二服务器的情况动态调整包括:在所述第二服务器异常的情况下,依据所述第二服务器查找到所述键对应的值的情况,提高所述第一有效时间,其中调整后的第一有效时间小于等于所述第二有效时间;
在所述第二服务器正常的情况下,将所述第一有效时间逐渐恢复至所述第一有效时间的初始值。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:在所述第二服务器中存储有所述键对应的值的情况下,写入所述第二服务器发送的所述键对应的值,并将写入所述键对应的值的时间确定为所述值的第一有效时间。
3.根据权利要求1所述的方法,其特征在于,所述判断所述第一服务器中是否命中所述键对应的值包括以下任意一种方式:
判断所述第一服务器中是否有所述键对应的值;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间与当前时间的差值是否大于预设时间差;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的读取是否异常;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间的类型转换是否正确。
4.根据权利要求1所述的方法,其特征在于,所述第一有效时间记录在所述键对应的值后,且所述第一有效时间和所述键对应的值间间隔一空格。
5.一种数据读取装置,其特征在于,应用于第一服务器中,所述装置包括:
接收单元,用于接收数据读取请求,其中所述数据读取请求中携带有至少一个键,所述键用于指示所述数据读取请求所要请求的数据;
判断单元,用于依据所述数据读取请求,判断所述第一服务器中是否命中所述键对应的值,所述值为所述数据读取请求所要请求的数据,且每个键所对应的值分别具有第一有效时间,所述第一服务器具有第二有效时间,所述第一有效时间小于等于所述第二有效时间,所述第一有效时间用于指示所述键所对应的值在所述第一服务器中的存储时长,第二有效时间用于指示所述第一服务器中存储的所述键对应的值的最大存储时长;
返回单元,用于当所述第一服务器命中所述键对应的值时,返回所述键对应的值;
转发单元,用于当所述第一服务器未命中所述键对应的值时,向第二服务器转发所述数据读取请求,用于触发所述第二服务器返回所述数据读取请求中携带的所述键对应的值;
其中所述第一有效时间依据所述第二服务器的情况动态调整;
调整单元,用于在所述第二服务器异常的情况下,依据所述第二服务器查找到所述键对应的值的情况,提高所述第一有效时间,其中调整后的第一有效时间小于等于所述第二有效时间,以及用于在所述第二服务器正常的情况下,将所述第一有效时间逐渐恢复至所述第一有效时间的初始值。
6.根据权利要求5所述的装置,其特征在于,所述装置还包括:写入单元,用于在所述第二服务器中存储有所述键对应的值的情况下,写入所述第二服务器发送的所述键对应的值,并将写入所述键对应的值的时间确定为所述值的第一有效时间。
7.根据权利要求5所述的装置,其特征在于,所述判断单元通过以下任意一种方式判断所述第一服务器中是否命中所述键对应的值:
判断所述第一服务器中是否有所述键对应的值;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间与当前时间的差值是否大于预设时间差;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的读取是否异常;
当所述第一服务器中有所述键对应的值时,判断所述键对应的值的第一有效时间的类型转换是否正确。
8.根据权利要求5所述的装置,其特征在于,所述第一有效时间记录在所述键对应的值后,且所述第一有效时间和所述键对应的值间间隔一空格。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510478357.5A CN105068762B (zh) | 2015-08-06 | 2015-08-06 | 一种数据读取方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201510478357.5A CN105068762B (zh) | 2015-08-06 | 2015-08-06 | 一种数据读取方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN105068762A CN105068762A (zh) | 2015-11-18 |
CN105068762B true CN105068762B (zh) | 2018-05-18 |
Family
ID=54498143
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201510478357.5A Active CN105068762B (zh) | 2015-08-06 | 2015-08-06 | 一种数据读取方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN105068762B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101634971A (zh) * | 2009-09-01 | 2010-01-27 | 威盛电子股份有限公司 | 数据预先提取方法及装置、计算机系统 |
CN103607312A (zh) * | 2013-11-29 | 2014-02-26 | 广州华多网络科技有限公司 | 用于服务器系统的数据请求处理方法及系统 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9747340B2 (en) * | 2008-06-19 | 2017-08-29 | Microsoft Technology Licensing, Llc | Method and system of using a local hosted cache and cryptographic hash functions to reduce network traffic |
-
2015
- 2015-08-06 CN CN201510478357.5A patent/CN105068762B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101634971A (zh) * | 2009-09-01 | 2010-01-27 | 威盛电子股份有限公司 | 数据预先提取方法及装置、计算机系统 |
CN103607312A (zh) * | 2013-11-29 | 2014-02-26 | 广州华多网络科技有限公司 | 用于服务器系统的数据请求处理方法及系统 |
Also Published As
Publication number | Publication date |
---|---|
CN105068762A (zh) | 2015-11-18 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US9817858B2 (en) | Generating hash values | |
US9026571B2 (en) | Random number generation failure detection and entropy estimation | |
US11429566B2 (en) | Approach for a controllable trade-off between cost and availability of indexed data in a cloud log aggregation solution such as splunk or sumo | |
US20130173540A1 (en) | Gathering transaction data associated with locally stored data files | |
WO2019024780A1 (zh) | 区块链轻量化处理方法、区块链节点及存储介质 | |
US20070061543A1 (en) | Method for a distributed column chunk data store | |
CN102156727A (zh) | 一种采用双指纹哈希校验的重复数据删除方法 | |
US10664481B2 (en) | Computer system programmed to identify common subsequences in logs | |
CN111309720A (zh) | 时序数据的存储、读取方法、装置、电子设备及存储介质 | |
WO2021155656A1 (zh) | 数据处理方法和装置、访问系统、电子设备和存储介质 | |
US11126751B2 (en) | Index creation for data records | |
CN104281533A (zh) | 一种存储数据的方法及装置 | |
US10067719B1 (en) | Methods and systems for storing and accessing data in a distributed data storage system | |
CN107103014A (zh) | 历史推送信息的重现方法、装置和系统 | |
US20210357466A1 (en) | Recording ledger data on a blockchain | |
CN105760467A (zh) | 一种数据实时读写方法、装置、系统及nfs服务器 | |
CN110413978B (zh) | 数据分页导出方法、装置、计算机设备和存储介质 | |
US11005648B2 (en) | Blockchain-type data storage | |
CN110489315A (zh) | 一种操作请求的跟踪方法、跟踪装置及服务器 | |
US20210133103A1 (en) | Data caching method and apparatus | |
US20100082674A1 (en) | System for detecting user input error | |
CN106991118A (zh) | 基于ceph纠删除容错的读取文件方法及装置 | |
US8856112B2 (en) | Considering document endorsements when processing queries | |
CN105068762B (zh) | 一种数据读取方法及装置 | |
CN113872994B (zh) | 组织架构同步方法、装置、计算机设备和存储介质 |
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 |