CN101981545A - 用于事务缓存的系统和方法 - Google Patents
用于事务缓存的系统和方法 Download PDFInfo
- Publication number
- CN101981545A CN101981545A CN2009801117132A CN200980111713A CN101981545A CN 101981545 A CN101981545 A CN 101981545A CN 2009801117132 A CN2009801117132 A CN 2009801117132A CN 200980111713 A CN200980111713 A CN 200980111713A CN 101981545 A CN101981545 A CN 101981545A
- Authority
- CN
- China
- Prior art keywords
- affairs
- buffer memory
- cache
- work space
- mapping
- 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.)
- Granted
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0811—Multiuser, multiprocessor or multiprocessing cache systems with multilevel cache hierarchies
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0806—Multiuser, multiprocessor or multiprocessing cache systems
- G06F12/0842—Multiuser, multiprocessor or multiprocessing cache systems for multiprocessing or multitasking
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F12/00—Accessing, addressing or allocating within memory systems or architectures
- G06F12/02—Addressing or allocation; Relocation
- G06F12/08—Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
- G06F12/0802—Addressing of a memory level in which the access to the desired data or data block requires associative addressing means, e.g. caches
- G06F12/0844—Multiple simultaneous or quasi-simultaneous cache accessing
- G06F12/0846—Cache with multiple tag or data arrays being simultaneously accessible
- G06F12/0848—Partitioned cache, e.g. separate instruction and operand caches
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Memory System Of A Hierarchy Structure (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种支持事务缓存服务的计算机实现的方法和系统包含:配置与一个或多个事务和一个或多个工作空间相关联的事务缓存;在事务装饰器中维持该一个或多个事务与该一个或多个工作空间之间的内部映射;获取具有一个或多个操作的事务;利用事务装饰器中的内部映射找到用于该事务的工作空间;以及向与该事务相关联的工作空间应用该事务的一个或多个操作。
Description
版权声明
本专利文件的一部分公开包含受著作权保护的材料。如出现在专利商标局专利记录档案中,著作权拥有人并不反对复制专利文件或专利公开内容,否则著作权拥有人保留对其的任何著作权。
优先权声明
本申请权利要求2008年1月31日提交的名为SYSTEM AND METHOD FOR TRANSACTIONAL CACHE的美国临时专利申请No.61/025,176;2008年1月31日提交的名为SYSTEM AND METHOD FOR DISTRIBUTED CACHE的美国临时专利申请No.61/025,165;2008年1月31日提交的名为SYSTEM AND METHOD FOR TIERED CACHE的美国临时专利申请No.61/025,171;2008年1月31日提交的名为SYSTEM AND METHOD FOR MUTABLE OBJECT HANDLING的美国临时专利申请No.61/025,185,其公开内容通过引用结合于此。
技术领域
本发明一般涉及缓存服务领域,且尤其涉及分布式缓存。
背景技术
缓存是指在软件系统中为获得更高的性能而临时存储记录的拷贝。缓存由条目池(pool of entries)组成。每个条目具有数据(数据块),这些数据是一些后备存储器中数据的拷贝。每个条目还具有标签,该标签指定在后备存储器中的条目为拷贝的数据的身份。当缓存客户端(CPU、网络浏览器、操作系统)希望访问可推测在后备存储器中的数据时,它首先检查缓存。如果可以找到具有与所需数据的标签匹配的标签的条目,则使用该条目中的数据作为替代。这种情形已知为缓存命中。所以,例如,网络浏览器程序可以检查硬盘上的本地缓存以查看它是否具有特定URL的网页内容的本地拷贝。在该示例中,URL是标签,且网页内容是数据。导致缓存命中的访问百分比已知为缓存的命中率或命中比例。在备选情形中,当查询缓存且发现不包含具有所需标签的数据时,已知为缓存缺失。在缺失处理中从后备存储器获取的数据通常插入到缓存中,准备用于下一次访问。
附图说明
图1是根据本发明的一个实施例的缓存系统的示例性说明。
图2是根据本发明的一个实施例的分层缓存的示例性说明。
图3是根据本发明的一个实施例的分布式缓存的示例性框架的说明。
图4是根据本发明的一个实施例的用于弱一致性复制缓存的缓存更新操作的示例性说明。
图5是根据本发明的一个实施例的用于同步弱一致性复制缓存的陈旧缓存条目操作的示例性说明。
图6是根据本发明的一个实施例的用于弱一致性复制缓存的针对节点关闭操作的缓存更新的示例性说明。
图7是根据本发明的一个实施例的用于强一致性复制缓存的变异运算(mutation operation)序列的示例性说明。
图8是根据本发明的一个实施例的用于强一致性复制缓存的附属操作序列的示例性说明。
图9是根据本发明的一个实施例的用于事务缓存的示例性框架的说明。
图10是根据本发明的一个实施例的用于可变对象处理的示例性框架的说明。
具体实施方式
通过在附图中举例而非限制的方式说明本发明,附图中相似的附图标记表示相似的元件。应当注意,本公开中的“一”或“一个”或“一些”实施例并不一定表示相同的实施例,且这些引用表示至少一个。
缓存是指在软件系统中为获得更高的性能而临时存储记录的拷贝。可以通过减小对数据的原始记录的访问次数实现性能提升,这可能涉及创建原始记录时的数据库访问或计算密集的操作,或者它可以是对访问来说(在资源方面)昂贵的其他信息源。通过在一个进程、多个进程以及可能跨在多个机器上分布的进程中在线程上共享这种缓存对象,也可以实现性能提升。与之相连的是提供各种缓存特征——增强诸如事务、分区缓存的缓存存取特征以及诸如复制的可用性特征。
本发明的一个实施例是可以在Java应用中部署和使用的用于静态和动态Java对象的缓存系统。尽管该缓存系统可以与比如J2EE容器中存在的特征相结合,本发明不强制要求J2EE容器的存在以使用Java缓存系统。
根据一个实施例,缓存是被缓存对象的命名容器。缓存系统或缓存空间具有一个或多个这种容器。缓存可以从缓存系统重载一些属性。在一个示例中,缓存主要向用户呈现java.util.Map接口。
对象明确地布置在缓存(cache aside caches,旁路缓存)中或者在访问与缓存相关的键时暗示地布置在缓存中(cache-through caches,贯穿缓存)。在一些情况中,缓存的对象可以由特定键识别。
缓存键是在缓存容器内用来引用缓存对象的键。键是重载针对对象定义的hashCode( )和equals( )方法的Java对象。它们还是用于支持查询(queries)和留存(persistence)的可序列化和可比较接口。java.lang.String类型的对象被典型地使用。
根据一个实施例,缓存键针对非本地的缓存对象是可序列化的。键的类可以重载java.lang.Object类的hashCode( )和equals( )方法。基本类型也可以用作缓存键。
图1是根据本发明的一个实施例的缓存系统的示例性说明。
根据一个实施例,区域110a或110b是缓存内的容器。它可以提供缓存100中的分层对象存储。区域110a和110b可以重载一些缓存属性(比如范围)。区域110a可以具有子区域或缓存对象110c。
根据一个实施例,为了实现复杂事件处理,一组缓存对象可以被分组。分组允许对相关对象自动执行某些缓存行为,诸如缓存失效。缓存失效是由于对缓存对象的更新或从缓存去除缓存对象而使得缓存对象失效的行为。
例如,组对象的失效使得从属于该对象的所有对象都失效。类似地,在贯穿缓存中,如果被缓存的对象不存在其它依赖性,则组用于使得所有相关缓存对象无效(fault-in)。在另一示例中,组对象被限制为仅在容器缓存对象内具有依赖性。
根据一个实施例,应用域无关缓存配置。在一个示例中,域无关缓存配置是配置分布式缓存的集群的域无关方式。另外,具有一个域范围内分布的缓存也是有用的,其可以不限制分布式缓存为集群。缓存服务还利用不同的安全措施。作为实现缓存的安全性的一个步骤,修改API以基于角色限制对于缓存的访问是有用的。本发明的一个实施例可以利用OpenJPA中的缓存实现方式。
根据一个实施例,缓存管理器101是缓存服务的控制器。缓存服务通过具有动态管理和支配设备的永久配置描述。初始化时,缓存管理器101创建配置后的缓存且初始化它们。缓存管理器提供的生命周期服务可以类似于应用服务器中的服务器服务,但是它们被独立地定义以避免对于这种应用服务器的依赖性。
缓存管理器101提供配置、管理、支配和性能监控服务。缓存管理器101还可以为比如许可和缓存会话的辅助服务提供支持。缓存管理器101的另一重要方面是作为一个整体进行容量管理和实施缓存服务的各种标准属性。
根据一个实施例,会话可以提供视图管理和隔离。在一个示例中,一直到会话结束之前,在会话104内完成的对缓存对象的更新都并不传播。会话104还可以异常结束,意味着没有做出对缓存的其他用户可见的会话语境内的更新。会话104本质上可以提供缓存更新的批处理。
除会话支持之外,缓存服务还提供事务支持以管理缓存中的对象。缓存事务通过由事务缓存暴露的方法手动控制或者通过Java事务API(JTA)自动控制。在一个示例中,事务105内做出的变化根据所配置的隔离等级被充分隔离。提交可以是原子的、一致的和可持久的。回滚可以被充分支持且可以不影响缓存的完整性。
根据一个实施例,缓存映射(Cache Map)103是缓存的基本接口。作为示例,缓存映射103是基于映射的接口。像监控和存储意识性这样的附加功能性可以添加到缓存映射103。
在一个示例中,在用户所关心的范围内,缓存可以仅是java.util.Map。该Map从配置推导其属性。例如,如果该Map被配置成要被复制,则对该Map的所有更新被传播到集群中的其他节点。可以支持所有映射操作。缓存的典型用法如下所示:
清单-1:典型的CacheMap用法
在一些示例中,本地缓存不需要可序列化的键或值。像复制和分区缓存的其他形式要求可序列化的缓存条目。在一个示例中,缓存API的用户可以通过利用缓存管理器提供的如下操作来获得缓存实例:
清单-2:CacheMap查找
在另一示例中,缓存可以通过缓存管理器101创建。在一个示例中,缓存管理器101具有下面的创建方法:
清单-3:缓存创建
该方法允许客户传递一组名称-值对且基于此构建缓存实例。
根据一个实施例,存在用于缓存管理的两个接口。CacheFactory可用于创建系统中的新缓存。CacheManager对于在系统中查找缓存是有用的。Cache和CacheEntry是JCache的两个主要工件。它们扩展Map&Map.Entry接口以提供额外缓存相关的API。
根据一个实施例,可以扩展API以提供增强的功能性。例如,可以向缓存添加额外API以帮助用户获得关于该缓存的统计、改变行为且监听变化。在本发明的一个实施例中,CacheStatistics提供缓存实例的各种统计。另外,用户可以使用CacheListener接口的实现来监听缓存的变化。用户还可以插入CacheLoader的实现来指定在缓存中没有发现被查找的键时该怎样载入缓存条目。用户还可以指定定制EvictionStrategy来定义如何从缓存删去缓存条目。而且,CacheException可用于表示缓存使用中的问题和例外条件。
根据一个实施例,缓存映射103是Map的实例。除了通过Map接口支持的基本CRUD操作之外,下面的操作对于缓存映射用户是可用的。
(1)如果缺少,则输入
(2)去除
(3)替代
(4)将键集合载入到缓存
根据一个实施例,缓存映射103提供附加的操作以检索包括以下信息的监控数据:
(1)缓存命中&缺失
(2)存储器中的元素计数
(3)清除统计且再度开始监控
(4)检查是否当前通过缓存装载器装载键
根据一个实施例,也可以在单个缓存条目等级展现监控信息。然而,该信息可能不需要在跨Java虚拟机(JVM)的缓存实例之间共享。例如,可用的缓存条目等级统计是:
(1)创建时间
(2)过期时间
(3)命中数
(4)最后访问时间
(5)最后更新时间
(6)当前状态(有效或过期)
根据一个实施例,缓存映射103还展现如下管理操作:
(1)立即驱除过期元素
(2)清洗所有缓存条目到持久存储器
(3)在开始操作之前引导/初始化缓存
(4)关闭缓存的本地实例,由此从内存清除元素到持久存储器
(5)强制关闭缓存的所有实例。该操作的效果与本地缓存的规则关闭相同。对于分布式缓存,这还关闭该缓存的远程实例。
(6)在给定缓存中锁定/解锁键的能力。如果该缓存是分布式的,锁定缓存中的键将给予跨分区的缓存条目排他的访问。锁操作将采用超时参数,该超时参数指定时间期以等待实现锁定。
(7)注册和注销事件监听器的能力
根据一个实施例,缓存管理器101是缓存的工厂(factory)和注册表。缓存管理器101还可以支持下面的缓存管理操作:
(1)查找:给定缓存名称,返回缓存。
(2)列表:获取所有创建的缓存的列表。
(3)启动:利用配置文件创建缓存。
(4)关闭:关闭本地JVM中的所有缓存。
(5)强制关闭:强制关闭本地JVM中的所有缓存实例。而且还关闭其他JVM上的实例。
(6)缓存生命周期监听器:附加缓存创建和关闭监听器。
(7)缓存时间监听器:向所有注册了且尚未创建的缓存附加监听器。
根据一个实施例,缓存管理器实例被创建且对于比如WebLogic Server(WLS)的被管理环境可用。然而,在用于不被管理的环境的另一实施例中,利用缓存管理器工厂创建缓存管理器。该工厂是用于创建缓存管理器的无状态JVM单例(singleton)。
清单-4:CacheManager创建
根据一个实施例,客户实现EventListener接口以获得缓存变化通知。注意,事件监听器需要与缓存并置。缓存事件监听器可以不远程注册。
根据本发明的一个实施例,当底层缓存变化时生成变化事件。事件监听器可应用于下列事件。
(1)输入
(2)更新
(3)删除
(4)将条目调页到临时存储器
(5)从后备存储器载入键
(6)向后备存储器存储条目
根据一个实施例,该事件返回已经改变的一组缓存值。该组中的每个元素可包含以下信息:
(1)对缓存的引用
(2)键
(3)改变的时间
(4)更新的类型
根据一个实施例,在变化事件中可以不返回缓存值。可以这样做以改善性能且保留数据传输带宽。
清单-5:监听器注册
根据一个实施例,针对需要异步处理事件监听器的某些系统实现异步事件监听器。针对这种情况提供称为异步监听器的工具类。这种事件监听器可以是用于包装任意客户端事件监听器的装饰器(decorator)。
缓存载入器102是在启动或缓存缺失故障中可用于填充缓存的外部信息源。
根据一个实施例,缓存载入器102是实现CacheLoader接口的用户定义的类。如果配置,缓存载入器102被调用以在有缓存缺失时载入缓存条目。在一个示例中,缓存载入器102可仅在缓存创建时被配置。
根据一个实施例,缓存载入器102不做出关于调用线程的任何假设。它可以从用户线程调用或者可以异步调用。缓存载入器102实现下面的方法:
(1)给定一个键的情况下载入值
(2)给定键的集合的情况下载入多个值
根据一个实施例,存在很多方法在自加载缓存中调用缓存载入器:
(1)直读(Read Through):在直读自加载缓存时,当做出用于键的第一请求时调用载入器。在载入器试图从后备存储器获得条目时,该请求阻断。同时,如果其他线程做出对于相同键的请求,它们也可以被阻断。
(2)后读(Read Behind):如果键不在后读缓存中存在,对于Map.get( )的调用立即返回空。在单独的线程中,缓存载入器被调用且它试图载入值。同时,如果其他线程试图对相同的键调用Map.get( ),则它们也可以获得空值。然而,在这种情况下,不产生新的缓存加载线程。这通过维持载入的键的内部列表完成。可以利用缓存映射的监控API查询该列表。
根据一个实施例,缓存存储是实现CacheStore接口的用户定义的类。在一个示例中,缓存存储仅在创建时配置。用户定义的类用于使改变持续,只要缓存值更新。在一个实例中,缓存存储不做出哪个线程征调用它的任何假设。它可以从用户线程调用或者可以异步调用。缓存存储实现下面的方法:
(1)存储键值对。
(2)存储键值对的映射。
(3)从存储去除键。
(4)从存储去除键的集合。
根据一个实施例,定义写策略。有三种不同的方法可以向后备存储器写入脏条目。
(1)直写:直写策略表示同步向后备存储器写入条目。
(2)后写:在后写方案中,更新条目异步地写入到后备存储器。
(3)回写:使用回写的写入策略,脏条目不在后备存储器中更新,直到它从缓存被驱除。
根据一个实施例,当使用缓存会话时,向后备存储器的写操作被批处理。
另一方面,驱除测策略处理三种问题:
(1)何时从缓存驱除条目?
(2)哪些条目被驱除?
(3)驱除到哪里?
何时驱除条目可以由缓存的大小决定。客户设置缓存中内存中条目的数目限制。一旦到达该限制,发生驱除。用户可以设置两种限制:
(1)内存中条目的数目的限制
(2)内存中条目以及永久保存在磁盘上的条目的总数的限制
要驱除的条目可以基于以下算法之一:
(1)最久未使用(LRU)
(2)最不常用(LFU)
(3)先入先出(FIFO)
(4)最近未使用(NRU)
(5)随机驱除策略
(6)定制驱除算法-在一个示例中,可被暴露以用于定制驱除的接口。客户可以实现下面的方法:
1.给定映射,返回键的有序列表。该顺序支配驱除的顺序。
驱除到何处可以通过两个策略其中之一决定:
(1)丢弃它——驱除的条目被丢弃。
(2)调页到次级缓存。
根据一个实施例,用户可以保持对于一个或多个缓存条目的锁定。缓存映射103可以具有规定来获得对其执行锁定和解锁操作的锁管理器106。在分布式缓存的情况中,锁可以是集群范围的。所有锁与超时值一起获得。如果提供所有者,在不同的线程中获取和释放锁。锁管理器106提供对于共享和排他锁定的支持。在一个示例中,锁管理器106允许对所有者从排他锁定降级到共享锁定。
根据一个实施例,在复制缓存的情况下锁所有者是事务且在本地缓存的情况下它可以是当前线程。另外,如果映射被复制,锁所有者是可序列化的对象。锁定缓存映射中不存在的键可以为客户保留该键。这防止其他客户使用相同的键创建条目。客户可以锁定整个映射以用于排他访问。这阻止其他客户执行关于该映射的任何操作。而且,客户可以在给定配置的时间期内保持锁定。锁可以通过锁管理器106强制解锁且一旦保持时间消逝,其被交付给其他等待者。
表1描述了当获取和请求不同类型的锁时的各种情景。
表-1
根据一个实施例,提供的两个主要操作是:
(1)tryLocks(设置<K>键、对象所有者、RWLock.Mode模式、长超时)-以所提供的所有者和模式(共享或排他)以及超时,获取对于给定一组键的锁定。
(2)releaseLocks(设置<K>键、对象所有者、RWLock.Mode模式)-以所提供的所有者和模式(共享或排他)释放对于给定一组键的锁定。
根据一个实施例,锁管理器106支持其他方便的操作:
(1)tryExclusiveLocks(设置<K>键)-获取对该组键的排他锁定,无超时,以当前线程作为所有者
(2)trySharedLocks(设置<K>键)-获取对该组键的共享锁定,无超时,以当前线程作为所有者
(3)releaseExclusiveLocks(设置<K>键)-释放对该组键的排他锁定,以当前线程作为所有者
(4)releaseSharedLocks(设置<K>键)-释放对该组键的共享锁定,以当前线程作为所有者
清单-6示出了怎样锁定缓存条目的示例:
清单-6:锁定条目
根据一个实施例,会话104是基于映射的接口以用于在缓存上批处理操作。会话既可以用在事务设置又可以用在非事务设置中。在非事务设置中使用会话的主要优点可以是在涉及后备存储时批处理更新操作。这在减小复制/分区缓存中的网络流量方面也可以是有用的。
清单-7:缓存会话用法
根据一个实施例,支持不同类型的调页:
(1)调页到永久存储,诸如永久存储-本地磁盘的快速存取
(2)文件存储
根据本发明的一个实施例,对于上述两种临时存储其中每一个,形成可用的适配器缓存映射作为工具类。
根据本发明的一个实施例,销住(pinning)键是重载驱除策略的一种方式且为应用程序员提供更好的控制。在缓存映射接口上可需要下面的API从而为应用程序员提供更好的控制。
(1)销住键
(2)销住键集合
(3)拔去键
(4)拔去键集合
分层缓存
图2是根据本发明的一个实施例的分层缓存的示例性说明。分层缓存是将两个或更多代表性缓存联系在一起且使得它们用作一个缓存的工具类。
在如图2所示的双层示例中,L1映射201比L2映射202更小且更快,且因而在L2 202之前查询L1 201。两个缓存使用一致性同步策略同步。在该示例中,存在用于一致同性步策略的两个部分。L2映射202可以经由前向策略203相对于L1 201中的变化被更新。前向策略203的示例包括:
(1)只读-禁止对更新的任何尝试。
(2)直写-对L1 201的每次更新立即被应用于L2 202。
(3)调页-对L1 201的每次更新仅在L1 201驱除一些条目时被应用于L2 202。
(4)后写-对L1 201的每次更新异步地应用于L2 202。
另一方面,在相同的示例中,可以使用监听方案204相对于L2缓存202中的变化而更新L1映射201。监听方案204的选项是:
(1)不监听
(2)监听全部
(3)选择性监听
根据一个实施例,支持缓存服务的计算机实现的方法包含:更新或查询第一缓存201;以及经由前向策略203或监听方案204,相对于第一缓存201的更新或查询,更新或查询第二缓存202。例如,前向策略203可以包括以下至少之一:禁止任何更新尝试;立即向第二缓存应用第一缓存的每个更新;仅当第一缓存驱除条目时向第二缓存应用第一缓存的更新;以及异步地向第二缓存应用第一缓存的每个更新。监听方案204可以包括以下至少之一:不监听;监听全部;以及选择性监听。根据本发明的一个实施例,第一缓存201可以比第二缓存202更小且更快。
根据一个实施例,该计算机实现的方法可以包括保持对一个或多个缓存条目上锁的进一步的步骤。可以存在将一组缓存对象分组以实现复杂事件处理的另一进一步的步骤,其中对该组缓存对象中的相关对象自动执行缓存动作。可以存在仅在会话结束时更新缓存对象的另一进一步的步骤。可以存在从缓存管理器101创建第一缓存和第二缓存的另一进一步的步骤。
根据一个实施例,第一缓存201和第二缓存202可以是能够自加载的。而且,可以利用分层映射实现调页构造,其中以客户缓存作为L1缓存201且以一个缓存映射作为L2缓存221。可以利用调页一致性策略同步这两个缓存。
分布式缓存
图3是根据本发明的一个实施例的分布式缓存的示例性框架的说明。
根据本发明的一个实施例,缓存可以分类为以下广义的类别:
(1)本地缓存-整个缓存可以托管在一个服务器实例中。
(2)全复制缓存-每个集群成员可以托管整个缓存内容的拷贝。这有利于大多数都是读取的用途的情况。
(3)分区缓存-缓存数据可以分割在多个缓存分区上,每个分区具有缓存的一部分。每个分区可以具有一个或多个备份以支持故障转移。
另外,全复制缓存还基于缓存拷贝之间的数据一致性被划分为两个大类:
●弱一致性-缓存拷贝中的信息是陈旧的。弱一致性复制缓存可以使用异步机制来向其他集群成员传播缓存改变。组消息基础设施(多播或单播)可用于完成异步通信。
●强一致性-缓存信息在集群的所有成员之间都一致。可以通过对缓存条目在集群范围上锁且然后在锁定情况下向其他集群成员进行复制来实现强一致性。强一致性依赖于集群首领的存在,该集群首领进而使用租赁基础。
在一些情况中,缓存类型的选择是管理选项,而不是开发者选项。换句话说,应用代码以完全的位置透明性继续工作。
根据一个实施例,支持分布式缓存服务的计算机实现的系统可以包含跨越一个或多个虚拟机(VM)实例的一个或多个分布式缓存212a、212b和212c;以及可插拔消息传送器211。对于一个或多个分布式缓存212a、212b和212c其中的每一个分布式缓存,可以存在单独的缓存载入器213a、213b或213c、容量控制器214a、214b或214c以及子系统管理器215a、215b或215c。另外,该计算机实现的系统还可以包含一个或多个本地缓存210。
根据一个实施例,该计算机实现的系统中的一个或多个分布式缓存212a、212b和212c可以是全复制缓存,其中一个或多个分布式缓存的每个集群成员托管整个缓存内容的拷贝。
在一个示例中,一个或多个分布式缓存212a、212b和212c是使用异步通信机制来向其他集群成员传播缓存变化的弱一致性全复制缓存。在另一示例中,一个或多个分布式缓存212a、212b和212c是对缓存条目使用集群范围的锁定且然后在锁定条件下复制到其他集群成员的强一致性全复制缓存。
根据一个实施例,一个或多个分布式缓存212a、212b和212c是分区缓存,其中分区缓存可以将缓存条目分割到多个分区中且在一个或多个VM实例中托管该多个分区。在一个示例中,通过利用CacheFactory程序地创建分区缓存。在另一示例中,分区缓存是动态分区的缓存。在另一示例中,每个分区是一组键的排他所有者。在另一示例中,用于分区缓存的分区映射使用Java命名和目录接口(JNDI)查找,其使用分区映射的JNDI名称,其中JNDI查找返回智能代理,该智能代理保存分区路由表的拷贝且能够将缓存操作路由到正确分区。在另一示例中,分区配置成在托管在其他集群成员上的一个或多个复本上备份其数据。
根据一个实施例,一种支持分布式缓存服务的计算机实现的方法包含以下步骤:在跨越一个或多个虚拟机(VM)实例的一个或多个分布式缓存212a、212b和212c中存储一个或多个缓存对象;以及使用可插拔消息传送器211维持该一个或多个分布式缓存212a、212b和212c。根据本发明的一个实施例,该计算机实现的方法还可以包括在一个或多个本地缓存210上存储一个或多个缓存对象的另一步骤。
根据一个实施例,实现弱一致性复制缓存。缓存映射的弱一致性复本存在于所有集群节点上。当该映射更新时,该映射使用不可靠传输(比如多播)来更新复本。当任意复本检测到映射陈旧时,它通过可靠传输与另一节点同步。对于大多数只读操作,异步地应用这种映射尺度与映射更新。当副本检测到陈旧时,它们倾向于不急切地同步。复本可以维持一致性;但是程度较弱。
用户可以配置多于一个的弱一致性分布式映射,每个映射由唯一名称在系统中识别。用户可以使用CacheFactory接口查找或创建这种映射,如下:
清单-8:弱一致性映射创建
弱一致性复制缓存呈现下面的功能性行为:
(1)初始化
(2)缓存更新
(3)用于同步的HTTP
(4)监听器
(5)陈旧检测
(6)从关闭节点更新传播
根据一个实施例,所有集群节点通过多播监听缓存事件。集群节点初始化用于处理通过HTTP对等通信的特定小服务程序(servlet)。这是当缓存检测到陈旧时使用的备份同步通信。
当集群节点首先接收关于特定缓存的通信时,它初始化空缓存且在接收消息时更新该空缓存。该缓存还被标记为陈旧的。
图4是根据本发明的一个实施例用于弱一致性复制缓存的缓存更新操作的示例性说明。
在图3中示出的示例中,对于一个节点301上的对缓存的更新300(输入、去除或清除操作)触发对所有节点302、303和309的消息广播310。
当节点302、303和309接收消息时,如果如预期一样版本升级,它们,302、303和309更新其本地拷贝有效性。否则该条目被标记为陈旧的。
循环计时器事件可以周期性触发在可靠传输上同步陈旧的缓存条目。
在另一示例中,通过多播会话(诸如具有用于大于多播数据报大小的消息的恢复和分段的内置功能的多播会话)提供消息排序和更新的可靠性。
根据一个实施例,在陈旧的情况下,缓存通过HTTP同步自身。选择HTTP的决定基于这一事实:当空闲时HTTP连接超时,且这防止N乘N连接网格。
根据一个实施例,弱一致性映射的实现作为监控映射变化监听器提供,该监听器仅通过在监听器内包装任何映射而使得该映射是弱一致性的。
图5是根据本发明的一个实施例用于弱一致性复制缓存的陈旧缓存条目的同步的示例性说明。
根据一个实施例,缓存条目的每一次改变使用版本id标记。当应用更新时缓存保持跟踪版本变化。如果缓存发现它们具有最新版本,更新被丢弃。如果缓存发现它们具有应用更新的较早版本,该条目被标记为陈旧的且准备通过触发器400被同步。
图6是根据本发明的一个实施例用于弱一致性复制缓存的对关闭节点的缓存更新的示例性说明。
在图5中示出的示例中,当节点被关闭510时,缓存更新500通过可靠传输510发送到另一健康的集群节点502,且目标节点502然后代表关闭节点501广播511变化。
根据本发明的一个实施例,用于弱一致性复制缓存的本地缓存配置选项的行为包括:
(1)驱除策略-驱除策略局部地应用于每一个节点。由于驱除导致的对于底层缓存的任何改变可以传播到所有节点。
(2)缓存更新监听器-用户在任意成员上注册更新监听器且获得对复制映射做出的更新。
(3)缓存统计是本地的-可以不复制关于缓存条目的统计信息。
另外,还可以对弱一致性复制缓存实现延迟的一致性和冲突解决方案。
根据一个实施例,在同步周期之间节点具有不一致的数据。与其他节点的及时节点同步可以解析陈旧数据。提供配置参数以配置同步间隔。
对于多个节点上相同键的并发更新可以导致在不同节点上具有不同值的键。集群中的节点基于服务器名称、服务器身份和一些其他恒定参数被给予优先权。在所有节点上服务器的优先顺序与基于常量计算的顺序相同。在一个示例中,当节点接收用于具有相同版本的相同键的多个更新时,来自最高优先级服务器的更新获胜。最终,在所有节点中实现一致性。
根据一个实施例,如下所示,通过利用CacheFactory程序地创建强一致性复制缓存:
清单-9:强一致性映射创建
在一个示例中,使用下面的片段创建一致的复制映射的服务器形成一个组且保持缓存条目同步。这意味着集群中的每个服务器使用相同的名称创建一致的复制缓存类型来连接该组。未局部创建缓存的集群成员能够获得更新。
强一致的复制缓存显示出下面的功能性行为:
(1)利用CacheFactory API局部地创建缓存的服务器可以招收具有相同类型和名称的缓存的其他集群成员。
(2)服务器可以竞争以变成复制缓存的主服务器。
(3)一个服务器变成主服务器且其他组成员用作从服务器。
(4)利用Leasing API完成主服务器选择。
(5)在当前主服务器死掉时选择另一主服务器。
图7是根据本发明的一个实施例用于强一致的复制缓存的变异操作序列的示例性说明。
在如图6所示的示例中,组成员602对其本地映射的变异操作导致对主服务器601做出远程调用。主服务器601执行下面的操作:
(1)获得对于映射条目的锁定
(2)在锁定条件下将变化复制到所有组成员603
(3)响应请求变化的组成员602
在一个示例中,当主服务器602出现故障时,可以使用定义好的异常防止对映射的变异操作。
图8是根据本发明的一个实施例用于强一致的复制缓存的附属操作序列的示例性说明。
在图8所示的示例中,组成员702对其本地映射的附属操作导致对主服务器701做出远程调用。主服务器701执行以下操作:
(1)获得对映射条目的锁定
(2)在锁定条件下反回所访问的映射条目
在一个示例中,对映射的附属操作在缺少主服务器701时继续工作。组成员702首先试着联系主服务器701。如果主服务器701不可用则返回本地映射条目。
具有强一致的复制缓存的本地缓存配置选项的行为包括:
(1)驱除策略——可以支持所有本地缓存驱除策略。驱除策略可以仅在主映射上有效。主映射可以与从映射通信。
(2)缓存更新监听器——用户可以在任意成员上注册更新监听器且获得对于复制映射作出的更新。
根据一个实施例,实现分区缓存以包括分割在多个缓存分区上的缓存数据,其中每个分区拥有该缓存的一部分。每个分区具有一个或多个备份以支持故障转移。分区缓存分为两个类型:
(1)静态分区缓存——与分区相关的键可以不改变。键不能动态地从一个分区迁移到另一个分区。
(2)动态分区缓存——在集群的生命周期中分区相关的键可以改变。
根据一个实施例,分区缓存将缓存条目分割到多个分区且在不同的JVM实例上托管这些分区。当内存数据集很大且不能托管在单个JVM实例上时,这是有用的。
通过使用CacheFactroy程序地创建分区缓存,比如:
清单-10:分区缓存创建
在上述示例中,用户请求具有4个分区—p1、p2、p3、p4的分区映射。而且,每个分区具有分配给它的优选服务器。集群尽可能尝试在优选服务器上托管这些分区。如果优选服务器不可用,则在非优选服务器上托管分区。
用户配置用于每个分区映射的分区数目。在一些情况下,推荐多配置分区的数目以具有未来集群尺寸增长的优势。集群在其现有成员之间分布分区。如果在未来添加更多的服务器,分区可以重新分布以减小现有服务器上的负载。
根据一个实施例,每个分区是一组键的排他所有者。整个键范围在多个分区之间划分,使得仅一个分区是任意给定键的有效所有者。
可以以两种方式配置分区的键:
(1)缺省映射——缺省地,该实现方式依赖于键的哈希码以进行路由。利用哈希码和分区尺寸的简单模操作可以判断该键的托管分区。
(2)定制映射——用户可以通过提供KeyToPartitionLocator接口的实现来提供定制键给分区映射。给定键,该实现方式可以返回分区。
根据一个实施例,客户端能够使用分区映射的JNDI名称从JNDI查找分区映射。查找涉及任何集群成员。JNDI查找可以返回智能代理,该智能代理能够将缓存操作路由到正确的分区。该智能代理保持分区路由表的拷贝,该分区路由表帮助它将调用路由到正确的分区。分区路由表可以在客户端上随分区从一个服务器迁移到另一个服务器而动态地变化。当分区路由表变化时,客户端可不需要再次查找该分区映射。
分区被配置成在托管在其他集群成员上的一个或多个副本上备份其数据。这允许分区高度可用。以下面的方式配置副本:
(1)同步地复制分区数据到集群中的一个或多个备份服务器。
(2)异步地复制分区数据到集群中的一个或多个备份服务器。
(3)使用(1)和(2)的组合来同步地复制到“N”个成员且还异步地复制到集群中的“M”个成员。
根据一个实施例,副本具有决定副本何时变为主副本的等级顺序。当主副本不再存在时,排行最高的存活副本可以变成下一个主副本。客户端可以在它们不能到达主副本时尝试该最高等级副本。
根据一个实施例,分区缓存呈现以下行为:
(1)只要一个集群成员存活,所有分区都是有效的。
(2)在试图向优选服务器分配分区时,分区缓存可以在集群启动期间等待一个暖机期。如果优选服务器在暖机期之后不运行,分区可以被分配到非优选服务器。
(3)在优选服务器启动时,分配给非优选服务器的分区可以不被分配回优选服务器,当需要再次平衡分区时,给予优选服务器以优先权。
根据一个实施例,分区向服务器的分配按以下方式完成:
(1)分区可以分配给优选服务器
(2)其余分区可以均匀地分布在集群上
(3)当新成员添加到集群时可以重新平衡分区。
根据一个实施例,重新平衡按以下方式发生:
(1)新启动的服务器可以试图托管指定它们为优选主机的分区。
(2)在第二步骤,可以重新平衡分区,使得运行服务器将试图托管相等数目的分区。
(3)当服务器关闭后,分配给它的分区一律迁移到现有服务器。
在一个实施例中,分区映射客户端可能不需要知道分区的物理位置来访问缓存条目。客户端可以获得完全的位置透明度。仅可序列化的条目被放置在分区映射中。
根据本发明的一个实施例,具有分区缓存的本地缓存配置选项的行为包括:
(1)驱除策略——可以支持所有本地缓存驱除策略。每个分区将独立于它拥有的键集而应用驱除策略。
(2)缓存更新监听器——用户可以在分区映射上注册更新监听器且获得来自正确分区的更新。
根据一个实施例,全复制缓存将其更新传播到所有存活的集群成员。可选地,客户可以指定将托管该复制缓存的服务器列表。候选列表是整个集群的子集。这类似于单例服务或可迁移目标的候选列表。
在一个示例中,可能需要特别注意应用范围的复制缓存。如果应用同质地部署在集群中,则整个集群可以参与该复制缓存。但是在应用并非同质地部署的特殊情况中,复制可以限于已经部署了应用的集群成员。
事务缓存
根据一个实施例,当创建一个缓存时,它是事务性的。CacheFactory提供基于属性Map来创建缓存的方法。该属性Map包括以下与事务相关的属性:
(1)要使用的事务的类型——悲观或乐观。
(2)事务隔离等级。
(3)描述是否使用手工事务或JTA集成以及怎样与JTATransactionManager集成的属性
清单11示出示例:
清单-11:事务缓存创建
根据一个实施例,该缓存支持具有如下标准隔离等级的本地悲观事务:
(1)NONE
(2)READ_UNCOMMITTED
(3)READ_COMMITTED
(4)REPEATABLE_READ
如果隔离等级设置为NONE,则缓存不是事务性的。而是,内部缓存被包装在事务装饰器中,使用装饰器模式提供对所关心内容的强隔离,允许缓存保持集中于基本数据存储和检索,而装饰器处理事务性行为。装饰器模式的实现细节可以隐藏到外部代码。
根据一个实施例,缺省悲观事务隔离可以是REPEATABLE_READ。利用读锁和写锁的组合实现事务隔离等级以隔离变化。
根据本发明的另一实施例,尽管悲观事务被设置为缺省,缓存还支持本地乐观事务。所有乐观事务具有NONE或REPEATABLE_READ隔离;其他配置的隔离等级可以自动升级为REPEATABLE_READ。
乐观事务的动机是改善并发性。当存在对缓存数据的严重争用时,在延长的时间期中锁定部分缓存是不够的,而悲观事务常常如此。乐观事务通过利用数据版本控制代替锁定允许更大的并发性。
数据版本控制通过在每个缓存条目贯穿事务被访问时记录其版本而工作。当事务提交时,每个条目的记录版本与缓存中条目的当前版本进行比较。在第一事务记录条目版本之后但在第一事务提交之前,如果并发事务变更条目-由此增加其版本,则在版本失配的情况下,提交失败。
乐观事务使用悲观事务中使用的相同的读锁和写锁,但是锁定仅保持极短的时间期:当条目被检索时以及当提交时事务将其隔离的变化融入回主缓存时。所以尽管乐观事务可以在版本验证失败时偶尔强制回滚或者由于记录数据版本和在提交时验证造成的不可避免的开销而可能比悲观锁定运行得稍慢,但它们在维持极高度并发的同时允许高度隔离。
图9是根据本发明的一个实施例用于事务缓存的示例性框架的说明。
本发明的一个实施例是支持事务缓存服务的计算机实现的方法,包含:配置与一个或多个事务810a-n和一个或多个工作空间811a-n相关联的事务缓存;在事务装饰器801内维持一个或多个事务810a-n与一个或多个工作空间811a-n之间的内部映射802;获得具有一个或多个操作的事务810a;利用事务装饰器801中的内部映射802找到用于该事务的工作空间811a;以及向与事务810a相关联的工作空间811a应用事务810a的一个或多个操作。根据本发明的一个实施例,使用隔离等级配置事务缓存。
根据一个实施例,该计算机实现的方法包含创建内部映射802的另一步骤。可以存在基于用于悲观事务的所配置的隔离等级获得对受影响条目的锁定的另一步骤。可以存在记录受影响条目的版本的另一步骤。可以存在在用户命令提交或回滚时或者在当前事务结束时发起事务完成进程的另一步骤。在一个示例中,事务完成进程使用标准同步回叫:beforeCompletion和afterCompletion。
根据一个实施例,该计算机实现的方法包含将一组缓存对象分组以实现复制事务处理的另一步骤,其中,对于该组缓存对象中的相关对象自动执行缓存动作。可以存在仅在会话结束时更新缓存对象的另一步骤。另外,该计算机实现的方法可以包含从缓存管理器创建事务缓存的另一步骤。而且,该事务缓存能够自加载且提供XA事务支持。
根据一个实施例,事务缓存作为单一JVM映射出现,就像非事务缓存一样。然而当在不同事务语境中访问时,事务缓存可以呈现隔离视图。它可以通过维持每个事务和其改变的数据或其工作空间之间的内部映射来完成。在一些示例中,工作空间仅可以在成功提交时并入缓存的备份数据。
根据一个实施例,这种用法模式最大化对用户的透明度且允许我们自然地对事务强加严格的线程关联性。对于实现事务隔离所必须的锁定通常需要将请求锁定的客户端与客户端可能已经持有的任何锁进行匹配,且通过线程识别客户端提供这样做的简单方式。没有线程关联性,我们将必须通过将客户端标识符或者已经持有的锁传送到所有映射操作来复杂化我们的整个API栈。
根据一个实施例,事务装饰器向标准CacheMap添加如下主要API:
清单-12:事务映射API
根据一个实施例,对事务缓存的每个操作导致下面的一系列事件:
(1)获取用于当前线程的事务。如果没有正在进行的事务,则将操作传递到底层缓存。否则:
(2)使用事务和工作空间之间的事务装饰器的内部映射来找到事务的工作空间。如果不存在,创建一个。
(3)如果是悲观事务,基于配置的隔离等级获得对受影响条目的锁定。如果是乐观事务,记录受影响条目的版本。
(4)向工作空间应用操作。
根据一个实施例,当用户命令提交或回滚时或者在当前JTA事务结束时,可以发起事务完成进程。缓存事务完成使用标准同步回叫:beforeCompletion和afterCompletion。在beforeCompletion中,工作空间变化被批处理到action——对于缓存执行一系列操作的对象。这种行为具有两个阶段。Prepare阶段获得受到所配置的事务隔离的所有修改条目上的写锁。如果事务是乐观的,该阶段还相对于事务的记录版本验证所有条目的版本。事务变化然后被应用于底层缓存,且之前的状态被保存以用于回滚。Run阶段在必要时执行回滚。在一个示例中,beforeCompletion回叫仅执行prepare阶段。
根据一个实施例,在afterCompletion回叫中采取的步骤依赖于事务是被回滚还是提交。如果事务被回滚,则afterCompletion执行在beforeCompletion中准备的行为的run阶段以回滚缓存变化。然而如果事务提交,则行为简单地关闭。在两种情况下,所有锁都被释放且事务工作空间被清除。
因而,实现ACID事务通过工作空间、读-写锁和动作对象的组合达成。事务装饰器维持工作空间且定义动作。然而实现读-写锁和运行动作可以是底层缓存的功能。
逻辑上,每一个缓存条目可以具有支持多个读取器的读锁,以及排他写锁既不允许读取器也不允许记录器。实际中,缓存可以锁定区域或其他粗粒度结构而不是各个条目。读锁可升级成写锁。锁所有权是基于线程的,且请求当前线程已经保持的锁是没有效果的。即使在缺乏事务的情况下,读取条目可以隐含地获取并立即释放其读锁,且改变条目获取且立即释放其写锁。对于本地事务,仅需要本地锁。为了附加地支持在集群上的完全ACID事务,需要集群范围的锁。然而重要的是,不需要对事务装饰器做出改变。在一些示例中,集群式缓存可能仅需要实现其锁API来使用集群范围的锁而不是本地锁。
Action用于批处理操作。动作可以被给予对缓存的引用且可以执行它希望的任意系列的操作。动作是可序列化的,使得它们可以以单程被发送以在单独的JVM中的缓存上运行,而不招致很多各远程呼叫的开销。
清单-13:Action接口
运行一个动作是一个两阶段进程。要求缓存准备一个动作返回一触发,该触发可用于运行或关闭所准备的动作。
清单-14:ActionTrigger接口
具有单独准备阶段的价值是双重的。首先,它允许多步骤进程的封装和简单取消,该多步骤进程中,在诸如上述beforeCompletion、afterCompletion提交进程的步骤之间保存资源。而且,更重要地,正确实现的准备阶段增加了动作可以完全成功或安全失败的可能性。这在集群式缓存中尤其有用。例如,同步复制集群式缓存使用准备阶段来确保动作在试图运行之前在每个节点中被成功地发送和准备。像集群式锁定一样,这对事务装饰器是透明的。
可变对象处理
被缓存对象一般对于缓存服务是不透明的。在一些情况中,对其内部状态和关系的变化可能不被检测,对象身份可以不被保留,且它们可以经由序列化在JVM边界上传输。
这种不透明性对于不可变类型可以是可接受的,但是对于具有可变状态和关系的类型引入了编程困难和性能瓶颈。首先,它强制用户微观管理缓存:只要对象更新,用户就可以将该变化告知缓存。对象更新还可以不服从所配置的事务隔离等级:对于实例的内部状态的改变可以是对所有本地缓存客户可见的。在性能前端,序列化的使用可能极其低效。对于大对象或大对象图中的节点,即使单个字段的更新也可能触发整个对象或者整个图的序列化以用于集群上的复制。最后,Java对象序列化不能保留对象身份。相同远程缓存的对象的多次查找可以返回不同的JVM实例,且在多个键(可能作为多个对象图的一部分)下缓存相同的对象可导致在检索时用于每个键的不同的JVM实例。
根据一个实施例,用户可以配置用于可变对象处理的任意或全部的他们的定制类。可变对象是其内部状态可以由用户改变的对象。这包括被识别为经由配置可变的用户定义的类的实例以及诸如collection、map和date的标准可变类型的实例。在可变对象处理中,对于实例的内部状态和关系的改变被自动地检测。对象身份可以在多个缓存键和多次查找中保留。在一些情况中,可变对象可以不被序列化。除了所配置的用户定义的类,缓存系统作为可变对象处理的很多标准类型,包括collection、map和date。
根据一个实施例,缓存系统包括用于缓存值的专用可变对象处理。诸如collection、map和date的标准可变类型的实例可以自动被处理为可变对象。用户还可以设定他的用于可变对象处理的任意或所有类。
根据一个实施例,在可变对象处理下,可变对象存储在多个缓存对象图中且经由相同对象图中的多个路径可达。相同可变对象的检索总是返回相同的JVM实例,而不管用于导航到对象的检索路径-缓存键和关系-遍历如何。无论对象是图根或者缓存对象图中的任意节点,对可变对象的改变,包括可变对象之间的关系的变化,被自动检测。这些变化还可以根据配置的事务语义被隔离。最后,当一次缓存的可变对象不再从任何缓存的对象图引用时,该缓存可以检测出它不再被需要且要求归还它占用的任意空间。另外,在本发明的一个实施例中可以支持作为缓存键的可变对象。
根据一个实施例,可变对象处理对于外部代码是透明的。像其他缓存一样,可变处理缓存的行为一般表现得像扩展映射那样,且其包含的可变对象图是从正常Java对象的图中不可区分的。对于这种透明性的唯一主要例外是事务隔离。当缓存的实例在事务内变化时,变化可以仅对于该事务的语境可见。仅当事务成功地提交时,变化才对其他缓存客户可见。这通过向可变对象状态应用在事务缓存中使用的相同工作空间模式实现。即,事务可变对象可以从该事务的隔离工作空间而不是它们自己的实例字段汲取其状态。
根据一个实施例,所描述的用法模式在维持正确的事务语义的同时最大化对用户的透明度。用户可以正常地操作可变对象图且可以在线程之间共享它们,尽管事务线程中做出的变化直到提交时对于其他线程都可以是不可见的。工作空间模式的使用最小化排他锁定。没有它,即使在乐观事务内,事务对象在修改时立即被排他地锁定以防止脏读。
根据一个实施例,可变对象处理被实现为会话或事务缓存之上的装饰器。缓存保持集中于基本数据存储和检索以及工作空间维持,而可变处理装饰器关注于上面列举的需求。为此,可变处理装饰器透明地在用户可见的对象图和平坦缓存空间之间转换,且维持内部实例映射。该实例映射是分配给可变对象(参加下文)的唯一id和为该对象实例化的JVM实例之间的存储器敏感的映射。该实例映射负责维持查找和对象图上的可变对象身份。
图10是根据本发明的一个实施例用于可变对象处理的示例性框架的说明。
本发明的一个实施例是支持可变对象处理的计算机实现的系统其包含:缓存空间900,能够存储一个或多个可变对象;一个或多个缓存的对象图902、903、904、905,其中该一个或多个可变对象其中每一个经由一个或多个缓存的对象图902、903、904和905的一个或多个检索路径912a、912b、912c和912d;913a、913b、913c和913d;914a、914b、914c和914d;以及915a、915b、915c和915d可达;以及可变处理装饰器901,其维持在一个或多个缓存对象图902、903、904和905以及存储在缓存空间中的一个或多个可变缓存对象之间透明地转变的内部实例映射910。
根据一个实施例,缓存空间900可以包括一个或多个缓存。根据本发明的一个实施例,该一个或多个缓存中的一个缓存是会话或事务缓存。根据本发明的一个实施例,该一个或多个缓存的对象图902、903、904和905对用户可见。
根据一个实施例,实例映射901是分配给可变缓存对象的唯一id和为可变缓存对象发起的Java虚拟机(JVM)实例之间的存储器敏感的映射。
根据一个实施例,一个或多个检索路径912a、912b、912c和912d;913a、913b、913c和913d;914a、914b、914c和914d;以及915a、915b、915c和915d包括缓存键和关系遍历。可变处理装饰器901自动检测可变对象之间的关系的变化。可变对象作为不可变状态的结构存储在缓存空间中,包括不可变字段值和相关可变值的id。钩子用于构建用户定义的类的实例且向/从缓存的结构传递其状态。而且,可变对象图中存在的标准可变类型的实例在清洗时被子类的实例代替。
根据一个实施例,支持可变对象处理的计算机实现的方法包含:维持在一个或多个缓存的对象图902、903、904和905与存储在缓存空间中的一个或多个缓存对象之间透明转换的可变处理装饰器901中的内部实例映射910;以及从一个或多个缓存的对象图到达可变对象,其中每个缓存的对象图包括一个或多个检索路径912a、912b、912c和912d;913a、913b、913c和913d;914a、914b、914c和914d;以及915a、915b、915c和915d。
根据一个实施例,还包括以下步骤:通过一个或多个缓存的对象图902、903、904和905在缓存空间900中存储可变对象;以及通过一个或多个缓存的对象图902、903、904和905从缓存空间检索可变对象。
当用户添加缓存条目(K,V)时,其中V是可变对象,可变处理装饰器可以在清洗时执行以下步骤:
(1)为V分配全局唯一id。
(2)在装饰器的内部实例映射中添加将该id映射到V的条目。
(3)创建结构以代表缓存中的V。该结构保存V的不可变字段状态、V的引用计数(见步骤5)以及V的关系的唯一id(见步骤6)。
(4)将V结构添加到缓存,以V的id为键。
(5)设置V的初始引用计数为1。
(6)遍历从V可达的整个对象图递归地向V的关系应用步骤1-5。当我们发现图中对象之间的交叉关联时适当地递增引用计数。
(7)添加映射K到V的id的缓存条目。
根据一个实施例,当用户检索键K时,装饰器可以进行如下处理:
(1)检查以查看K的值是否是可变对象的id。如果不是,直接返回该值,否则:
(2)检查实例映射以查看是否已经为匹配该id的结构构建了JVM实例。如果是,则返回该实例。否则:
(3)找到缓存中用于给定id的结构,为该结构构建正确的用户可见类的JVM实例,且使用该结构的所存储的数据填充它。将映射该id到该JVM实例的条目添加到该实例映射中。
(4)递归地向保存在该结构中的关系的id应用此过程,使得重新组建整个对象图。这种递归处理可以立即执行,或者可以在用户遍历关系时慢慢完成。
(5)返回构建的实例。
根据一个实施例,可变对象不作为其原始类的实例而是作为不可变状态的结构被存储在缓存中,该不可变状态的结构包括不可变字段值和相关可变值的id。每个这种结构-以及因此每一个可变对象-可以通过唯一id识别,使得图可以被重建为引用正确的实例,包括对象图内和对象图之间的共享引用。结构可以独立地关于其id被缓存在平坦缓存空间内以用于简单的查找。可变处理装饰器可以从用户隐藏这些缓存条目。引用数可用于判断结构何时不再被任何值图引用且可以从缓存安全去除。
根据一个实施例,构建用户定义的类的实例且从/向被缓存结构传递其状态可以通过添加到类字节码的钩子实现。附加的钩子可用于检测对于实例字段的访问。这可允许可变处理装饰器跟踪脏字段且在事务语境中访问实例时重定向状态访问到事务工作空间。所需的字节码操作可以在建设进程期间执行或者在类加载时动态地执行。
根据一个实施例,诸如列表、映射和日期的标准可变类的字节码可以不修改。但是,如有需要可以通过字节码产生子类(例如CacheableArrayList,CacheableHashMap)。作为修改的用户定义的类,这些子类可以呈现相同的脏跟踪和状态截取行为。对象图中存在的标准可变类型的实例可以在清洗时使用这些子类的实例代替。因而,清洗代表一个边界,该边界之后,对于标准可变对象保持的引用可变得无效。注意,这仅应用于新的,即缓存的标准可变的实例,从缓存对象图中检索的实例可以总是已经可缓存的子类的实例。
根据一个实施例,如果底层缓存是会话,对于事务内的beforeCompletion或者各个更新,可以明确地发生清洗。清除可以执行以下步骤:
(1)基于会话、事务或各个更新中的关系的再分配计算引用计数的变化。
(2)如上所述,使用可缓存的子类实例代替对新缓存的标准可变类型的引用。
(3)清洗引用计数变化以及底层工作空间的明显脏可变状态。
(4)如果任何结构引用计数达到零,则计划去除结构的条目。
(5)底层会话或事务缓存可以处理与特定缓存相关的其余操作。
根据一个实施例,Java注释可用于允许用户识别其可变对象类型。另外,配置文件构造可以允许用户识别其可变对象类型。
一个实施例包括计算机程序产品,该计算机程序产品是存储介质,该存储介质上具有存储的指令/该指令可用于对计算机进行编程以执行此处提出的任意特征。存储介质可以包括但不限于任何类型的磁盘,包括软盘、光盘、DVD、CD-ROM、微硬盘以及磁光盘、ROM、RAM、EPROM、EEPROM、DRAM、闪存介质或者适于存储计算机可读介质其中任意一个上存储的指令和/或数据的设备,本发明可以包括用于控制通用目的/专用计算机或微处理器的硬件且使得计算机或微处理器能够与人类用户交互的软件或者利用本发明的结果的其他机制。这种软件可以包括但不限于设备驱动器、操作系统、执行环境/容器和用户应用。
本发明的实施例可以包括提供用于实现本发明的处理的代码。这种提供可以包括以任意方式向用户提供代码。例如,这种提供可以包括向用户发射包含代码的数字信号;向用户提供物理介质上的代码;或者使得代码可用的任意其他方法。
本发明的实施例可以包括用于发射可以在计算机处执行的代码以执行本发明的实施例的任意处理的计算机实现的方法。这种发射可以包括通过诸如因特网的网络的任意部分、通过布线、空气或空间的传输、或者任意其他类型的传输。这种传输可以包括发起代码的传输;或者导致代码从任何区域或国家传输到另一区域或国家。例如,传输包括导致作为原先寻址的结果通过一部分网络传送代码以及向用户发送包括代码的数据。向用户的传输可以包括在任何区域或国家中由用户接收的任何传输,不管发送传输的位置如何。
本发明的实施例可以包括包含代码的信号,该代码可以在计算机执行的代码以执行本发明的实施例的任意处理。该信号可以通过诸如因特网的网络;通过布线、空气或空间;或者任意其他类型的传输发射。整个信号不需要同时被传播。信号可以在其传送期上扩展时间。该信号不被认为是当前被传播的快照。
用于说明和描述目的,已经提供了本发明的优选实施例的上述描述。其并不旨在是排他性的或将本发明限制于公开的特定形式。相关技术领域的技术人员显见很多修改和变型。例如,公开的本发明的实施例中执行的步骤可以以备选顺序执行,可以省略某些步骤,且可以添加附加步骤。选择和描述的实施例是为了更好地解释本发明的原理及其实际应用,由此使得本领域技术人员能够理解本发明的各种实施例以及尤其适于预期使用的各种修改。旨在表明,本发明的范围由所附权利要求及其等价物限定。
Claims (15)
1.一种支持事务缓存服务的计算机实现的方法,包括:
配置与一个或多个事务和一个或多个工作空间相关的事务缓存;
在事务装饰器中维持所述一个或多个事务与所述一个或多个工作空间之间的内部映射;
接收具有一个或多个操作的事务;
利用所述事务装饰器中的内部映射找到用于该事务的工作空间;以及
向与该事务相关联的工作空间应用该事务的所述一个或多个操作。
2.根据权利要求1的所述方法,其中:
使用隔离等级配置该事务缓存。
3.根据权利要求1所述的方法,还包含:
基于用于悲观事务的配置的隔离等级获得对受影响条目的锁定。
4.根据权利要求1所述的方法,还包含:
记录受影响条目的版本。
5.根据权利要求1所述的方法,还包含:
在用户进行提交或回滚时或在当前事务结束时发起事务完成进程。
6.根据权利要求5所述的方法,其中:
该事务完成进程使用标准同步回叫beforeCompletion和afterCompletion。
7.根据权利要求1所述的方法,还包含:
将一组缓存对象分组以实现复杂事件处理,其中,对于该组缓存对象中的相关对象自动执行缓存行为。
8.根据权利要求1所述的方法,还包含:
仅在会话结束时更新缓存对象。
9.根据权利要求1所述的方法,还包含:
从缓存管理器创建事务缓存。
10.根据权利要求1所述的方法,还包含:
该事务缓存能够自加载。
11.根据权利要求1所述的方法,其中:
该事务缓存使用可插拔消息传送器来与跨越一个或多个虚拟机(VM)实例的一个或多个分布式缓存通信。
12.根据权利要求1所述的方法,还包含:
经由前向策略和/或监听方案,相对于所述事务缓存中的第一缓存的更新和/或查询而更新和/或查询所述事务缓存中的第二缓存。
13.根据权利要求1所述的方法,还包含:
存储一个或多个可变缓存对象,其中该一个或多个可变缓存对象其中每一个是经由一个或多个缓存的对象图的一条或多条检索路径可达的;以及
维持在该一个或多个缓存的对象图与保存在缓存空间中的所述一个或多个可变缓存对象之间透明地转换的内部实例映射。
14.一种支持事务缓存服务的计算机实现的系统,包含:
与一个或多个事务以及一个或多个工作空间相关联的事务缓存;
事务装饰器,用以
在事务装饰器内维持所述一个或多个事务与所述一个或多个工作空间之间的内部映射;
获取具有一个或多个操作的事务;
使用事务装饰器中的内部映射找到用于该事务的工作空间;以及
向与该事务相关联的工作空间应用该事务的所述一个或多个操作。
15.一种计算机可读介质,其上存储有指令,该指令被执行时导致计算机执行以下步骤:
配置与一个或多个事务和一个或多个工作空间相关联的事务缓存;
在事务装饰器中维持所述一个或多个事务与所述一个或多个工作空间之间的内部映射;
接收具有一个或多个操作的事务;
利用所述事务装饰器中的内部映射找到用于该事务的工作空间;以及
向与该事务相关联的工作空间应用该事务的所述一个或多个操作。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201410353901.9A CN104123239B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
CN201410353906.1A CN104123240B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
Applications Claiming Priority (9)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US2516508P | 2008-01-31 | 2008-01-31 | |
US2518508P | 2008-01-31 | 2008-01-31 | |
US2517108P | 2008-01-31 | 2008-01-31 | |
US2517608P | 2008-01-31 | 2008-01-31 | |
US61/025,165 | 2008-01-31 | ||
US61/025,185 | 2008-01-31 | ||
US61/025,176 | 2008-01-31 | ||
US61/025,171 | 2008-01-31 | ||
PCT/US2009/032742 WO2009097586A1 (en) | 2008-01-31 | 2009-01-30 | System and method for transactional cache |
Related Child Applications (2)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410353901.9A Division CN104123239B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
CN201410353906.1A Division CN104123240B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN101981545A true CN101981545A (zh) | 2011-02-23 |
CN101981545B CN101981545B (zh) | 2014-08-20 |
Family
ID=40459912
Family Applications (3)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410353901.9A Active CN104123239B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
CN200980111713.2A Active CN101981545B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
CN201410353906.1A Active CN104123240B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
Family Applications Before (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410353901.9A Active CN104123239B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
Family Applications After (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201410353906.1A Active CN104123240B (zh) | 2008-01-31 | 2009-01-30 | 用于事务缓存的系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (3) | US8019945B2 (zh) |
EP (1) | EP2274676A1 (zh) |
CN (3) | CN104123239B (zh) |
WO (1) | WO2009097586A1 (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102541759A (zh) * | 2011-12-28 | 2012-07-04 | 畅捷通信息技术股份有限公司 | 缓存控制装置和缓存控制方法 |
CN103207841A (zh) * | 2013-03-06 | 2013-07-17 | 青岛海信传媒网络技术有限公司 | 基于键值对缓存的数据读写方法及装置 |
CN103716882A (zh) * | 2012-10-08 | 2014-04-09 | 成都鼎桥通信技术有限公司 | 控制半静态调度隐式释放功能的方法、基站及用户设备 |
CN103947177A (zh) * | 2011-11-15 | 2014-07-23 | 阿尔卡特朗讯公司 | 中间主机备份复制中的方法和设备 |
CN104412241A (zh) * | 2012-06-21 | 2015-03-11 | 微软公司 | 用于主存储器数据库的存储器紧缩机制 |
CN104718529A (zh) * | 2012-10-15 | 2015-06-17 | 微软公司 | 表示没有外部引用的引用属性注释 |
CN108470007A (zh) * | 2012-01-26 | 2018-08-31 | 内存技术有限责任公司 | 借助非易失性大容量存储器系统提供高速缓冲存储器移动的设备和方法 |
CN109344353A (zh) * | 2018-09-12 | 2019-02-15 | 福建天泉教育科技有限公司 | 一种可配置化的本地缓存刷新方法及终端 |
US10901808B2 (en) | 2009-04-24 | 2021-01-26 | Microsoft Technology Licensing, Llc | Concurrent mutation of isolated object graphs |
Families Citing this family (46)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US9026993B2 (en) | 2008-06-27 | 2015-05-05 | Microsoft Technology Licensing, Llc | Immutable types in imperitive language |
JP5321221B2 (ja) * | 2009-04-22 | 2013-10-23 | 富士通株式会社 | 管理装置、管理方法、およびプログラム |
EP2438742B1 (en) * | 2009-06-03 | 2013-12-18 | Telefonaktiebolaget LM Ericsson (publ) | Method and node for distributing electronic content in a content distribution network |
JP5413001B2 (ja) * | 2009-07-09 | 2014-02-12 | 富士通株式会社 | キャッシュメモリ |
US8812799B2 (en) | 2009-12-11 | 2014-08-19 | International Business Machines Corporation | Cluster families for cluster selection and cooperative replication |
US8296523B2 (en) * | 2009-12-31 | 2012-10-23 | International Business Machines Corporation | Dual timeout caching |
US9201905B1 (en) * | 2010-01-14 | 2015-12-01 | The Boeing Company | Semantically mediated access to knowledge |
US8880725B2 (en) * | 2010-05-26 | 2014-11-04 | Microsoft Corporation | Continuous replication for session initiation protocol based communication systems |
US8443149B2 (en) * | 2010-09-01 | 2013-05-14 | International Business Machines Corporation | Evicting data from a cache via a batch file |
US8566521B2 (en) * | 2010-09-01 | 2013-10-22 | International Business Machines Corporation | Implementing cache offloading |
US8533240B2 (en) * | 2010-09-22 | 2013-09-10 | International Business Machines Corporation | Write behind cache with M-to-N referential integrity |
US9158555B2 (en) | 2010-12-06 | 2015-10-13 | International Business Machines Corporation | Efficient serialization of mutable objects |
US8612688B2 (en) | 2010-12-30 | 2013-12-17 | Facebook, Inc. | Distributed cache for graph data |
CN102333108A (zh) * | 2011-03-18 | 2012-01-25 | 北京神州数码思特奇信息技术股份有限公司 | 分布式缓存同步系统及方法 |
US10684989B2 (en) * | 2011-06-15 | 2020-06-16 | Microsoft Technology Licensing, Llc | Two-phase eviction process for file handle caches |
US9092482B2 (en) | 2013-03-14 | 2015-07-28 | Palantir Technologies, Inc. | Fair scheduling for mixed-query loads |
US8504542B2 (en) | 2011-09-02 | 2013-08-06 | Palantir Technologies, Inc. | Multi-row transactions |
US8639770B1 (en) * | 2011-11-18 | 2014-01-28 | Google Inc. | Separation of mutable and immutable data in a memory cache for improvement of data updates |
US9098269B2 (en) | 2013-01-04 | 2015-08-04 | Microsoft Technology Licensing, Llc | System and method to ensure resource access safety with immutable object types |
US9229959B2 (en) | 2013-01-04 | 2016-01-05 | Microsoft Technology Licensing, Llc | Object graph partial immutability and isolation enforcement |
US9536016B2 (en) * | 2013-01-16 | 2017-01-03 | Google Inc. | On-disk multimap |
US10650021B2 (en) * | 2013-12-03 | 2020-05-12 | Red Hat, Inc. | Managing data operations in an integrated database system |
US9547652B2 (en) * | 2014-05-29 | 2017-01-17 | Netapp, Inc. | System and method for validating replication of mutable operations performed on a file system object during a migration |
US9361176B2 (en) * | 2014-06-25 | 2016-06-07 | International Business Machines Corporation | Detecting the use of stale data values due to weak consistency |
CN104111899A (zh) * | 2014-07-03 | 2014-10-22 | 北京思特奇信息技术股份有限公司 | 一种缓存数据的存储方法及系统及读取方法 |
US9858195B2 (en) * | 2014-12-10 | 2018-01-02 | International Business Machines Corporation | Near-cache distribution of manifest among peer applications in in-memory data grid (IMDG) non structured query language (NO-SQL) environments |
US10027748B2 (en) * | 2015-07-10 | 2018-07-17 | Facebook, Inc. | Data replication in a tree based server architecture |
EP3365798B1 (en) * | 2015-10-22 | 2021-04-14 | Oracle International Corporation | System and method for providing distributed caching in transactional processing environment |
CN105426221B (zh) * | 2015-12-16 | 2018-11-06 | 广州华多网络科技有限公司 | 通过jvm安全上下文实现缓存的方法和系统 |
US10055360B2 (en) * | 2015-12-19 | 2018-08-21 | Intel Corporation | Apparatus and method for shared least recently used (LRU) policy between multiple cache levels |
CN107870814B (zh) * | 2016-09-23 | 2022-02-22 | 伊姆西Ip控股有限责任公司 | 用于内容管理批处理的方法和设备 |
US10503404B2 (en) | 2017-10-23 | 2019-12-10 | Micron Technology, Inc. | Namespace management in non-volatile memory devices |
US10437476B2 (en) | 2017-10-23 | 2019-10-08 | Micron Technology, Inc. | Namespaces allocation in non-volatile memory devices |
US10642488B2 (en) | 2017-10-23 | 2020-05-05 | Micron Technology, Inc. | Namespace size adjustment in non-volatile memory devices |
US10678703B2 (en) | 2017-11-16 | 2020-06-09 | Micron Technology, Inc. | Namespace mapping structual adjustment in non-volatile memory devices |
US11580034B2 (en) | 2017-11-16 | 2023-02-14 | Micron Technology, Inc. | Namespace encryption in non-volatile memory devices |
US10915440B2 (en) | 2017-11-16 | 2021-02-09 | Micron Technology, Inc. | Namespace mapping optimization in non-volatile memory devices |
US10223254B1 (en) | 2017-11-16 | 2019-03-05 | Micron Technology, Inc. | Namespace change propagation in non-volatile memory devices |
US10725930B2 (en) * | 2018-08-27 | 2020-07-28 | Micron Technology, Inc. | Logical to physical memory address mapping tree |
US11792226B2 (en) | 2019-02-25 | 2023-10-17 | Oracle International Corporation | Automatic api document generation from scim metadata |
US11870770B2 (en) | 2019-09-13 | 2024-01-09 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration |
US11687378B2 (en) * | 2019-09-13 | 2023-06-27 | Oracle International Corporation | Multi-tenant identity cloud service with on-premise authentication integration and bridge high availability |
CN113992750B (zh) * | 2020-07-10 | 2024-09-10 | 华为云计算技术有限公司 | 一种全局事务协同方法、装置、设备及介质 |
US11724714B2 (en) * | 2020-10-28 | 2023-08-15 | Uber Technologies, Inc. | Systems and methods for autonomous vehicle state management |
US11671260B2 (en) * | 2021-05-12 | 2023-06-06 | Mozarc Medical Us Llc | Expiring software key for unlocking a mode on a device |
US11829302B2 (en) | 2021-09-03 | 2023-11-28 | Hewlett Packard Enterprise Development Lp | Detecting sequential access patterns and proactive caching in a tree-based file system |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
WO2002005134A2 (en) * | 2000-07-07 | 2002-01-17 | Fitech Laboratories, Inc. | Methods and systems for a providing a highly scalable synchronous data cache |
US6704735B1 (en) * | 2000-01-11 | 2004-03-09 | International Business Machines Corporation | Managing object life cycles using object-level cursor |
Family Cites Families (28)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH0680499B2 (ja) * | 1989-01-13 | 1994-10-12 | インターナショナル・ビジネス・マシーンズ・コーポレーション | マルチプロセッサ・システムのキャッシュ制御システムおよび方法 |
US5136700A (en) * | 1989-12-22 | 1992-08-04 | Digital Equipment Corporation | Apparatus and method for reducing interference in two-level cache memories |
WO1995004960A2 (en) * | 1993-08-02 | 1995-02-16 | Persistence Software, Inc. | Method and apparatus for managing relational data in an object cache |
US5717919A (en) * | 1995-10-02 | 1998-02-10 | Sybase, Inc. | Database system with methods for appending data records by partitioning an object into multiple page chains |
US5933849A (en) * | 1997-04-10 | 1999-08-03 | At&T Corp | Scalable distributed caching system and method |
US5951695A (en) * | 1997-07-25 | 1999-09-14 | Hewlett-Packard Company | Fast database failover |
US6026413A (en) * | 1997-08-01 | 2000-02-15 | International Business Machines Corporation | Determining how changes to underlying data affect cached objects |
US6128623A (en) * | 1998-04-15 | 2000-10-03 | Inktomi Corporation | High performance object cache |
US6587937B1 (en) * | 2000-03-31 | 2003-07-01 | Rockwell Collins, Inc. | Multiple virtual machine system with efficient cache memory design |
US6633862B2 (en) * | 2000-12-29 | 2003-10-14 | Intel Corporation | System and method for database cache synchronization across multiple interpreted code engines |
US6813690B1 (en) * | 2001-06-12 | 2004-11-02 | Network Appliance, Inc. | Caching media data using content-sensitive identifiers |
US7003776B2 (en) * | 2001-08-01 | 2006-02-21 | Oic Acquisition I Corporation | System and method for object persistence life-cycle and object caching integration |
US6839816B2 (en) * | 2002-02-26 | 2005-01-04 | International Business Machines Corporation | Shared cache line update mechanism |
US7111001B2 (en) * | 2003-01-27 | 2006-09-19 | Seiko Epson Corporation | Event driven transaction state management with single cache for persistent framework |
JP4012517B2 (ja) * | 2003-04-29 | 2007-11-21 | インターナショナル・ビジネス・マシーンズ・コーポレーション | 仮想計算機環境におけるロックの管理 |
US7287126B2 (en) * | 2003-07-30 | 2007-10-23 | Intel Corporation | Methods and apparatus for maintaining cache coherency |
JP4673584B2 (ja) * | 2004-07-29 | 2011-04-20 | 富士通株式会社 | キャッシュメモリ装置、演算処理装置及びキャッシュメモリ装置の制御方法 |
US7418560B2 (en) * | 2004-09-23 | 2008-08-26 | Sap Ag | Centralized cache storage for runtime systems |
US7856537B2 (en) * | 2004-09-30 | 2010-12-21 | Intel Corporation | Hybrid hardware and software implementation of transactional memory access |
US7694065B2 (en) | 2004-12-28 | 2010-04-06 | Sap Ag | Distributed cache architecture |
US8230422B2 (en) * | 2005-01-13 | 2012-07-24 | International Business Machines Corporation | Assist thread for injecting cache memory in a microprocessor |
US7516277B2 (en) * | 2005-04-28 | 2009-04-07 | Sap Ag | Cache monitoring using shared memory |
US20060294300A1 (en) * | 2005-06-22 | 2006-12-28 | Seagate Technology Llc | Atomic cache transactions in a distributed storage system |
US7421542B2 (en) * | 2006-01-31 | 2008-09-02 | Cisco Technology, Inc. | Technique for data cache synchronization |
US20070198979A1 (en) * | 2006-02-22 | 2007-08-23 | David Dice | Methods and apparatus to implement parallel transactions |
CN100505762C (zh) * | 2006-04-19 | 2009-06-24 | 华中科技大学 | 适用于对象网络存储的分布式多级缓存系统 |
US7434002B1 (en) * | 2006-04-24 | 2008-10-07 | Vmware, Inc. | Utilizing cache information to manage memory access and cache utilization |
US20080163063A1 (en) | 2006-12-29 | 2008-07-03 | Sap Ag | Graphical user interface system and method for presenting information related to session and cache objects |
-
2009
- 2009-01-30 EP EP09705164A patent/EP2274676A1/en not_active Ceased
- 2009-01-30 CN CN201410353901.9A patent/CN104123239B/zh active Active
- 2009-01-30 WO PCT/US2009/032742 patent/WO2009097586A1/en active Application Filing
- 2009-01-30 CN CN200980111713.2A patent/CN101981545B/zh active Active
- 2009-01-30 US US12/363,648 patent/US8019945B2/en active Active
- 2009-01-30 CN CN201410353906.1A patent/CN104123240B/zh active Active
-
2011
- 2011-09-09 US US13/229,516 patent/US8321632B2/en active Active
-
2012
- 2012-11-26 US US13/685,357 patent/US8700855B2/en active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6704735B1 (en) * | 2000-01-11 | 2004-03-09 | International Business Machines Corporation | Managing object life cycles using object-level cursor |
WO2002005134A2 (en) * | 2000-07-07 | 2002-01-17 | Fitech Laboratories, Inc. | Methods and systems for a providing a highly scalable synchronous data cache |
Cited By (18)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US10901808B2 (en) | 2009-04-24 | 2021-01-26 | Microsoft Technology Licensing, Llc | Concurrent mutation of isolated object graphs |
CN103947177A (zh) * | 2011-11-15 | 2014-07-23 | 阿尔卡特朗讯公司 | 中间主机备份复制中的方法和设备 |
CN103947177B (zh) * | 2011-11-15 | 2017-08-01 | 阿尔卡特朗讯公司 | 中间主机备份复制中的方法和设备 |
CN102541759B (zh) * | 2011-12-28 | 2014-12-17 | 畅捷通信息技术股份有限公司 | 缓存控制装置和缓存控制方法 |
CN102541759A (zh) * | 2011-12-28 | 2012-07-04 | 畅捷通信息技术股份有限公司 | 缓存控制装置和缓存控制方法 |
CN108470007B (zh) * | 2012-01-26 | 2022-06-17 | 内存技术有限责任公司 | 借助非易失性大容量存储器系统提供高速缓冲存储器移动的设备和方法 |
CN108470007A (zh) * | 2012-01-26 | 2018-08-31 | 内存技术有限责任公司 | 借助非易失性大容量存储器系统提供高速缓冲存储器移动的设备和方法 |
CN104412241B (zh) * | 2012-06-21 | 2017-06-27 | 微软技术许可有限责任公司 | 用于主存储器数据库的存储器紧缩机制 |
CN104412241A (zh) * | 2012-06-21 | 2015-03-11 | 微软公司 | 用于主存储器数据库的存储器紧缩机制 |
CN103716882B (zh) * | 2012-10-08 | 2017-03-15 | 成都鼎桥通信技术有限公司 | 控制半静态调度隐式释放功能的方法、基站及用户设备 |
CN103716882A (zh) * | 2012-10-08 | 2014-04-09 | 成都鼎桥通信技术有限公司 | 控制半静态调度隐式释放功能的方法、基站及用户设备 |
US9971578B2 (en) | 2012-10-15 | 2018-05-15 | Microsoft Technology Licensing, Llc | Reference attribute annotation signifying no external reference |
CN104718529B (zh) * | 2012-10-15 | 2018-05-15 | 微软技术许可有限责任公司 | 表示没有外部引用的引用属性注释 |
CN104718529A (zh) * | 2012-10-15 | 2015-06-17 | 微软公司 | 表示没有外部引用的引用属性注释 |
CN103207841B (zh) * | 2013-03-06 | 2016-01-20 | 青岛海信传媒网络技术有限公司 | 基于键值对缓存的数据读写方法及装置 |
CN103207841A (zh) * | 2013-03-06 | 2013-07-17 | 青岛海信传媒网络技术有限公司 | 基于键值对缓存的数据读写方法及装置 |
CN109344353A (zh) * | 2018-09-12 | 2019-02-15 | 福建天泉教育科技有限公司 | 一种可配置化的本地缓存刷新方法及终端 |
CN109344353B (zh) * | 2018-09-12 | 2021-10-08 | 福建天泉教育科技有限公司 | 一种可配置化的本地缓存刷新方法及终端 |
Also Published As
Publication number | Publication date |
---|---|
US20110320734A1 (en) | 2011-12-29 |
CN104123239B (zh) | 2017-07-21 |
WO2009097586A1 (en) | 2009-08-06 |
US8321632B2 (en) | 2012-11-27 |
CN104123240A (zh) | 2014-10-29 |
CN104123239A (zh) | 2014-10-29 |
US20090198899A1 (en) | 2009-08-06 |
CN104123240B (zh) | 2017-07-28 |
US8019945B2 (en) | 2011-09-13 |
US8700855B2 (en) | 2014-04-15 |
CN101981545B (zh) | 2014-08-20 |
US20130086326A1 (en) | 2013-04-04 |
EP2274676A1 (en) | 2011-01-19 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101981545B (zh) | 用于事务缓存的系统和方法 | |
US10803047B2 (en) | Accessing data entities | |
EP1840766B1 (en) | Systems and methods for a distributed in-memory database and distributed cache | |
US7120651B2 (en) | Maintaining a shared cache that has partitions allocated among multiple nodes and a data-to-partition mapping | |
US8117153B2 (en) | Systems and methods for a distributed cache | |
Ports et al. | Transactional consistency and automatic management in an application data cache | |
Rahm | Empirical performance evaluation of concurrency and coherency control protocols for database sharing systems | |
US7328322B2 (en) | System and method for optimistic caching | |
JPH01112443A (ja) | スペース管理システム | |
JP2002519765A (ja) | トランザクションデータの高速記憶常駐処理方法および処理システム | |
WO1998022892A1 (en) | Structured data storage using globally addressable memory | |
US6735605B2 (en) | Method and apparatus for synchronizing not-logged application temporary tables in a multi-node relational database management system | |
Dechamboux et al. | The Arias distributed shared memory: An overview | |
Linskey et al. | An in-depth look at the architecture of an object/relational mapper | |
JPH0820996B2 (ja) | データアクセスシステム | |
Panadiwal et al. | A high performance and reliable distributed file facility | |
Blackburn et al. | The transactional object cache as a basis for persistent Java system construction | |
Dyade | The Arias Distributed Shared Memory: an Overview | |
Helal et al. | Replication of Objects | |
Gorrod | System design and implementation | |
Franklin et al. | Towards a Flexible Distributed DBMS Architecture | |
Terracotta, Inc. | Theory and Foundation Forming a Common Understanding |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
ASS | Succession or assignment of patent right |
Owner name: ORACLE INT CORP Free format text: FORMER OWNER: BEA SYSTEMS CORP. Effective date: 20110328 |
|
C41 | Transfer of patent application or patent right or utility model | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20110328 Address after: American California Applicant after: Oracle Int Corp Address before: American California Applicant before: Bea Systems Corp. |
|
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |