CN104662539A - 存储并检索数据的方法和*** - Google Patents
存储并检索数据的方法和*** Download PDFInfo
- Publication number
- CN104662539A CN104662539A CN201380050168.7A CN201380050168A CN104662539A CN 104662539 A CN104662539 A CN 104662539A CN 201380050168 A CN201380050168 A CN 201380050168A CN 104662539 A CN104662539 A CN 104662539A
- Authority
- CN
- China
- Prior art keywords
- data
- cache
- software application
- database
- cache node
- 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
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
- G06F16/2379—Updates performed during online database operations; commit processing
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
- G06F16/24552—Database cache management
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
- G06F16/275—Synchronous replication
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Computing Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Memory System Of A Hierarchy Structure (AREA)
Abstract
描述了一种由软件应用程序来存储数据的方法和***。在包括一个或多个数据库***和至少一个高速缓存器节点的数据存储***中,软件应用程序独立地与第一专用接口上的一个或多个数据库***以及第二专用接口上的至少一个高速缓存器节点接口。该方法和***的特征在于:首先单独地向所述多个高速缓存器节点发布由软件应用程序进行的数据存储***的每个读查询,该高速缓存器节点返回被查询数据,如果其可用的话。如果不可用,则软件应用程序接收触发从一个或多个数据库***获取被查询数据的未遇到。在已检索到被查询数据时,软件应用程序向至少一个高速缓存器节点添加被查询数据。该方法和***的特征还在于还在所述至少一个高速缓存器节点中同时地执行由软件应用程序进行的一个或多个数据库***的每次写入。因此,在所述至少一个高速缓存器节点的每次未遇到读查询时和数据存储***的每次写查询时快速地完成所述至少一个高速缓存器节点的填充。
Description
技术领域
本发明一般地涉及被货物和服务的大型提供商用来跟踪其总体产品供应和可用性水平的类型的数据管理***,并且更特别地涉及一种***,其允许由数据存储的远程用户发出的高级查询在没有延迟或在非常短的延迟内被答复,同时不影响事务的完成,其由于数据存储的管理而不断地更新内容。
背景技术
在所有的互连世界中,货物和服务的所有大型提供商现在已建立大型数据库***,该***保持其产品和服务供应的特性、规格和成本。在数据库管理***(DBMS)的控制下操作,使得内容可被可能来自全世界的所有在线客户同时地访问。因此为在线客户提供了通过使用特定在线软件应用程序来查询数据库和整个商业事务的机会,该特定在线软件应用程序让他们预订和购买各种产品和服务。
在航空公司行业中,此类非常大的数据库的示例是保持航空公司的库存(inventory)的那些。此类数据库被用来实时地跟踪实际座位容量、预留的当前状态以及由给定航空公司操作的飞行舰队的配置。
更确切地,航空公司的库存通常包含具有其可用座位的所有航班,并且一般地划分成服务类(例如,第一、商务或经济类)和许多预订类,对于该类别而言适用不同的价格和预订条件。库存管理的核心功能中的一个是库存控制。库存控制例如通过打开和关闭用于销售的单独预订类别来操纵在不同的预订类别中有多少座位可用。与存储在Fare Quote System中的运费和预订条件组合,确定用于每个已出售座位的价格。在大多数情况下,库存控制具有到航空公司的收入管理***的接口以响应于需求的改变而支持提供的预订类别的永久优化。用户通过具有显示器和图形用户接口的可用性应用程序来访问航空公司的库存。其包含用于特定城市对的所有提供航班,该航班的可用座位在不同的预订类别中。
通常由航空公司来管理航空公司库存数据库。还可以由向许多旅游业参与者提供旅行服务的公司来建立航空公司库存数据库,旅游业参与者也包括该航空公司、传统旅行代理和所有种类的其他在线旅行服务提供商。此类公司是例如AMADEUS,总部在西班牙马德里的欧洲旅行服务提供商。某些库存直接地由航空公司运行,并且与全球服务***(GDS)或中央预留***(CRS)对接。
在此环境中,用随着年份已急剧增加的询问或读查询的级别来表征这些数据库的利用率。事实上,数据库必须处理的事务的查看与预订比正在变得非常高。因此,旅行服务提供商必须在适当的位置放置必要的计算机化资源以应对该情况,使得数目日益增长的在线客户可以有效地查询数据库,并且仍获得快速的响应,同时数据库的更新可以由于在航空公司的情况下座位到航空旅行者的预订和出售的完成而同时地进行。
由例如总部在美国加利福尼亚州Redwood Shores的Oracle公司等专业开发数据库管理***的几个专业化公司提供的大型数据库***可用,并且在很大程度上被用于实现那些数据库。然而,单独的标准DBMS不能应对由货物和服务的大型服务提供商可能必须具有以同时地服务于数万个潜在客户的需要而提高的要求水平。为了达到此目的,必须以某种方式针对否则数据库将直接地接收到的无数的用户查询保护数据库。
因此已开发了用于高速缓存数据库内容的许多解决方案。高速缓存器可以是位于应用层的应用程序高速缓存器,其基本上重新使用由应用程序先前从数据库获取的数据片。这直接地引起了然后响应于进一步的用户询问而输送的数据质量的问题,因为数据库内容可能已被同时地更新。这经证明对于其中数据库被不断地更新并要求高数据质量的某些应用程序而言是真正具有挑战性的。例如与航空公司的库存有关的应用程序的情况就是如此,其中,数据的新鲜度直接地影响出售座位的可能性和提供给客户的价格。
因此,除非由此类型的高速缓存器输送的数据质量并不是最重要的,并且可认为其比任何其他东西更具有信息性,否则此类应用程序高速缓存器要求在数据库高速缓存器之间实现尖端机制,其允许在数据库中被更新时进行先前获取数据片的无效和/或替换,因此保持应用程序高速缓存器和数据库内容事实上是一致的。常常将高速缓存器***数据库与应用程序之间的路径中,使得其始终首先被应用程序查询。如果在高速缓存器中不存在被查询数据,则可将其从数据库获取并在输送给应用程序之前带入高速缓存器中。所有这些解决方案都共同地必须要求经高速缓存器和数据库紧密地耦合且其需要意识到彼此。因此,当服务提供商必须部署更多的计算机资源以在保持***性能的同时应对业务的增加和服务于更多的客户时,这些解决方案并不是可容易地缩放(scalable)的。
然而,在美国专利6,609,126中示出了一种允许相当好的可缩放性、产生高速缓存器与数据库之间的某些独立性的特定解决方案,该专利描述了一种“应用将数据库需求路由到数据库和高速缓存器的***和方法(System and method for routing database requests to adatabase and a cache)”。在公开的解决方案中,数据库和高速缓存器正在由于被单独地驱动、单独地在应用程序的控制下而变得以某种方式独立。然而,高速缓存器仅用来回答读查询,同时仅由应用程序在数据库中执行更新。因此,为了反映对到高速缓存器中的数据库产生的改变,上述专利描述了包含在更新高速缓存器的数据库中的复制部件。
所有上述高速缓存解决方案都给数据库带来重要的附加工作负荷,然而,同时不保证高速缓存器和数据库始终是相干的,并且数据库必须意识到各种高速缓存器。这要求在添加新的高速缓存器时在数据库中执行特定操作,因此阻止可简单地实现可缩放性。如所述,美国专利6,609,126要求数据库管理***嵌入外来部件。这实际上与标准DBMS的利用并不兼容。
因此本发明的目的是描述一种装配有数据库的计算机化数据***,该数据库在为用户提供适当数据质量的同时允许大业务量和高可缩放性。
在参考附图来检查以上描述之后,本发明的其他目的、特征和优点将变得对于本领域的技术人员而言显而易见。意图在于在本文中结合任何的附加优点。
发明内容
根据本发明的实施例,克服了前述及其他问题,并实现了其他优点。
在其第一方面,本发明提供了一种在数据存储***中存储数据和从数据存储***检索数据的方法,数据存储***包括应用程序、一个或多个数据库***和多个高速缓存器节点,该软件应用程序被配置成接收要求数据的至少一次读取或数据的一次写入的用户请求,该软件应用程序还被配置成向数据存储***发送读查询和谐查询以用于处理用户请求,该方法的特征在于软件应用程序独立地与一个或多个数据库***和多个高速缓存器节点接口,并且在于该方法包括由软件应用程序用至少一个数据处理器执行的以下步骤:
在接收到要求至少一次数据读取的用户请求时,软件应用程序单独地向所述多个高速缓存器节点发送读查询。优选地,如果软件应用程序响应于读查询而从至少一个高速缓存器节点接收到被查询数据(即,被检索的数据),则其使用该被查询数据来处理用户请求。优选地,如果软件应用程序响应于读查询而从所有高速缓存器节点接收到未遇到(miss),从而意味着在高速缓存器节点中未找到数据,则其获取一个或多个数据库***;如果在数据库***中存在被查询数据,则在已从一个或多个数据库***检索到被查询数据时,软件应用程序使用被查询数据来处理用户请求并将该被查询数据发送到至少一个高速缓存器节点,以及将被查询数据添加到所述至少一个高速缓存器节点的指令。
根据优选实施例,在接收到要求至少一次数据的写入的用户请求时,软件应用程序发送用于对一个或多个数据库***进行写入的指令,并且还发送用于同时地对所述多个高速缓存器节点进行写入的指令;从而,在每个未遇到的读查询时,即在对于其而言在所有高速缓存器节点中都未找到被查询数据的每个读查询时以及在数据存储***的每个写查询时,填充所述多个高速缓存器节点。因此在所述多个高速缓存器节点中的至少一个高速缓存器节点中和所述一个或多个数据库***中相同地存储每个数据,从而确保数据库***和所述多个高速缓存器节点始终是完全同步的。
因此,本发明允许使数据库完全独立于所述多个高速缓存器,多个高速缓存器包括所述多个高速缓存器节点,与已知解决方案相反,其涉及到集成在数据库中以执行高速缓存器的更新的复制部件,该数据库和高速缓存器从而是完全独立的,其限制整个存储***的可缩放性并要求特定的数据库。
装配有相互完全独立且彼此不知道的数据库和高速缓存器的计算机化数据***因此通过简单地在必要时使更多计算机和存储容量来应对业务的增加而允许数据***的无限制可缩放性。
另外,可以在限制设备的成本的同时实现可缩放性。特别地,可以用标准数据库和DBMS来实现本发明。本发明还允许降低维护的成本。特别地,存储资源的增加不需要对数据库的任何操作。
由于软件应用程序负责更新数据库中的数据和通过反映数据库的写入或通过添加存在于数据库中但未存在于高速缓存器中的被查询数据来填充高速缓存器,所以可以为最终用户提供高质量数据,即最新数据。另外,高速缓存器被快速地填充,其允许正好在向***添加新的高速缓存器节点时增加吞吐量。
另外,本发明允许为用户提供精确且客户定制的答复。
根据非限制性实施例,写查询包括以下各项中的至少一个:数据库***中的数据的添加、更新和删除。
可选地,根据本发明的方法可包括以下可选择特征和步骤中的任何一个:
高速缓存器和数据库的数据模型可以是相同的,但是不需要是严格相同的。唯一要求是其必须是一致的,使得可以导出确切相同的寻址密钥以用于访问高速缓存器和数据库记录。密钥还必须允许将数据库记录锁定以获得写操作一致性。因此,数据记录被相同地存储在数据库中和高速缓存器中(当存在时),或者采取保证高速缓存器中和数据库中的相同数据记录的寻址一致性的方式。例如,可以对比数据库模型修改高速缓存器数据模型以加速数据的检索,使得在两个实体之间保持寻址完全一致的同时改善高速缓存器的访问时间。
根据非限制性实施例,高速缓存器节点的数据模型与一个或多个数据库的数据模型相同。每个高速缓存器节点的每个数据被相同地存储在数据库***中。数据库***的每个数据被相同地存储在每个高速缓存器节点中。
对一个或多个数据库***进行写入的指令被软件应用程序发送到一个或多个数据库***。
用于同时地对所述多个高速缓存器节点进行写入的指令被软件应用程序发送到所述多个高速缓存器节点。
一个软件应用程序访问数据库***和高速缓存器节点。
数据存储***包括一个数据库***。
高速缓存器包括高速缓存器节点,包括并非持久性的每个数据存储装置。
软件应用程序在被查询数据到所述至少一个高速缓存器节点的成功添加完成时接收到肯定确认。
如果在同时地从一个或多个数据库获取相同的被查询数据的同时发生数据的写入,则放弃被查询数据在所述至少一个高速缓存器节点中的后续添加,并且向软件应用程序返回否定确认;从而,使得软件应用程序替代地使用所写入数据。
在发送用于对一个或多个数据库***进行写入的指令和用于同时地对所述多个高速缓存器节点进行写入的指令时执行以下步骤:
从一个或多个数据库***检索并在一个或多个数据库***中锁定被应用写入的当前存储数据;
在软件应用程序中处理并在一个或多个数据库***中写入要存储的新数据;
在软件应用程序中对高速缓存缓冲器进行写入以临时地保持要存储的所述新数据;
向所述至少一个高速缓存器节点转送并向其中设置要存储的所述新数据,并将事务委托给所述一个或多个数据库***。
在本发明中,高速缓存器节点或高速缓存器不同于高速缓存缓冲器。该高速缓存缓冲器在写入期间临时地存储数据。响应于用户请求未从高速缓存缓冲器检索到数据。高速缓存缓冲器专用于写的处理。
如果委托失败,则应用软件向所述至少一个高速缓存器节点发送删除先前已设定的所述新数据的指令。
包含所述新数据的所述至少一个高速缓存器节点将其从其内容中删除。如果多个高速缓存器节点包含所述新数据,则全部的所述多个高速缓存器节点将其删除。
软件应用程序在所述多个高速缓存器节点之中判定用以添加数据的指令或用于更新或删除数据的指令被发送到哪个高速缓存器节点或哪些高速缓存器节点。
该判定将负荷平衡考虑在内。
如果在一个或多个数据库***中或在至少一个高速缓存器节点中不存在被查询数据,则,
在获取一个或多个数据库***时,向软件应用程序返回未遇到而不是被查询数据;
软件应用程序向至少一个高速缓存器节点发送数据不存在,其被添加到用于相应被查询数据的所述至少一个高速缓存器节点,该数据的不存在针对所有接下来的查询变得立即可用;
从而,避免软件应用程序必须在下一次尝试中进一步获取一个或多个数据库以检索未遇到的被查询数据。
最后在数据库中未找到的由最终用户请求的数据然后被作为“未遇到数据”存储在高速缓存器中,使得高速缓存器的下一次询问可以立即返回用户请求的数据既未在高速缓存器中、也未在数据库中的信息。这防止数据库的更多询问使数据库***减速。
根据一个非限制性实施例,每个数据与报头相关联以形成记录,该报头指示内容是否在所述至少一个数据库***中未遇到。因此,仅读取记录的报头使得能够知道是否值得对数据库***进行获取。
根据另一实施例,高速缓存器节点存储被关联到数据的特定值,所述特定值指示在数据库中不存在该数据。
软件应用程序独立地与第一专用接口上的一个或多个数据库***以及第二专用接口上的所述多个高速缓存器接口。
以数据模型可直接地在数据库与高速缓存器之间映射的方式来选择数据模型。
按功能实体将每个数据集分组,并用密钥编索引,其使得在数据库***和高速缓存器节点两者中数据集整个由于此密钥而立即可访问。
按飞行日期来将数据分组并用飞行日期密钥来识别。
软件应用程序是旅行提供商的库存的软件应用程序。
软件应用程序、数据库***和高速缓存器节点被包括在旅行提供商的库存中。
通常,旅行提供商是航空公司。
在软件应用程序处接收到的用户请求由以下各项中的至少一个发送:旅行代理、在线旅行代理、在线客户。
高速缓存器节点和数据库的数据模型是一致的,使得可以导出确切相同的寻址密钥以用于访问高速缓存器节点和数据库数据。
数据被相同地存储在数据库中和至少一个高速缓存器节点中(当存在时),或者以保证高速缓存器中和数据库中的相同数据的寻址一致性的方式存储。
在其另一方面,本发明提供了一种计算机程序产品或非临时计算机可读介质,其包含软件程序指令,其中,由至少一个数据处理器来执行软件程序指令导致包括上述方法的执行的操作执行。
示例性实施例还包括一种在数据库存储***中存储数据和从数据存储***检索数据的方法,数据库存储***包括软件应用程序、一个或多个数据库***和多个高速缓存器节点,软件应用程序被配置成接收要求用户的至少一次读取或数据的一次写入的用户请求,软件应用程序还被配置成将读查询和写查询发送到数据存储***以用于处理用户请求,该方法的特征在于软件应用程序独立地与一个或多个数据库***和所述多个高速缓存器节点接口,并且在于该方法包括由软件应用程序用至少一个数据处理器执行的以下步骤:
在接收到要求至少一次数据读取的用户请求时,软件应用程序单独地向所述多个高速缓存器节点发送读查询;
如果软件应用程序从至少一个高速缓存器节点接收到被查询数据(即,被检索的数据),则其使用被查询数据来处理用户请求,
如果软件应用程序从所有高速缓存器节点接收到未遇到,则其对一个或多个数据库***进行获取;如果在数据库***中存在被查询数据,则在已从一个或多个数据库***检索到被查询数据时,软件应用程序使用被查询数据来处理用户请求并向所述至少一个高速缓存器节点发送被查询数据以及将被查询数据添加到所述至少一个高速缓存器节点的指令;如果在数据库中未发现,则在高速缓存器中添加指示数据不存在的信息,
并且其中,每个数据相同地在所述多个高速缓存器节点中的至少一个高速缓存器节点中和一个或多个数据库***中存储或者以保证高速缓存器中和数据库中的相同数据的寻址一致性的方式存储。
可选地但有利地,在接收到要求至少一次数据的写入的用户请求时,软件应用程序发送用于对一个或多个数据库***进行写入的指令,并且还发送用于同时地对所述多个高速缓存器节点进行写入的指令;从而,在数据存储***的每次未遇到的读查询时和每次写查询时填充所述多个高速缓存器节点。
在其另一方面,本发明提供了一种在航空公司的库存的数据存储***中存储数据和从数据存储***检索数据的方法,数据存储***包括应用程序、一个或多个数据库***和多个高速缓存器节点,该软件应用程序被配置成接收用户请求,该用户请求要求以下各项中的至少一个:将知道关于至少一个航班的可用性的数据的读取和将修改关于至少一个航班的可用性的数据的写入;软件应用程序还被配置成将读查询和写查询发送到数据存储***以用于处理用户请求,该方法的特征在于软件应用程序独立地与一个或多个数据库***和所述多个高速缓存器节点接口,并且在于该方法包括由软件应用程序用至少一个数据处理器执行的以下步骤:
在接收到要求至少一次数据的读取以知道关于至少一个航班的可用性的用户请求时,软件应用程序单独地向所述多个高速缓存器节点发送读查询;
如果软件应用程序从至少一个高速缓存器节点接收到被查询数据(即,被检索的数据),则其使用被查询数据来处理用户请求,
如果软件应用程序从所有高速缓存器节点接收到未遇到,则其对一个或多个数据库***进行获取;如果在数据库***中存在被查询数据,则在已从一个或多个数据库***检索到被查询数据时,软件应用程序使用被查询数据来处理用户请求并将该被查询数据发送到至少一个高速缓存器节点,以及将被查询数据添加到所述至少一个高速缓存器节点的指令;
并且其中,每个数据被相同地存储在所述多个高速缓存器节点中的至少一个高速缓存器节点中和一个或多个数据库***中。
可选地但有利地,要求至少一次写入以修改关于至少一个航班的可用性的用户请求是用于以下各项中的至少一个的用户请求:购买座位、取消座位、修改座位。
在其另一方面,本发明提供了一种包括一个或多个数据库***、至少一个高速缓存器节点、至少一个数据处理器和软件应用程序的数据存储***,其中,由所述至少一个数据处理器执行软件应用程序导致包括上述方法中的任何一个的执行的操作执行,并且其中,所述一个或多个数据库***和所述至少一个高速缓存器节点被配置成被软件应用程序独立地驱动。
有利地,用于运行软件应用程序的计算机化装置的处理能力和高速缓存器节点的数目适合于满足由软件应用程序的所有最终用户产生的聚合峰值业务。
可选地,根据本发明的数据存储***可包括以下可选择的特征和步骤中的任何一个:
高速缓存器节点的数目和存储资源适合于保持整个数据库***内容。
数据库***的某些数据被存储在超过一个的高速缓存器节点中。
当整个数据库***内容已被软件应用程序传输到所述至少一个高速缓存器节点时,所述至少一个高速缓存器节点的命中率查询最后达到100%。
在其另一方面,本发明提供了旅行提供商的库存,其包括本发明的数据存储***。
附图说明
图1描述了根据本发明的数据存储***。
图2图示出最后允许在应用程序中获得最终用户所请求但在高速缓存器中不存在的数据的过程。
图3描述了从应用程序同时地对数据库和高速缓存器进行写入的过程。
图4图示出在其中发生同时的写操作的特定情况下该高速缓存器中获得来自数据库的数据的过程。
图5给出了关于中数据库中和高速缓存器中由应用程序同时地执行的数据写入的顶视的更多细节。
图6图示出其中在高速缓存器中和数据库中都不存在所请求数据的情况。
图7图示出其中数据库和高速缓存器的写入是删除的情况。
具体实施方式
本发明的以下详细描述参考附图。虽然本描述包括示例性实施例,但可以有其他实施例,并且在不脱离本发明的精神和范围的情况下,可对所述实施例进行修改。
图1描述了根据本发明的数据存储***100,其中,软件应用程序10正在独立地对接一方面的数据库***20和另一方面的高速缓存器***,其也称为高速缓存器且包括一个或多个高速缓存器节点30。
在这里值得注意的是稍后描述的本发明的数据库高速缓存器***主要是特定的,因为整个数据库内容最后可被传输到一组高速缓存器节点中,其充当保护所有读取业务的前端处理层,否则该读取业务将到达数据库***20,因此急剧地改善数据存储***100的性能。然后部署足够数目的高速缓存器节点以支持整体业务并一起处理整个数据库内容。在这里,当***已经启动并运行达相当长的时间段时,包含在后端数据库中的所有数据实体最后都被传输到或呈现给该组高速缓存器节点,使得不再存在高速缓存器未遇到,因为所有读查询然后被高速缓存器节点处理。在高速缓存器中和数据库中***地执行数据库的写,使得高速缓存器和数据库内容始终是一致的。即使此后描述的数据存储***因此与被用作数据储存库的数据库相比更多地是高速前端存储和处理***,然而,在本发明的以下描述中使用高速缓存器的术语。
数据存储***100遵循数据处理***常常使用的传统树层架构。中间层120是服务提供商的专用软件应用程序10从那里运行的软件应用程序10层。在先前使用的GDS的示例中这通常是任何航空公司的库存应用程序,其旨在跟踪航空公司飞行舰队之中的座位的所有预留和预订。
客户端层130包括应用程序10的所有远位置用户40。在类似于上述航空公司库存之类的由服务提供商建立的旅行应用程序的情况下,最终用户通常是传统旅行代理中的旅行代理。其也是使用许多可用旅行网站或在线旅行代理中的任何一个的个体,他们可以从该旅行网站或在线旅行代理发布旅行请求和可能的预订、在线、空中旅行。
较低层是包括数据库***20的存储层110。本发明不对服务提供商所使用的数据库***进行任何假设。其最经常地基于市售的标准数据库管理***(DBMS),但其也可以是专用数据库***。无论服务提供商使用哪个数据库***,其都是从足够量的硬件和软件资源实现以保持并处理服务提供商的所有数据。在图1中,实现数据存储***100所需的所有硬件资源被示为全局地用附图标记101来指示的单独计算机类机器。假设可从每个单独计算机获得持久性、非易失性存储,并且也在必要时作为单独数据磁盘102,例如以便永久地保持数据库内容。
本发明的数据存储***包括存储层110和中间层120。
在本发明中,术语‘用户请求’和‘请求’指定来自用户40且到达应用程序10的需求。用户可以是诸如旅行者或旅行代理之类的人,或者可以是发送请求的计算机化***。
在本发明中,术语‘数据查询’或‘查询’指定由应用程序10发送到高速缓存器节点30和/或数据库***20的需求。查询可以是读查询或写查询。
读查询包括从至少一个高速缓存器节点获得或从数据库***读取数据的指令。通常,将用于从数据库***获得数据的动作指定为‘读’,而将用于从高速缓存器节点获得数据的动作指定为“获得”。被查询数据至少是必须获得或读取以用于至少部分地完成用户请求的数据。
写查询包括用以添加、更新/设定或删除数据的指令。通常,将用于修改来自数据库***的数据的动作指定为‘更新’,而将用于修改来自高速缓存器节点的数据的动作指定为“设定”。
因此,在以下发明中,应用程序10接收用户查询并发送数据查询,这些查询是读查询或写查询。
无论实际上使用哪个***,本发明假设数据库20是服务提供商的最后数据储存库。数据库20然后优选地遵守ACID(原子性、一致性、隔离和持久性)性质集合,保证数据库事务因此在以下方面被可靠地处理:原子性、一致性、隔离和持久性。
相对于先前所述和从现有技术已知的数据库***,本发明的软件应用程序10仍通过专用接口12被直接地、因此独立地连接到数据库20。因此,数据库***的操作并不受一个或多个高速缓存器节点30的任何影响,其具有与软件应用程序10的其自己的专用接口14。如在本发明的以下描述中进一步讨论的,则轮到软件应用程序10仅向数据库发送其稍后必须处理的强制性事务,即其中由于新的预订完成而永久地更新数据库内容的那些和一般地每当由于例如已发生取消而必须改变预留的状态时。
因此,在高速缓存器节点30中的任何一个与数据库20之间不存在连接。在数据库***与高速缓存器节点30之间不交换消息、指令或数据。
在数据存储***100中,然后通过专用高速缓存器软件应用程序10接口14来支持由软件应用程序10处理的所有业务。如图1中所示,高速缓存器在功能上位于存储层,像数据库一样。接口14和一个或多个高速缓存器节点30被假设为能够仅仅通过在软件应用程序10层120处和用于高速缓存器节点的存储层110处提供和部署足够的硬件和软件资源以满足预期吞吐量来处理数据存储***100的所有业务,无论已哪个吞吐量为目标。因此,简单地通过向现有的那些添加更多计算和存储资源来达到处理更多的数据。这样做可以提供***可缩放性,其不受到除被部署成实现目标吞吐量所需的计算机平台数目之外的架构考虑的限制,即其成本,功率耗散和地板占用率。
为了允许以上可缩放性是有效的,数据存储***100基于全局密钥/值数据模型,其中内容在高速缓存器中和数据库中是一致的,使得可以使用同一密钥来检索两者。因此以数据模型可直接地在数据库中和高速缓存器中映射来选择数据模型。尤其是,按功能实体来将每组数据分组并用公共唯一密钥来编索引。这使得其可整体地在数据库中和高速缓存器中从唯一密钥立即访问,虽然内容可以某种方式不同。要如上文所解释地操作的对数据模型的仅有要求是:
—在更新之前锁定在高速缓存器中要被更新的数据超集的能力;
—推导出受到数据库中的给定更新影响的所有高速缓存器密钥以便对其进行更新的可能性。
从旅游业领域所取的典型示例如在下表中:
其中
(*)O&D=起点&目的地
(**)支腿是航班的一部分。例如,航班可以是从尼斯(NCE)到纽约(NYC),在巴黎(CDG)停。其具有两个支腿:NCE—CDG和CDG—NYC。(请注意,其包含三个O&D;NCE—CDG、NCE—NYC和CDG—NYC。)
在以上示例中,将调度表信息存储在关系数据库中。“母”表格具有航班日期主密钥。“子”表中的一个具有支腿日期主密钥。某些写(例如更新)在航班级别而不是在支腿级别完成。在两个情况中都使用在航班级别的锁定。这用来防止对航班以及对航班的所有支腿的任何修改。不能在支腿级别设定该锁定,因为航本的更新然后将更新所有支腿,并且可以导致同时更新。
因此,数据库和高速缓存器的数据模型(如果不是严格地相同)必须是一致的,使得可以导出相同的索引密钥以便在允许锁定数据库记录的同时访问高速缓存器和数据库记录。
图1中所示的架构适用于被组织为单层客户端侧分布式高速缓存器的高速缓存器,其支持整体吞吐量,并且还显著地简化了高速缓存器数据一致性的管理。具有客户端侧分布式高速缓存器意味着组成高速缓存器的各种高速缓存器节点30之中的数据分布是已知的,并且在软件应用程序10层处的客户端侧计算。结果,所有高速缓存器节点30因此是完全独立的,并且***的可缩放性事实上是潜在地无限的。然而,实际上通过在存储层中添加新的高速缓存器节点30来获得更多处理能力仅在保持节点内的数据的平衡分布时可实现。为了达到分布事实上平衡,基于数据的关键性质来分布数据。例如,基于其航班号来分布航班取向数据。还通过保持整个高速缓存器***在线且在重新分布进行的同时在标称条件下工作的良好重新分布程序来支持任何修改,其例如由于可用高速缓存器节点数目或分布参数的改变而将触发分布的改变。为此,稍后在本发明的以下描述中描述到两个高速缓存器配置的临时双馈。
本发明的数据存储***100不要求高速缓存器与数据库之间的任何类型的同步机制。高速缓存器被软件应用程序10以明确的方式使用,即:轮到软件应用程序10层来使用两个数据源中的一个:数据库或高速缓存器,或者在同一用户请求期间是两者,例如当必须对数据库或高速缓存器进行写入时。这种方法的直接结果是保持数据库完全不知道高速缓存器的存在,并且完全未受到本发明的数据结构中的高速缓存器的存在或不存在的影响。很明显相反也是真的:高速缓存器完全从数据库解耦。两个结构然后可以在必要时独立地完全展开。
值得注意的是高速缓存器内的数据写入不使用无效策略。所有写入都导致数据到高速缓存器中的立即替换。当整个数据库内容最后被映射到高速缓存器中并分布在所有可用高速缓存器节点30上时,命中率即使在发生非常高级别的同时写入的情况下也达到100%。
可以始终认为高速缓存器数据是有效的,并且不需要额外的处理以对其进行检查。事实上,每个高速缓存器未遇到触发未遇到值从数据库到高速缓存器中的添加。这只完成一次,因此确保每次要检索数据实体仅获取一次的数据库上的最低可能负荷。这主要在高速缓存器变得可操作时发生,例如在高速缓存器节点30的添加、高速缓存器节点30故障、维护操作等之后的***通电之后。本发明假设在分布式高速缓存器节点30中存在足够的空间以接收整个数据库内容。
数据库中的最终用户请求的数据的不存在也被记录在高速缓存器中。如果在高速缓存器中未发现最终用户所请求的数据片且并未从数据库检索到,则将数据的不存在记录到高速缓存器中,使得下一次查询高速缓存器,将不尝试从数据库获取相应的数据片以便进一步限制数据库负荷。
图1中所描述的架构可扩展到可以密钥值取向的任何数据类型。并且,其可适用于可以为密钥值取向的任何过程。其特别地适用于被设计成检查航班可用性的任何过程。
以下图描述了由软件应用程序10在数据库与高速缓存器之间执行以达到高速缓存器最后支持由软件应用程序10产生以服务所有用户请求的整体业务的操作。
如先前所示,***的高速缓存器部分是非常简单的,并且包括提供基本远程密钥/值协议的一个或多个独立计算机。定义高速缓存器上的三个基本操作,其让软件应用程序10对其进行更新,从数据库填充高速缓存器,并从高速缓存器检索数据。其为:
Set(key,value):在高速缓存器中无条件地更新与密钥相关联的值
Add(key,value):当与密钥相关联的值在高速缓存器中不存在时添加该与密钥相关联的值
Get(key):从高速缓存器返回与密钥相关联的值
本发明不进行关于其实际上可由软件应用程序10实现的方式的任何假设,条件是可以达到预期的性能水平。有利地,定义使得可以一起发送并处理多个基本操作的批量操作。
***的主要部分在软件应用程序10层上以控制在所有高速缓存器节点30上的数据分布。密钥/值数据可分布在组成高速缓存器的节点之中。为了达到分布尽可能相等地遍布在所有节点上,提取密钥的性质并用公式来计算相应高速缓存器节点30:
node_number=key_property_as_a_number MODULO thenumber_of_nodes
航班取向数据使用连续航班号通常被用于具有相同性质的航班的性质。在这种情况下,直接地使用航班号作为用于分布的基础。
针对基于航班的起点和目的地(O&D)的航班取向数据,在单独O&D密钥上计算哈希值。
如已讨论的,使所有可用节点上的数据分布平衡实际上是实现无限可缩放性中的关键。
图2和3示出了如何填充高速缓存器并在软件应用程序10的单独控制下保持与数据库内容相干。
图2描述了最后允许在软件应用程序10中获得由最终用户请求且在高速缓存器中还不存在的数据的过程。这种情况主要在正在填充高速缓存器时盛行,例如在***的通电之后,或者由于已***或去除新的节点且高速缓存器节点30内容的重新平衡在进行中。
当软件应用程序10需要回答用户请求时,首先通过“获得(Get)”操作210来读取高速缓存器。在航空公司库存数据库的示例中,这例如将回答由数据库的最终用户发出的许多用户请求中的一个,以发现在某个日期在特定航班中、在某个类别中是否有座位可用等。如果相应数据在高速缓存器中不存在,即通常尚未由先前的读取将相应数据带入高速缓存器中,则高速缓存器向软件应用程序10返回“未遇到”220。否则,很明显仅仅从高速缓存器向软件应用程序10返回信息,其结束“获得”操作。软件应用程序10因此可以满足最终用户的用户请求。最后,其将被查询数据与附加数据聚合并响应于来自最终用户的请求而将其返回。附加数据通常是可能必须被检索以满足用户请求的其他数据。例如,可以从高速缓存器节点获得某些数据,同时必须从其他高速缓存器节点获得满足该同一用户请求也必需的其他数据和/或必须从数据库***20读取。
在接收到在高速缓存器中不存在被查询数据的信息时,软件应用程序10用“读”操作230来询问数据库。然后向软件应用程序10返回240未遇到信息。从数据库进行的数据读取在先前描述的数据库专用接口12上发生。这通过从软件应用程序10向本发明的数据存储***100所使用的数据库管理***(DBMS)发布相应查询来完成。
在从数据库接收高速缓存器中的数据未遇到时,软件应用程序10然后执行“添加”操作250以将数据存储到高速缓存器中。从此以后,在高速缓存器中存在270数据,只要高速缓存器保持可操作且未被重新配置。在此操作完成时,向软件应用程序10返回肯定确认(OK)260。
值得注意的是此过程仅在高速缓存器启动并运行达到任何给定的数据片的同时发生一次,所述给定数据片被同样地或一致地存储在数据库中和高速缓存器节点30中。这第一次在由软件应用程序10请求数据且在高速缓存器中还不存在时发生。在其之后,如果需要改变数据库内容,则可能更新相应数据,例如因为航空公司座位已被出售。在这种情况下,如稍后描述的,软件应用程序10更新高速缓存器和数据库两者,使得从不需要重新执行图2的过程。
图3描述了同时地从软件应用程序10更新数据库和高速缓存器的过程。
为了始终保持数据库和高速缓存器内容相干,软件应用程序10始终更新高速缓存器和数据库两者。然后用先前描述的“设定”操作310来完成高速缓存器的更新。同时,使用在使用中的DBMS的查询语言来执行数据库的“更新”305。在已由应用程序将操作委托320给数据库之后,更新是有效的。
更确切地,当在数据库中完成更新时不完成设定(Set),而是当委托完成时。应用程序保持要在存储器中设定的数据直至委托完成为止。在更新305与设定310之间可能存在大量的步骤。然而,意图接连地执行设定310和委托320。
在稳态下,即在***已经启动并运行相当长的时间段之后,数据库的全部内容已最后产生并分布在所有高速缓存器节点30上;然后,更新操作、即内容更新、***和删除是需要在数据库接口上上执行的仅有操作,因此大大地降低数据库负荷。在图7中描述了触发高速缓存器中的相应数据的无效的删除操作的情况。
并且,必须注意的是从读和写操作两者填充本发明的高速缓存器,因为图3的过程并不假设需要履行任何特定条件以向高速缓存器进行写入。与其中仅使用读来填充高速缓存器的***相比,这明显对在通电之后加速高速缓存器节点30的填充有所贡献。这是可能的并因此被简单地完成,因为如前所述,保持由数据库和高速缓存器两者存储的数据实体被更新,这与其中数据库和高速缓存器内容一般地可明显不同以尝试保持高速缓存器存储要求最小的其他高速缓存器解决方案中或者当由从数据库的各种部分提取的分离数据片构建输送到软件应用程序10的高速缓存器数据实体时的情况不同。
图4描述了特定情况下的图2的过程,其中,由软件应用程序10来请求数据库的同时写入(例如更新),因此与其执行相干扰。
以与在图2中所述相同的方式,该过程以从高速缓存器“获得”210数据开始,后面是“未遇到”220,其触发从数据库进行的未遇到数据的获取230。然而,在正常地向软件应用程序10返回240未遇到数据的同时,还由软件应用程序10来接收用于该相同数据的写查询410。如在图3中所解释的那样执行写入。其在高速缓存器中用“设定”操作310且在数据库中用“更新”操作305来完成。当向高速缓存器发布“设定”且在数据库中发送“委托”320时,相应数据变得立即可用420。在触发设定之前,应用程序将数据保持在存储器中(“在存储器中设定”)。
然后,在这种特定情况下,不可用随后的“添加”250来进一步更新高速缓存器内容,其由从数据库获取230未遇到数据而产生,因为此后者已被同时地更新。然后实际上放弃“添加”252。返回否定确认(KO)262,其让软件应用程序10知道实际上尚未由“添加”操作来执行高速缓存器的更新。
因此,为了用在数据库中读取的数据来更新高速缓存器,本发明使用添加命令,使得我们可以在不必锁定数据库中的数据的情况下向高速缓存器发送数据。事实上,如果当尝试添加数据时数据仍不在高速缓存器中,则其将被有效地添加。如果其已同时地被更新过程所更新,添加将失败但这是可预期的:更新过程具有对数据库的锁定和因此对用于此密钥的更新的首要性,因此正常情况是这是留在高速缓存器中的那个。
本发明的这些特征允许与更新过程的非常平滑的集成,特别是因为数据库***和高速缓存器不能锁定或影响彼此的性能,同时仍确保绝不会在数据库中读取数据超过一次,因此在数据库上具有最低可能负荷。
图5给出了关于由软件应用程序10在数据库中和高速缓存器中同时地执行的数据更新的定时的更多细节。
软件应用程序10通过向数据库发布相应查询510以检索当前存储值来开始更新事务。同时地,为了防止从另一软件应用程序10发生同时更新,数据库管理***(DBMS)将当前存储值锁定。在软件应用程序层内,由软件应用程序10来处理数据。当数据准备好被DBMS更新530时,还执行软件应用程序10中的缓冲器高速缓存器540的更新,其保持要转送并存储在高速缓存器中的新数据。
然后,软件应用程序10可以委托在高速缓存器552中用“设定”操作立即执行的改变550,并且还委托给数据库554。可以注意到,新数据因此略微556在其事实上被委托且在数据库中可用558之前在高速缓存器中可用。参考556示出了时间帧,在该时间帧期间可使得更新在高速缓存器中可用于最终用户,同时其在数据库***20中尚不可用。
如果由于任何原因(例如,由于硬件和/或软件故障)委托未能正常地完成,则高速缓存器中的先前写操作、即“设定”操作552被退回,使得高速缓存器内容保持未改变。因此,如果委托失败,则向应用程序产生“委托KO”560,其然后朝着高速缓存器发布删除562以去除添加的数据。结果,然后同时地564在高速缓存器中存在错误的值。
因此,向高速缓存器提供非数据库相关并影响数据质量的最高性能:使用具有“请求委托”数据的委托前的写将更新传播到高速缓存器。如果对于高速缓存数据而言禁止延迟约束,则这使得高速缓存器中的数据与数据库相比提前“较坏”,但是没有任何额外成本,特别是没有普通两阶段委托架构的非常高的成本。此类质量满足用于可用性请求的数据质量要求,并且从最终用户角度看甚至可以视为优点。
图6描述了其中在高速缓冲器中和数据库中都不存在被查询数据的情况。这涵盖其中最终用户正在请求未被保持在数据库中的信息片的情况。
当发生这种情况时,为了防止数据库的进一步询问,还将相应数据的不存在记录到高速缓存器中。然后,在下一次从软件应用程序10询问高速缓存器时,直接地由高速缓存器本身来输送在数据库中不存在被查询数据的信息,因此进一步减少数据库负荷。
该过程类似于在图2中描述的那个。在向高速缓存器发出的“获得”操作210返回“未遇到”220之后,数据库中的相应数据的读取230还向软件应用程序10返回数据库“未遇到”640。然后,将数据的不存在添加650到高速缓存器中。类似于数据的情况,数据的不存在正在高速缓存器中变得立即可用270,其也向软件应用程序10返回确认260。
根据一个非限制性实施例,每个数据与报头相关联以形成记录,并且报头指示内容是否在数据库***20中未遇到。因此,仅读取记录的报头使得能够知道是否值得对数据库***进行获取。根据替换实施例,高速缓存器节点存储被关联到数据的特定值,所述特定值指示在数据库中不存在该数据。因此,仅读取记录的值使得能够知道是否值得对数据库***进行获取。
图7图示出在图3中已提到的情况,其中来自应用程序的特定更新操作是数据从数据库的删除705。总体上如在图3中所解释地那样执行此操作,只是被删除数据并未实际上被从高速缓存器去除,而是被“数据不存在”的指示替换。当由应用程序向数据库委托320删除时,用特定“SET”操作310将相应信息存储在高速缓存器中。“数据不存在”正在变得立即可用330。因此,如先前所讨论的,如果稍后对高速缓存器进行询问,则其可以直接地提供在高速缓存器和数据库两者都不再存在所请求数据的信息。
下面讨论其中必须修改本发明的数据库***的配置以例如应对业务增加的情况。必须添加额外高速缓存器节点以扩展如图1中所示的***配置,以便提供更多的高速缓存器存储容量并能够将增加的业务分布在数目更多的处理节点上。然而,用数目更多的节点,并且一般而言每当必须改变活动节点的数目时,必须重新计算在节点中唯一地对数据进行寻址的密钥以事实上允许整个业务均匀地分布在新的整套节点上。
本发明不假设根据被同样地存储并从数据库和高速缓存器检索的数据实体来计算密钥的任何特定方式。大多数时间,根据将由特定应用程序来处理的数据类型,使用某些散列函数,并且然后仅仅通过进一步计算它模节点的数目而从散列密钥导出节点寻址。因此,如果节点的数目改变,则获得不同的结果以用于检索在新配置的不同节点中可能需要寻找的特定数据实体。该问题来自这样的事实,即配置更新并不是原子的,并且必须在数据库***完全可操作的同时透明地执行。并不使得所有高速缓存器客户端同时地知道新的配置。这意味着将基于新的配置来完成数据的某些写入,同时其他的将仍使用旧的配置。结果将是高速缓存器与数据库之间的不一致数据集。
本发明通过启用所谓的“双馈”的程序来照顾这一点。双馈在于除正常地被用于高速缓存器的那个之外还保持一个额外配置,因此名为“双馈”。额外配置并未被默认地使用,但是可以在配置改变的时间内被激活。当其被激活时,将所有写操作发送到标准配置和双馈配置两者。生存时间(TTL)是被关联到高速缓存器中的每个项目的性质。如名称所表示的,其对应于项目有效的时间段。一旦其到期,则不再能从高速缓存器检索该项目,导致高速缓存器未遇到,如同该数据未遇到一样。这可按配置来设定:一个用于标准配置且一个用于双馈配置。当未设定生存时间时,该项目从不到期。
由于双馈配置的激活并不是原子的,所以必须首先将其激活短的生存时间。一旦双馈配置被完全激活,则可以去除生存时间。只有一旦生存时间已到期才能交换标准配置和双馈配置。一旦配置改变结束,则可以将双馈去激活。在其中正在传播配置的步骤(双馈的激活/去激活)期间,可以写入某些“无效”数据,但仅在其未被读取的位置上。因此,过程如下:
—创建具有短TTL的双馈配置
—激活双馈配置,等待其传播
—从双馈配置去除短TTL
—交换标准和双馈配置,等待其传播
—双馈去激活
下面描述允许以在线方式对***的任何改变的一个过程。
提出的架构提供可缩放性,使得整个***稍后可能不能在没有高速缓存器的情况下正常地工作的状态。为了处理这种情况,根据本发明的实施例,提出意图在线地完成所有维护操作,每次影响至少一个节点(或业务的等价部分)(例如,高速缓存器节点升级或替换逐个地完成,使用双馈机制来执行全局高速缓存器改变)以降低对数据库的影响。
—逐个地完成高速缓存器节点升级或替换。***将优选地使用数据库来检索本应由此节点托管的数据。
—使用前一段落中描述的如下双馈机制来执行全局高速缓存器改变,通常添加或去除或改变多个高速缓存器节点,其将导致全局分布急剧地改变。
从以上描述,看起来很明显的是本发明允许由于一种机制而在高速缓存器与数据库之间保持数据一致,该机制不严格地说是服从ACID的,但是高度可缩放,对数据库无影响,允许100%命中率,并且首先完全满足数据质量需要。另外,本发明允许非常动态地高速缓存数据,即通常每单元数据每秒达到几十次写入,同时仍受益于高速缓存器的卸载效应。
Claims (15)
1.一种在数据存储***(100)中存储数据和从数据存储***(100)中检索数据的方法,数据存储***(100)包括软件应用程序(10)、一个或多个数据库***(20)和多个高速缓存器节点(30),该软件应用程序被配置成接收要求数据的至少一次读取或数据的至少一次写入的用户请求,软件应用程序还被配置成向数据存储***(100)发送读查询或写查询以处理用户请求,该方法的特征在于软件应用程序独立地与一个或多个数据库***和所述多个高速缓存器节点(30)接口,并且在于该方法包括由软件应用程序用至少一个数据处理器执行的以下步骤:
在接收到要求数据的至少一次读取的用户请求时,软件应用程序(10)单独地向所述多个高速缓存器节点(30)发送读查询(210);
如果软件应用程序(10)响应于读查询而从至少一个高速缓存器节点(30)接收到被查询数据,则使用该被查询数据来处理用户请求,
如果软件应用程序(10)响应于读查询而从所有高速缓存器节点(30)接收到未遇到(220),则对一个或多个数据库***(20)进行获取(230);在已从一个或多个数据库***(20)检索到被查询数据时,软件应用程序(10)使用被查询数据来处理用户请求并向所述至少一个高速缓存器节点(30)发送被查询数据以及将被查询数据添加(250)到所述至少一个高速缓存器节点(30)的指令;
在接收到要求数据的至少一次写入的用户请求时,软件应用程序(10)发送用于对一个或多个数据库***(20)写入的指令,并且还发送用于同时地对所述多个高速缓存器节点(30)进行写入的指令;从而,在数据存储***(100)的每次未遇到读查询时和每次写查询时填充所述多个高速缓存器节点(30)。
2.根据权利要求1所述的方法,其中,写查询包括以下各项中的至少一个:数据库***(20)中的数据的添加、更新和删除。
3.根据前述权利要求中的任一项所述的方法,其中,所述软件应用程序(10)在被查询数据到所述至少一个高速缓存器节点的成功添加完成时接收肯定确认(260)。
4.根据前述权利要求中的任一项所述的方法,其中,如果数据的写入(410)在同时地从一个或多个数据库***获取同一被查询数据时发生,则放弃被查询数据在所述至少一个高速缓存器节点中的后续添加(252),并且向软件应用程序(10)返回否定确认(262);从而使得软件应用程序能够替代地使用写入数据(420)。
5.根据前述权利要求中的任一项所述的方法,其中,在发送用于在一个或多个数据库***(20)中写入数据的指令和用于同时地对所述多个高速缓存器节点(30)进行写入的指令时执行以下步骤:
从一个或多个数据库***检索(510)被实施写入的当前存储数据,并锁定所述当前存储数据;
在一个或多个数据库***中写入(530)要被存储的新数据;
在软件应用程序(10)中写入(540)高速缓存缓冲器以临时地保持要被存储的所述新数据;
向所述至少一个高速缓存器节点转送并向其中设定(552)要被存储的所述新数据;
将事务委托(554)给所述一个或多个数据库***。
6.根据权利要求5所述的方法,其中,如果委托失败,则应用程序软件(10)向所述至少一个高速缓存器节点发送指令以删除先前已设定的所述新数据。
7.根据前述权利要求中的任一项所述的方法,其中,如果被查询数据既不存在于一个或多个数据库***中也不存在于所述多个高速缓存器节点(30)中,则
在对一个或多个数据库***(20)进行获取(30)时,向软件应用程序返回未遇到(640)而不是被查询数据;
软件应用程序(10)向至少一个高速缓存器节点(30)发送数据的不存在(650),该数据的不存在被添加到用于相应被查询数据的所述至少一个高速缓存器节点(30),该数据的不存在变得对于所有接下来的读查询立即可用(270);
从而,避免软件应用程序(10)必须进一步获取一个或多个数据库(10)以尝试检索未遇到的被查询数据。
8.根据前述权利要求中的任一项所述的方法,其中,软件应用程序(10)独立地在第一专用接口(12)上与一个或多个数据库***(20)以及在第二专用接口(14)上与所述多个高速缓存器节点(30)接口。
9.根据前述权利要求中的任一项所述的方法,其中,高速缓存器节点和数据库的数据模型是一致的,使得可以导出确切相同的寻址密钥以用于访问高速缓存器节点和数据库数据。
10.根据前述权利要求中的任一项所述的方法,其中,数据被相同地存储在数据库中和至少一个高速缓存器节点中,当存在时,或者以保证高速缓存器中和数据库中的相同数据的寻址一致性的方式存储。
11.一种包含软件程序指令的计算机程序产品,其中,由至少一个数据处理器来执行软件程序指令导致执行操作,该操作包括如前述权利要求中的任一项中的方法的执行。
12.一种数据存储***(100),包括一个或多个数据库***(20)、至少一个高速缓存器节点(30)、至少一个数据处理器和软件应用程序(10),其中,由所述至少一个数据处理器来执行软件应用程序导致操作的执行,该操作包括如在权利要求1—10中的任一项中的方法的执行,并且其中,一个或多个数据库***(20)和所述至少一个高速缓存器节点(20)被配置成由软件应用程序(10)独立地驱动。
13.根据权利要求12所述的数据存储***(100),其中,高速缓存器节点的数目和存储资源适合于保持整个数据库***的内容。
14.根据权利要求12或13所述的数据存储***(100),其中,数据库***(20)的一些数据被存储在一个以上的高速缓存器节点(30)中。
15.一种包括权利要求12至14中的任一项所述的数据存储***的旅行提供商的库存。
Applications Claiming Priority (5)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP12368027.4 | 2012-09-27 | ||
US13/628,517 | 2012-09-27 | ||
EP12368027.4A EP2713284B1 (en) | 2012-09-27 | 2012-09-27 | Method and system of storing and retrieving data |
US13/628,517 US9037801B2 (en) | 2012-09-27 | 2012-09-27 | Method and system of storing and retrieving data |
PCT/EP2013/002655 WO2014048540A1 (en) | 2012-09-27 | 2013-09-04 | Method and system of storing and retrieving data |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104662539A true CN104662539A (zh) | 2015-05-27 |
CN104662539B CN104662539B (zh) | 2018-02-23 |
Family
ID=49150900
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201380050168.7A Active CN104662539B (zh) | 2012-09-27 | 2013-09-04 | 存储并检索数据的方法和*** |
Country Status (8)
Country | Link |
---|---|
JP (1) | JP6511394B2 (zh) |
KR (1) | KR101690288B1 (zh) |
CN (1) | CN104662539B (zh) |
AU (1) | AU2013324689B2 (zh) |
CA (1) | CA2882498C (zh) |
IN (1) | IN2015DN01332A (zh) |
SG (1) | SG11201501650WA (zh) |
WO (1) | WO2014048540A1 (zh) |
Cited By (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106846802A (zh) * | 2017-02-09 | 2017-06-13 | 陕西公路交通科技开发咨询公司 | 一种高速路数据处理方法及装置 |
CN110502534A (zh) * | 2018-05-17 | 2019-11-26 | 艾玛迪斯简易股份公司 | 数据库高速缓存 |
CN113490931A (zh) * | 2019-02-14 | 2021-10-08 | 艾玛迪斯简易股份公司 | 处理复杂数据库查询 |
CN116034351A (zh) * | 2020-09-03 | 2023-04-28 | 格步计程车控股私人有限公司 | 用于维护数据库的数据库***和方法 |
CN116521969A (zh) * | 2023-02-28 | 2023-08-01 | 华为云计算技术有限公司 | 一种数据检索方法、服务端、***及相关设备 |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
KR102415155B1 (ko) | 2018-05-11 | 2022-06-29 | 삼성에스디에스 주식회사 | 데이터 검색 장치 및 방법 |
CN111125138B (zh) * | 2019-12-26 | 2023-08-25 | 深圳前海环融联易信息科技服务有限公司 | 一种轮询查询数据的方法、装置、计算机设备及存储介质 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101410836A (zh) * | 2006-06-08 | 2009-04-15 | 国际商业机器公司 | 向应用提供对存储在数据库中的数据的访问的方法 |
US20100180208A1 (en) * | 2009-01-15 | 2010-07-15 | Kasten Christopher J | Server side data cache system |
CN102142039A (zh) * | 2004-12-17 | 2011-08-03 | 亚马逊科技公司 | 用于进行数据仓储的***和方法 |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JPH08147201A (ja) * | 1994-11-18 | 1996-06-07 | Nippon Telegr & Teleph Corp <Ntt> | トラヒックデータキャッシュ方法 |
US6256710B1 (en) * | 1995-04-28 | 2001-07-03 | Apple Computer, Inc. | Cache management during cache inhibited transactions for increasing cache efficiency |
US6067550A (en) * | 1997-03-10 | 2000-05-23 | Microsoft Corporation | Database computer system with application recovery and dependency handling write cache |
US6609126B1 (en) * | 2000-11-15 | 2003-08-19 | Appfluent Technology, Inc. | System and method for routing database requests to a database and a cache |
US7434000B1 (en) * | 2004-06-30 | 2008-10-07 | Sun Microsystems, Inc. | Handling duplicate cache misses in a multithreaded/multi-core processor |
EP1962195A4 (en) * | 2005-12-02 | 2009-01-21 | Ibm | SYSTEM FOR IMPROVING ACCESS EFFICIENCY TO A DATABASE AND METHOD THEREFOR |
US7711657B1 (en) * | 2006-06-26 | 2010-05-04 | Hewlett-Packard Development Company, L.P. | Resource-reservation pricing structures based on expected ability to deliver |
US8095618B2 (en) * | 2007-03-30 | 2012-01-10 | Microsoft Corporation | In-memory caching of shared customizable multi-tenant data |
JP5163171B2 (ja) * | 2008-02-15 | 2013-03-13 | 日本電気株式会社 | キャッシュシステムおよびサーバ |
CN102103523A (zh) * | 2009-12-22 | 2011-06-22 | 国际商业机器公司 | 锁分配控制的方法和装置 |
-
2013
- 2013-09-04 WO PCT/EP2013/002655 patent/WO2014048540A1/en active Application Filing
- 2013-09-04 CA CA2882498A patent/CA2882498C/en active Active
- 2013-09-04 CN CN201380050168.7A patent/CN104662539B/zh active Active
- 2013-09-04 JP JP2015533468A patent/JP6511394B2/ja active Active
- 2013-09-04 KR KR1020157007498A patent/KR101690288B1/ko active IP Right Grant
- 2013-09-04 AU AU2013324689A patent/AU2013324689B2/en active Active
- 2013-09-04 IN IN1332DEN2015 patent/IN2015DN01332A/en unknown
- 2013-09-04 SG SG11201501650WA patent/SG11201501650WA/en unknown
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102142039A (zh) * | 2004-12-17 | 2011-08-03 | 亚马逊科技公司 | 用于进行数据仓储的***和方法 |
CN101410836A (zh) * | 2006-06-08 | 2009-04-15 | 国际商业机器公司 | 向应用提供对存储在数据库中的数据的访问的方法 |
US20100180208A1 (en) * | 2009-01-15 | 2010-07-15 | Kasten Christopher J | Server side data cache system |
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN106846802A (zh) * | 2017-02-09 | 2017-06-13 | 陕西公路交通科技开发咨询公司 | 一种高速路数据处理方法及装置 |
CN110502534A (zh) * | 2018-05-17 | 2019-11-26 | 艾玛迪斯简易股份公司 | 数据库高速缓存 |
CN110502534B (zh) * | 2018-05-17 | 2022-07-26 | 艾玛迪斯简易股份公司 | 数据库高速缓存 |
CN113490931A (zh) * | 2019-02-14 | 2021-10-08 | 艾玛迪斯简易股份公司 | 处理复杂数据库查询 |
CN116034351A (zh) * | 2020-09-03 | 2023-04-28 | 格步计程车控股私人有限公司 | 用于维护数据库的数据库***和方法 |
CN116521969A (zh) * | 2023-02-28 | 2023-08-01 | 华为云计算技术有限公司 | 一种数据检索方法、服务端、***及相关设备 |
CN116521969B (zh) * | 2023-02-28 | 2023-12-29 | 华为云计算技术有限公司 | 一种数据检索方法、服务端、***及相关设备 |
Also Published As
Publication number | Publication date |
---|---|
KR101690288B1 (ko) | 2016-12-28 |
AU2013324689A1 (en) | 2015-04-09 |
WO2014048540A1 (en) | 2014-04-03 |
AU2013324689B2 (en) | 2016-07-07 |
IN2015DN01332A (zh) | 2015-07-03 |
CA2882498C (en) | 2020-11-17 |
JP2015535995A (ja) | 2015-12-17 |
CA2882498A1 (en) | 2014-04-03 |
KR20150075407A (ko) | 2015-07-03 |
CN104662539B (zh) | 2018-02-23 |
JP6511394B2 (ja) | 2019-05-15 |
SG11201501650WA (en) | 2015-04-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN104662539A (zh) | 存储并检索数据的方法和*** | |
US11520770B2 (en) | System and method for providing high availability data | |
US8484417B2 (en) | Location updates for a distributed data store | |
US7774354B2 (en) | Method and system for response time optimization for task list retrieval from databases | |
US8768915B2 (en) | Database system and method of optimizing cross database query | |
CN103312624B (zh) | 一种消息队列服务***和方法 | |
US20140089588A1 (en) | Method and system of storing and retrieving data | |
US20120239620A1 (en) | Method and system for synchronization mechanism on multi-server reservation system | |
CN105393243A (zh) | 事务定序 | |
CN110019280A (zh) | 用于分布式数据库***的***范围检查点避免 | |
CN104160381A (zh) | 多租户环境中租户特定数据集的管理 | |
CN102158540A (zh) | 分布式数据库实现***及方法 | |
JP2014535081A (ja) | クライアント/サーバシステムの分散した複製コンテンツの強一貫性を維持するための方法およびシステム | |
CN110209535A (zh) | 用于分布式数据库***的快速崩溃恢复 | |
CN102640125A (zh) | 分布式内容存储和取回 | |
CN106981024A (zh) | 一种交易限额计算处理***及其处理方法 | |
CN103392330A (zh) | 用于与独立的外部***会话同步的***和方法 | |
CN1829974B (zh) | 借助于非失败节点的并行恢复 | |
EP2318914A1 (en) | Method and apparatus for audit logging and role based security using one-way proxy architecture | |
JP7368531B2 (ja) | ブロックチェーンに基づく部屋在庫管理システム | |
EP2713284B1 (en) | Method and system of storing and retrieving data | |
TW202341056A (zh) | 基於區塊鏈的房間庫存管理系統 | |
Tomsic | Exploring the design space of highly-available distributed transactions | |
JPWO2015097991A1 (ja) | トランザクション分散処理装置、方法、システム、および、記憶媒体 | |
JP6005752B2 (ja) | 情報処理装置、データ更新方法及びプログラム |
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 |