一种脏数据更新方法及装置与流程

文档序号:11134075阅读:402来源:国知局
一种脏数据更新方法及装置与制造工艺

本申请涉及计算机技术领域,尤其涉及一种脏数据更新方法及装置。



背景技术:

随着计算机技术的不断发展,越来越多的软件和系统都使用面向对象语言进行开发,如,大规模Web系统的开发一般都使用面向对象语言进行开发。

目前,由于使用大规模Web系统的用户数量比较巨大,并且存储数据的磁盘的读写性能低下,这样势必会导致服务器负载特别高,因此,需要使用内存作为缓存来提高整个大规模Web系统的性能,并且,建立面向对象缓存系统用于将向缓存中存入大规模Web系统的数据以及从缓存中获取数据并提供给大规模Web系统。

整个数据存入的过程如图1所示,大规模Web系统101通过外部接口102将需要写入的数据以及该数据对应的标识(即,键值)传输给面向对象缓存系统103,面向对象缓存系统103将要写入的数据序列化为字节流,根据该数据对应的标识将序列化成字节流的该数据写入到缓存104中,再将该数据存入到数据库105中。而整个数据获取的过程如图1所示,大规模Web系统101将待获取的数据对应的标识(如,键值)通过外部接口102传输给面向对象缓存系统103,面向对象缓存系统103直接根据该数据对应的标识,先从缓存104中确定是否存在该标识对应的已经序列化的数据,如果存在,则将确定出的字节流反序列化成数据并通过外部接口102提供给大规模Web系统101,如果不存在,直接从数据库105中确定该标识对应的数据,并通过外部接口102提供给大规模Web系统101。

在实际应用中,大规模Web系统对应的服务器上的服务需要不断升级,而升级的时候有可能会更改数据库中存储的数据的数据结构,如,增加某数据的属性,但是,该数据在缓存中依然不变,这样会产生脏数据(也就是说,针对任一数据,在缓存中的该数据与数据库中的该数据在数据结构上不一致,则该数据为脏数据),而后续,由于在将数据提供给大规模Web系统时,是需要先读取缓存中数据,因此,可能会将脏数据通过外部接口提供给大规模Web系统,这样势必会使得大规模Web系统无法根据脏数据对外提供服务,也就是服务无法正常运行。

为了能够使得服务能够正常的运行,在现有技术中,当数据库中的数据的数据结构发生更改,如,针对某数据,增加了该数据的属性,需要将缓存中的数据全部清空,这样外部系统(如,大规模Web系统)在获取该数据时,直接访问数据库并从数据库中获取,如果访问量巨大时,势必会造成数据库由于压力过大而导致服务崩溃的问题。



技术实现要素:

本申请实施例提供一种脏数据更新方法及装置,用以解决现有技术中当访问量巨大时,势必会造成数据库由于访问量巨大使得压力过大而导致服务崩溃的问题。

本申请实施例提供一种脏数据更新方法,包括:

获取对象的属性名以及键值;

根据对象的属性名,对缓存中的与键值对应的数据进行识别;

根据对象的属性名识别缓存中的与键值对应的数据为脏数据时,根据键值从数据库中获取所述键值对应的数据;

根据从数据库中获取到的所述键值对应的数据,对缓存中的数据进行更新。

优选地,根据获取到的对象的属性名,在缓存中访问属性名对应的属性,当获取到的对象的至少一个属性名在缓存中访问不到对应的属性时,确定缓存中的与键值对应的数据为脏数据。

优选地,调用getattr方法,从数据库中获取所述键值对应的数据。

优选地,将从数据库中获取到的所述键值对应的数据替换掉所述缓存中该键值对应的数据。

优选地,将从数据库中获取到的所述键值对应的数据构造成对象,并将该对象序列化为字节流,根据所述键值,在缓存中确定该键值对应的数据,将序列化字节流后的数据替换掉在缓存中确定出的该键值对应的数据。

