一种数据存储方法和装置制造方法及图纸

技术编号:8517324 阅读:220 留言:0更新日期:2013-03-30 20:22
本申请提供了一种数据存储方法和装置,其中的数据存储方法包括:在业务请求的处理过程中,依据数据库对象ID和线程ID生成键值,其中,所述线程ID为处理所述业务请求的线程ID;将所述键值和所述键值中数据库对象ID对应的对象数据进行关联,并存储至缓存。本申请在业务请求的处理过程中存储对象数据,以减少数据库访问次数,提高业务请求处理的并发性和效率。

【技术实现步骤摘要】

本申请涉及数据存储
,特别是涉及一种数据存储方法和装置
技术介绍
目前,一些在线应用程序在处理业务请求的过程中,通常需要动态从数据库读取响应记录然后进行逻辑处理。对于某些大规模的在线应用程序而言,一个业务请求通常会涉及到两个或多个模块的协同处理,这些模块在处理同一业务请求的时候很难避免多次从数据库重复读取对象数据。例如,某个业务请求需要模块I和模块2的协同处理,其中,模块I和模块2分别为不同的开发人员开发的模块,其提供的输入参数均是数据库对象ID(标识符,IDentity);这样,当这个业务请求的处理经过模块I的时候,模块I根据数据库对象ID从数据库读取对象数据,而当该处理经过模块2的时候,模块2又不得不从数据库再读取一次相同的对象数据。为了提高业务请求处理的效率,一种现有技术采用数据缓存机制,即在模块I读取数据完成后,将数据库对象ID和相应的对象数据关联存储至KV(键/值,Key/Value)Cache (缓存);这样,当该处理经过模块2的时候,模块2首先尝试从Cache中读取数据,如果读取成功则无需再从数据库中读取数据;该数据缓存机制能够减少在大量的数据库读取动作中因1/0(输入/输出,Input/Output)引起的资源消耗。但是,为了确保模块2从Cache中读取到的数据和数据库中数据的一致性,必须针对Cache采取加锁机制,否则模块2从该Cache读取到的数据可能是过时的和不一致的,从而导致模块2的处理结果错误。但是,这种加锁机制又会引发新的性能问题,因为一旦对该Cache申请了加锁,其它业务请求的处理不得不阻塞等待,直至该Cache被解锁或被释放,而所述阻塞等待会反过来影响业务请求处理的并发性和效率。
技术实现思路
本申请所要解决的技术问题是,提供一种数据存储方法和装置,其在业务请求的处理过程中存储对象数据,以减少数据库访问次数,提高业务请求处理的并发性和效率。为了解决上述问题,本申请一种数据存储方法,包括在业务请求的处理过程中,依据数据库对象ID和线程ID生成键值,其中,所述线程ID为处理所述业务请求的线程ID ;将所述键值和所述键值中数据库对象ID对应的对象数据进行关联,并存储至缓存。优选的,所述方法还包括在所述业务请求的处理过程中,如果需要用到某一数据库对象ID对应的对象数据,则依据该数据库对象ID和所述线程ID生成查找键值;依据所述查找键值在所述缓存中进行查找,若缓存命中,则返回与所述查找键值相应的对象数据,若缓存命不中,则依据所述查找键值中的数据库对象ID从数据库中读取相应的对象数据并返回。优选的,所述方法还包括在所述业务请求的处理过程中,如果对所述对象数据进行修改,则对所述缓存中存储的相同对象数据进行更新。优选的,所述方法还包括在所述业务请求的处理结束时,对所述缓存进行回收。优选的,所述方法还包括在所述业务请求的处理结束时,首先依据数据库对象ID,将所述缓存中存储的相应对象数据同步到数据库,然后对所述缓存进行回收。另一方面,本申请还公开了一种数据存储装置,包括键值生成模块,用于在业务请求的处理过程中,依据数据库对象ID和线程ID生成键值,其中,所述线程ID为处理所述业务请求的线程ID ;及存储模块,用于将所述键值和所述键值中数据库对象ID对应的对象数据进行关联,并存储至缓存。优选的,所述方法还包括查找键值生成模块,用于在所述业务请求的处理过程中,如果需要用到某一数据库对象ID对应的对象数据,则依据该数据库对象ID和所述线程ID生成查找键值;查找模块,用于依据所述查找键值在所述缓存中进行查找,若缓存命中,则触发返回模块,否则触发读取模块;返回模块,用于在缓存命中时,返回与所述查找键值相应的对象数据;读取模块,用于在缓存命不中时,依据所述查找键值中的数据库对象ID从数据库中读取相应的对象数据并返回。优选的,所述方法还包括更新模块,用于在所述业务请求的处理过程中,如果对所述对象数据进行修改,则对所述缓存中存储的相同对象数据进行更新。优选的,所述方法还包括第一回收模块,用于在所述业务请求的处理结束时,对所述缓存进行回收。优选的,所述方法还包括同步模块,用于在所述业务请求的处理结束时,依据数据库对象ID,将所述缓存中存储的相应对象数据同步到数据库;第二回收模块,用于在所述同步完成后,对所述缓存进行回收。与现有技术相比,本申请具有以下优点本申请在业务请求的处理过程中,依据数据库对象ID和线程ID生成键值(Key),并将所述键值和所述键值中数据库对象ID对应的对象数据(Value)进行关联,存储至缓存。首先,对于处理业务请求的线程而言,其具有唯一的线程ID,故本申请的存储使得各业务请求的处理具有各自不同的、相互独立和相互隔离的Cache地址空间,对于当前业务请求而言,则能够避免其它业务请求对自身Cache地址空间的干扰,在不加锁的情况下,也能够确保当前业务请求的后续处理从Cache中读取到的数据和数据库中数据的一致性。其次,由于各业务请求的处理具有各自不同的相互独立和相互隔离的Cache地址空间,这样,多个业务请求的处理线程不再共享Cache地址空间,也就能够避免Cache地址空间请求失效,以及不得不阻塞等待直至该Cache被解锁或被释放的情况,所以本申请不会影响业务请求处理的并发性和效率。再者,针对一些在线应用程序的中间计算结果是不能被简单的清除掉的特性,本申请在所述业务请求的整个处理过程中,还可以将针对对象数据进行的所有修改都存储在缓存中,由于后续处理能够用到前序处理的结果数据,因此,能够在一个业务请求的处理生命周期里始终保证该块缓存的可用性,既能够保证对象数据在内存中的可用性,又能够保证内存的及时回收。附图说明图1是本申请一种数据存储方法实施例的流程图;图2是本申请一种在线应用程序在业务请求的处理过程中使用Memcached缓存对象数据的流程图;图3是本申请一种数据存储装置实施例的结构图。具体实施例方式为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。在线应用程序通常会收到很多并发的业务请求,为了提高业务请求处理的并发性和效率,其往往分配多个线程去并发执行这些业务请求;这些多线程看上去似乎在并行执行它们各自的工作,但实际上这些多线程共享地址空间,也即,多个线程能够读写相同的变量或数据结构。这样,在业务请求I的处理过程中,如果不申请加锁,则Cache中存储的对象数据会被其它业务请求共享,而一旦其它业务请求修改了 Cache中存储的对象数据,则业务请求I的后续处理(如模块2)从Cache读取到的数据可能是过时的,和数据库中数据相比不一致的。本申请实施例的核心构思之一在于,将各业务请求的Cache地址空间隔离开来,具体而言,在业务请求的处理过程中,依据数据库对象ID和线程ID生成键值,将所述键值和所述键值中数据库对象ID对应的对象数据进行关联,并存储至缓存。由于各业务请求的处理具有各自不同的、独立的Cache地址空间,对于当前业务请求而言,能够避免其它业务请求对自身Cache地址空间的干扰,不仅能够确保当前业务请求的后续处理从Cache中读取到的数据和数据库中数据的一致性,而且能够避免加锁带来的性能问题。参照图1,其示出本文档来自技高网
...

【技术保护点】
一种数据存储方法,其特征在于,包括:在业务请求的处理过程中,依据数据库对象ID和线程ID生成键值,其中,所述线程ID为处理所述业务请求的线程ID;将所述键值和所述键值中数据库对象ID对应的对象数据进行关联,并存储至缓存。

【技术特征摘要】

【专利技术属性】
技术研发人员:佘智勇
申请(专利权)人:阿里巴巴集团控股有限公司
类型:发明
国别省市:

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1