本申请实施例提供一种脏数据更新装置,包括:

第一获取模块,用于获取对象的属性名以及键值;

脏数据确定模块,用于根据对象的属性名,对缓存中的与键值对应的数据进行识别;

第二获取模块,用于根据对象的属性名识别缓存中的与键值对应的数据为脏数据时,根据键值从数据库中获取所述键值对应的数据;

更新模块,用于根据从数据库中获取到的所述键值对应的数据,对缓存中的数据进行更新。

优选地,所述脏数据确定模块具体用于,根据获取到的对象的属性名,在缓存中访问属性名对应的属性,当获取到的对象的至少一个属性名在缓存中访问不到对应的属性时,确定缓存中的与键值对应的数据为脏数据。

优选地,所述第二获取模块具体用于,调用getattr方法,从数据库中获取所述键值对应的数据。

优选地,所述更新模块具体用于,将从数据库中获取到的所述键值对应的数据替换掉所述缓存中该键值对应的数据。

优选地,所述更新模块具体用于,将从数据库中获取到的所述键值对应的数据构造成对象,并将该对象序列化为字节流,根据所述键值,在缓存中确定该键值对应的数据,将序列化字节流后的数据替换掉在缓存中确定出的该键值对应的数据。

本申请实施例提供一种脏数据更新方法及装置,该方法首先获取对象的属性名以及键值,根据对象的属性名,对缓存中的与键值对应的数据进行识别,根据对象的属性名识别缓存中的与键值对应的数据为脏数据时,根据键值从数据库中获取该键值对应的数据,根据从数据库中获取到的该键值对应的数据,对缓存中的数据进行更新。通过上述方法,即使缓存中存在脏数据,也不用再清空缓存,而是对缓存中的脏数据进行识别,并对识别出的脏数据进行平滑更新,这样可有效的解决数据库由于访问量巨大使得压力过大而导致服务崩溃的问题。

附图说明

此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:

图1为本申请实施例提供的一种现有技术中存入和获取数据的过程示意图;

图2为本申请实施例提供的一种脏数据更新的过程示意图;

图3为本申请实施例提供的一种脏数据更新装置的结构示意图。

具体实施方式

为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。

图2为本申请实施例提供的脏数据更新过程,具体包括以下步骤:

S201:获取对象的属性名以及键值。

在实际应用中,有些对外提供服务的系统通常都会使用面向对象语言进行开发,如,大规模Web系统的开发使用的就是面向对象语言进行开发的。

而使用面向对象语言进开发的系统在从缓存或数据库中存储和获取数据时,都是以对象为整体进行存储和读取的,也就是说,将数据作为一个对象,并对该对象包含的数据进行存储和获取,对象中可包含一个数据,也可以包含多个数据,每个对象包含多少数据是可以预先定义的。所述对象为要执行或操作的任何事物,可以表示具体的事物,也可以表示抽象的事物,如,规则,并且,由于属性能够描述刻画一个对象,因此,每个对象都是有各自的属性的,如,售卖的苹果是一个对象,苹果有颜色:红色、重量:0.5千克这两个属性,而每个属性均包含属性名和属性值,如,苹果的颜色为红色,重量为0.5千克,则颜色以及重量为属性的属性名,而红色以及0.5千克为属性的属性值。

进一步的,为了方便外部系统对存储在缓存或者数据库中的对象,因此,在缓存或数据库中存储对象的过程中,会为该对象确定一个键值,也就是说,为该对象确定一个唯一的标识,通过该键值能够唯一确定出该对象。

由于键值只是能够确定出需要获取哪个对象对应的数据,而具体需要获取该对象中的哪个属性(其中,所述属性包含属性名和属性值)时是由属性名决定的,因此,在本申请中,外部系统为了对外提供服务而在缓存中获取对象时,需要将待获取对象的属性名以及键值通过外部接口传输给面向对象缓存系统,面向对象缓存系统在获取到对象的属性名以及键值后,可直接根据对象的属性名以及键值去缓存中查询。

例如,某仓储系统用于对外提供查询服务,仓储系统此刻接收到用户输入的查询对象:苹果,假设原先苹果对应的键值为:XX,苹果包含两个属性,颜色:红色以及重量:0.5千克,后续,根据实际需求在数据库中将苹果(对象)对应的数据进行了更改(即,对苹果对应的属性进行了更改),在原来两个属性的基础之上增加一个属性:价格1RMB,但是缓存中的苹果对应的属性还是原来的两个属性,因此,仓储系统将苹果对应的键值(即,XX)以及苹果的三个属性名(颜色、重量和价格)通过外部接口传输给面向对象缓存系统,面向对象缓存系统在接收到仓储系统传输的苹果对应的三个属性名以及键值后执行步骤S202。

S202:根据对象的属性名,对缓存中的与键值对应的数据进行识别。

S203:根据对象的属性名识别缓存中的与键值对应的数据为脏数据时,根据键值从数据库中获取所述键值对应的数据。

由于在实际应用中,外部系统对应的服务器上的服务需要不断升级,而升级的时候有可能会更改数据库中存储的某对象对应的数据的数据结构,如,增加某对象的属性,但是,该对象对应的数据在缓存中依然不变,这样会产生脏数据(也就是说,针对任一数据,在缓存中的该数据与数据库中的该数据在数据结构上不一致,则该数据为脏数据),而在本申请中,属性缺失的对象所对应的数据即为脏数据,并且,属性缺失的对象是无法通过外部接口直接提供给外部系统的,需要通过特定的方式去继续查询缺少的属性所对应的数据,因此,在本申请中,面向对象缓存系统在获取到外部系统通过接口传输的对象的属性名和键值后,需要根据对象的属性名,对缓存中的与键值对应的数据进行识别,确定缓存中的与键值对应的数据是不是脏数据。

进一步的,由于在缓存中存储对象对应的数据中包含对象的属性名,因此,本申请提供了一种根据对象的属性名来识别缓存的数据为脏数据(即,属性缺失的对象)的方法,具体的,可以根据对象的键值,在缓存中查询该键值对应的对象,也就是说,查询该键值对应的数据,在查询出该键值对应的数据(也即,该键值对应的对象的数据)后,则根据获取到的对象的属性名,在缓存中访问属性名对应的属性,当获取到的对象的至少一个属性名在缓存中访问不到对应的属性时(也即,属性缺失),其中,所述属性包括属性名和属性值,确定缓存的与键值对应的数据为脏数据。

在此需要说明的是,如果识别出的数据不是脏数据,则直接在该键值对应的数据中确定属性名对应的属性,将查询到的属性数据对应的字节流反序列化为相应的包含数据的对象,并将该包含数据的对象通过外部接口返回给外部系统。

进一步的,由于通常情况下,如果出现属性缺失是因为数据库中的数据的数据结构被更改,如,增加了某对象的属性,而被更改的数据在缓存中却依然不会改变,也就是说,数据库中的数据的数据结构是全的,也是最新的、正确的,因此,在本申请中,当出现属性缺失(即,脏数据)这种情况,需要通过特定的方式去继续查询缺少的属性所对应的数据时,具体查询方式直接调用getattr方法,从数据库中获取该键值对应的数据,在此着重强调在本申请中,该getattr方法可以实现从数据库中获取该键值对应的数据的功能。

在此需要说明的是,在从数据库中获取数据时,可只获取所缺失的属性对应的数据,也可以将键值对应的对象包含的数据全部获取到。

延续上例,面向对象缓存系统首先根据键值在缓存中查询苹果对应的数据,在缓存中根据键值:XX,查询到苹果对应的数据“颜色:红色,重量:0.5千克”,并根据获取到的苹果(即,对象)的“颜色、重量以及价格”这三个属性名,在缓存中访问属性名对应的属性,确定获取到的对象的至少一个属性名在缓存中访问不到对应的属性时(也即,缓存中不存在价格这一属性对应的属性名和属性值,也就是属性缺失),确定缓存的与键值“XX”对应的数据为脏数据,调用getattr方法,从数据库中获取该键值:XX对应的数据“颜色:红色、重量0.5千克以及价格1RMB”。

S204:根据从数据库中获取到的所述键值对应的数据,对缓存中的数据进行更新。

在本申请中,为了能够使外部系统继续能在缓存中查找到数据,而不是去数据库中查找到数据,以此降低数据库的运行压力,因此,在通过特定的方式获取到所述键值对应的对象所包含的所有数据后,可根据该键值对应的所有数据,对缓存中的数据进行更新。

具体可以将从数据库中获取到的该键值对应的数据替换掉该缓存中该键键值对应的数据,在此需要说明的是,可只替换缺失的属性对应的数据,也可以,将键值对应的所有数据整体替换掉缓存中该键值对应的所有数据。

进一步的,在将数据库中获取到的该键值对应的数据替换掉缓存中该键值对应的数据的过程中,需要将从数据库中获取到的该键值对应的数据构造成对象,并对该对象序列化字节流,并根据该键值,在缓存中确定出该键值对应的数据,将序列化字节流后的数据替换掉在缓存中确定出的该键值对应的数据。

继续沿用上例,在数据库中获取到键值:XX对应的数据后,将数据“颜色:红色、重量0.5千克以及价格1RMB”构造成对象,并将该对象序列化为字节流,并根据该键值:XX,在缓存中确定出该键值:XX对应的数据“颜色:红色、重量:0.5千克”,将序列化字节流后的数据“颜色:红色、重量0.5千克以及价格1RMB”替换掉在缓存中确定出的该键值对应的数据“颜色:红色、重量:0.5千克”。

通过上述方法,即使缓存中存在脏数据,也不用再清空缓存,可对缓存中的脏数据进行识别,并对识别出的脏数据进行平滑更新,这样可有效的解决数据库由于压力过大而导致服务崩溃的问题。

以上为本申请实施例提供的脏数据更新方法,基于同样的思路,本申请实施例还提供一种脏数据更新装置。

如图3所示,本申请实施例提供的一种脏数据更新装置,包括:

第一获取模块301,用于获取对象的属性名以及键值;

脏数据确定模块302,用于根据对象的属性名,对缓存中的与键值对应的数据进行识别;

第二获取模块303,用于根据对象的属性名识别缓存中的与键值对应的数据为脏数据时,根据键值从数据库中获取所述键值对应的数据;

更新模块304,用于根据从数据库中获取到的所述键值对应的数据,对缓存中的数据进行更新。

所述脏数据确定模块302具体用于,根据获取到的对象的属性名,在缓存中访问属性名对应的属性,当获取到的对象的至少一个属性名在缓存中访问不到对应的属性时,确定缓存中的与键值对应的数据为脏数据。

所述第二获取模块303具体用于,调用getattr方法,从数据库中获取所述键值对应的数据。

所述更新模块304具体用于,将从数据库中获取到的所述键值对应的数据替换掉所述缓存中该键值对应的数据。

所述更新模块304具体用于,将从数据库中获取到的所述键值对应的数据构造成对象,并将该对象序列化为字节流,根据所述键值,在缓存中确定该键值对应的数据,将序列化字节流后的数据替换掉在缓存中确定出的该键值对应的数据。

在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。

内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。

计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。

还需要说明的是,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、商品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、商品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、商品或者设备中还存在另外的相同要素。

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

以上所述仅为本申请的实施例而已,并不用于限制本申请。对于本领域技术人员来说,本申请可以有各种更改和变化。凡在本申请的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本申请的权利要求范围之内。

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