CN109313644B - 数据库代理所用的系统和方法 - Google Patents
数据库代理所用的系统和方法 Download PDFInfo
- Publication number
- CN109313644B CN109313644B CN201780035020.4A CN201780035020A CN109313644B CN 109313644 B CN109313644 B CN 109313644B CN 201780035020 A CN201780035020 A CN 201780035020A CN 109313644 B CN109313644 B CN 109313644B
- Authority
- CN
- China
- Prior art keywords
- database
- request
- data
- read request
- interface
- 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
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/01—Protocols
- H04L67/10—Protocols in which an application is distributed across nodes in the network
- H04L67/1097—Protocols in which an application is distributed across nodes in the network for distributed storage of data in networks, e.g. transport arrangements for network file system [NFS], storage area networks [SAN] or network attached storage [NAS]
-
- 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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/60—Scheduling or organising the servicing of application requests, e.g. requests for application data transmissions using the analysis and optimisation of the required network resources
-
- 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/2458—Special types of queries, e.g. statistical queries, fuzzy queries or distributed queries
- G06F16/2471—Distributed queries
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04L—TRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
- H04L67/00—Network arrangements or protocols for supporting network services or applications
- H04L67/50—Network services
- H04L67/56—Provisioning of proxy services
- H04L67/568—Storing data temporarily at an intermediate stage, e.g. caching
Landscapes
- Engineering & Computer Science (AREA)
- Databases & Information Systems (AREA)
- Theoretical Computer Science (AREA)
- Computer Networks & Wireless Communication (AREA)
- Signal Processing (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
一种数据库代理,其包括:请求处理器;缓存器;数据库插件;以及用于将数据库代理连接至客户端装置、其它数据库代理、以及数据库服务器的接口。请求处理器被配置为从客户端接收读请求,判断读请求是否被分配至数据库代理,并将读请求的结果返回至客户端。在读请求未被分配至数据库代理的情况下,将该读请求转发至另一数据库代理。在读请求被分配至数据库代理的情况下,在结果存储在缓存器中或者被转发至数据库插件的情况下使用缓存器中所存储的数据来处理读请求,其中数据库插件用于将读请求转发至数据库服务器,从数据库服务器接收结果,并将结果返回至请求处理器以存储在缓存器中。
Description
相关申请
本申请要求2016年11月7日提交的美国实用专利申请15/344,993的权益,并且要求2016年4月6日提交的美国临时专利申请62/319,223以及2016年9月2日提交的美国临时专利申请62/383,297的优先权,上述文献都通过引用而全文并入于此。
技术领域
本发明一般涉及计算系统以及应用服务器和数据库服务器/存储之间的代理技术的使用。
背景技术
数据中心架构在过去十年中快速地演进。这包括具有一个或多个NoSQL数据服务器(也称为NoSQL数据存储)的系统所用的数据中心架构的变化。各个客户可以针对特定应用具有不同的数据中心架构。
通常,也使用NoSQL数据存储的数据中心架构存在四层。这四层是:包括前端web服务器的web层、包括应用服务器的应用层、包括数据库服务器的数据层、以及存储层。图1示出包括四层的互联网公司(例如,Yahoo、LinkedIn、eBay等)的数据中心的典型架构。虚线基于与特定数据中心架构相关的功能属性来将不同的服务器层分离开。
在图1的数据中心架构中,应用服务器负责运行业务或应用逻辑。存储层经由诸如图1的NoSQL服务器等的数据库服务器进行访问。这些NoSQL服务器用作NoSQL数据存储的访问介质。应用逻辑访问NoSQL数据存储以管理数据。以下是从数据存储中检索所需的(读操作)数据所涉及的典型步骤:
1.应用逻辑想要与关键字相关联的特定数据。例如,该应用声明JavaScript对象表示法(JSON)。
2.应用将打开到NoSQL数据服务器的连接,并请求与该关键字关联的数据。
3.如果NoSQL数据服务器声明另一种格式,例如二进制JSON(BSON),则应用服务器需要首先将其请求转换为BSON(或NoSQL服务器需要解析JSON)。
4.NoSQL服务器现将检查与关键字关联的数据是否在其本地缓存中可用,如果不可用,则将从持久存储提取该数据。
5.在NoSQL服务器必须从持久存储进行提取的情况下,需要解析关键字是否指向二级索引或主索引。如果索引是二级索引,则需要将该索引转换为主索引。
6.最后,现在从本地缓存或持久存储检索数据并将数据返回至应用逻辑。
该方法遭受若干可能的瓶颈,这些瓶颈限制了使用NoSQL数据存储的应用部署的有效扩展。因此,期望针对NoSQL数据中心架构的改进方法。
发明内容
根据一些实施例,NoSQL代理包括:分组处理器,用于通过网络与一个或多个应用服务器、NoSQL数据存储和对等NoSQL代理交换消息;代理有限状态机,用于管理NoSQL代理所接收到的数据访问命令;接口,用于访问混合存储器管理单元中的缓存数据;以及数据访问命令处理单元,用于将二级索引转化为主索引,在多个数据格式之间转化数据,并且评价和过滤数据访问命令结果。NoSQL代理被配置为:接收数据访问命令,在与数据访问命令相关联的数据缓存在本地的情况下使用缓存数据来处理数据访问命令,在数据缓存在对等NoSQL代理其中之一中的情况下将数据访问命令转发至对等NoSQL代理其中之一,在数据没有被缓存或者数据的变化被直写入NoSQL数据存储其中之一的情况下将数据访问命令转发至NoSQL数据存储其中之一,并且返回数据访问命令的结果。
根据一些实施例,数据库代理包括:请求处理器;缓存器,其连接至所述请求处理器;数据库插件,其连接至所述请求处理器;第一接口,用于将所述请求处理器连接至一个或多个客户端装置;第二接口,用于将所述请求处理器连接至一个或多个其它数据库代理;以及第三接口,用于将所述数据库插件连接至一个或多个数据库服务器。所述请求处理器被配置为使用所述第一接口从客户端接收数据库读请求,判断所述数据库读请求是否被分配至所述数据库代理,以及使用所述第一接口将所述数据库读请求的结果返回至所述客户端。在所述数据库读请求未被分配至所述数据库代理的情况下,所述请求处理器被配置为使用所述第二接口将所述数据库读请求转发至所述一个或多个其它数据库代理中的第一个其它数据库代理。在所述数据库读请求被分配至所述数据库代理的情况下,所述请求处理器被配置为在与所述数据库读请求相关联的数据存储在所述缓存器中的情况下使用所述缓存器中所存储的数据来处理所述数据库读请求、并且在与所述数据库读请求相关联的数据未存储在所述缓存器中的情况下将所述数据库读请求转发至所述数据库插件,并将从所述数据库插件接收到的所述数据库读请求的结果存储在所述缓存器中。所述数据库插件被配置为:将所述数据库读请求转发至所述一个或多个数据库服务器中的第一个数据库服务器;从所述一个或多个数据库服务器中的所述第一个数据库服务器接收所述数据库读请求的结果;以及将所述结果返回至所述请求处理器。
根据一些实施例,使用数据库代理来处理数据库读请求的方法包括:第一数据库代理的请求处理器使用第一接口从客户端接收数据库读请求、判断所述数据库读请求是否被分配至所述第一数据库代理、并且使用所述第一接口将所述数据库读请求的结果返回至所述客户端。在所述数据库读请求未被分配至所述第一数据库代理的情况下,所述方法还包括所述请求处理器使用第二接口将所述数据库读请求转发至第二数据库代理。在所述数据库读请求被分配至所述第一数据库代理的情况下,所述方法还包括:利用所述请求处理器,在与所述数据库读请求相关联的数据存储在所述缓存器中的情况下使用所述缓存器中所存储的数据来处理所述数据库读请求;以及利用所述第一数据库代理的数据库插件,在与所述数据库读请求相关联的数据未存储在所述缓存器中的情况下将所述数据库读请求转发至数据库服务器、并将从所述数据库插件接收到的所述数据库读请求的结果存储在所述缓存器中。
附图说明
图1是根据一些实施例的典型数据中心架构的简化图。
图2是根据一些实施例的NoSQL数据服务器/存储用例的简化图。
图3是根据一些实施例的现有数据中心架构内的NoSQL代理的简化图。
图4是根据一些实施例的、在数据库服务器中具有NoSQL代理的数据中心架构的简化图。
图5是根据一些实施例的、在应用服务器中具有NoSQL代理的数据中心架构的简化图。
图6是根据一些实施例的、在支持本机应用编程接口的数据库服务器中具有NoSQL代理的数据中心架构的简化图。
图7是根据一些实施例的NoSQL代理与应用服务器以及NoSQL数据服务器之间的连接建立的方法的简化图。
图8是根据一些实施例的使用NoSQL代理来进行CRUD操作的方法的简化图。
图9是根据一些实施例的NoSQL代理所用的内部架构的简化图。
图10是根据一些实施例的使用数据库代理的数据中心架构的简化图。
图11是根据一些实施例的使用数据库代理来处理读请求的方法的简化图。
图12是根据一些实施例的使用数据库代理来处理更新、写入、或删除请求的方法的简化图。
在附图中,具有相同标志的元件具有相同或相似的功能。
具体实施方式
在以下描述中,阐述了描述与本发明一致的一些实施例的具体详情。然而,对于本领域技术人员明显的是,可以在没有这些具体详情中的一些或全部的情况下实践一些实施例。这里所公开的具体实施例意在为说明性的而非限制性的。本领域技术人员可以实现其它元件,尽管这里没有特别描述,但这些其它元件在本发明的范围和精神内。另外,除非另外特别描述或者如果结合一个实施例所示出和描述的一个或多个特征使得实施例不起作用,否则为了避免不必要的重复,这一个或多个特征可以并入其它实施例中。
图2示出图1中的数据中心架构的子集视图。图2有助于示出存在挑战的架构中的点。
在图2中,注意与基于容器的部署相结合的应用服务器上的表述性状态转移(REST)应用编程接口(API)的使用。许多NoSQL数据存储支持如下的四种主要操作:使用首字母缩写CRUD表示的创建、读、更新、以及删除。如下所述,各种实施例与容器技术正交,并且将与基于容器和虚拟机(VM)这两者的部署模型以及裸机服务器一起工作,而无需使用容器或VM。通常使用NoSQL数据存储的两个主要度量来测量性能:第一是使用每秒事务数(TPS)来测量吞吐量,第二是应用服务器和NoSQL数据存储之间的数据访问延迟。在一些示例中,通常根据系统级协议(SLA)来提供利用这些或其它度量进行测量的性能。
图2还示出REST API,但是在所述实施例的上下文中,这并不排除基于本机API的解决方案。
存在若干可能的瓶颈和限制,这些瓶颈和限制限制了使用具有图2所示的架构的NoSQL数据存储的应用部署的有效扩展。
1.连接分散-聚集:如图2所见,应用服务器和NoSQL数据服务器之间的网络连接激增。因此,要求应用服务器和NoSQL数据服务器都支持大量网络连接,对NoSQL数据服务器更是如此。这通常会影响应用服务器和NoSQL数据存储(SLA)之间的访问延迟。
2.需要增加的操作数据集:操作数据集是开发数据本地化的重要标准。NoSQL数据存储的操作数据集是当前正在处理的数据集及其相邻数据集(或相关数据集)。在该架构的实施例中,操作数据集受到NoSQL数据服务器上的可用内存的限制。添加SSD闪速存储器是一种选择,但是对于管理闪速存储器,这将减损NoSQL数据服务器有用周期。
3.数据串行化和解串行化(串行解串(serdes)):鉴于应用使用不同的串行化协议并且NoSQL数据存储使用不同的串行化协议,在NoSQL数据服务器中或者在应用服务器上进行附加处理。这导致较低的吞吐量(TPS)。
4.将二级索引转换为主索引:对于从持久存储中检索到的数据,NoSQL数据服务器通常必须将二级索引转换为主索引。例如,在一些较大安装中,客户最终使用二级非阻塞专用索引引擎来查找与二级索引相关联的主索引(例如,LinkedIn上的Espresso使用Lucene来进行二级索引查找)。通常,写吞吐量的性能下降5~10%。然而,如下所述,二级索引引擎是可选的,并且在所述实施例中可以省略。
5.对压缩、解压缩、加密、安全性和/或其它相关协议的管理通常可能对吞吐量等产生负面影响,这是因为处理器和其它计算资源通常专用于这些任务。
6.业务连续性:当无法预料的事件导致NoSQL数据服务器当机时,能够从副本存储向应用提供所需数据的服务也是有利的。
使NoSQL数据存储扩展以服务于数百万事务通常涉及将许多CPU服务器添加到应用层以及NoSQL数据层两者。这使得NoSQL数据存储的扩展效率非常低。
可以使用若干方法来创建可扩展的NoSQL数据存储。这些方法包括:使用具有较大内存的商品服务器来添加缓存层(例如memcached等),使用应用服务器中的连接池来与NoSQL数据存储进行对话,从而使用固定数量的连接并对调度器进行写入以通过这些连接来管理数据、并使用在没有缓存的情况下在应用服务器中实现的NoSQL代理来减少与缓存层的连接数。这些方法依赖于单独的缓存(或存储器)层。为了以有效的方式支持大的可寻址内存空间,需要一种可以支持SRAM、DRAM和闪速存储器的分层存储器架构。
下述的实施例中的NoSQL代理支持分层存储器架构。以上方法支持诸如memcached等的本机线路协议,从而以应用逻辑中的较低灵活性为代价来保持协议开销最小化。支持REST接口使得应用逻辑能够灵活地在必要的情况下迁移至另一NoSQL数据存储。在一些示例中,这里提出的NoSQL代理支持REST接口,这是因为有效的REST实现导致可忽略的开销。最后,高吞吐量和低延迟分组处理器使得能够在网络接口(例如,以太网接口)处支持不同的网络带宽。例如,NoSQL代理可以在同一架构中支持1Gb/s~40Gb/s。
为了解决以上挑战,期望一种用于提供用以对应用服务器和NoSQL数据服务器之间的附加业务进行扩展的有效解决方案的NoSQL代理。如下所述,NoSQL代理的若干实施例解决了这些挑战。
NoSQL代理是位于应用服务器和NoSQL数据服务器之间的代理。其主要功能是用作底层NoSQL数据存储的代理,同时支持REST API。应用逻辑在不了解底层的特定NoSQL数据存储的情况下与NoSQL代理的REST API进行交互。图3示出基于图2中所使用的架构的NoSQL代理的使用。注意,NoSQL代理可以驻留在NoSQL数据服务器或应用服务器中。以下进一步详细描述NoSQL代理驻留在扩展上的位置及其解决先前识别出的挑战的能力的启示。
NoSQL代理是允许有效地扩展应用服务器和NoSQL数据服务器之间的业务的代理。以下列出了允许NoSQL代理扩展到数百万个低延迟事务的NoSQL代理的特征。随着摩尔定律的扩展,增益将相应地扩展。
●高吞吐量–每秒数百万个事务(例如高达10M TPS)
●网络IO-高扇出、低延迟的分组处理器
○高达10,000个TCP连接,各连接的延迟<1ms
●配置关键字值(KV)存储或缓存的大小的灵活性
○使用分层存储器的万亿字节的数据存储(例如,高达4TB)
●线路速率数据串行化和解串行化
○支持多种数据串行化/解串行化(串行解串)格式(JSON、BSON、Protobuf...)
●线路速率二级索引到主索引的转换
●针对如何利用强大的默认方式来管理数据的完全控制
○经由配置API(动态的和静态的)支持的数据的持久性
○使存储中的任意数据量过期/排出的能力(数据刷新)
○在应用服务器中进行部署的情况下不复制缓存数据
-用以在应用服务器上查询其它代理的网络化接口
●高可用性-即使在NoSQL数据服务器当机的情况下也可运作
●应用逻辑所用的REST API
图4中示出在NoSQL代理驻留在NoSQL数据服务器中的示例性用例。在该用例中,典型的呼叫顺序如下:
1.应用逻辑维护对NoSQL代理开放的连接池。当应用逻辑需要检索特定数据时,应用逻辑使用关联的关键字并使用NoSQL代理所支持的REST API(如后面在文献中所述)来请求数据。
2.NoSQL代理读取REST API并检查所请求的关键字在NoSQL代理的本地缓存中是否可用,如果是,则以适当的数据格式返回数据。如果关键字在缓存中不可用,则NoSQL代理检查关键字是否指向二级索引,如果是,则将二级索引转换为主索引,然后从持久性NoSQL存储中检索相应的数据。然后,NoSQL代理将数据返回到应用逻辑,同时将数据添加到本地缓存并更新最近最少使用(LRU)的标记。
值得注意的是,NoSQL代理正在执行各种计算步骤,诸如网络连接管理、数据串行解串、以及二级索引到主索引的转换等。因此,缓解了这些任务的NoSQL数据服务器。
图5中示出NoSQL代理驻留在应用服务器中并使用REST API的示例性用例。在该用例中,典型的呼叫顺序如下:
1.应用逻辑维护对NoSQL代理开放的连接池。应用逻辑经由REST API来与代理进行对话(可以根据需要通过PCIe链路实现)。当应用逻辑使用特定数据格式时,该应用逻辑向NoSQL代理请求相同的数据格式。
2.NoSQL代理转而查找数据在缓存或任何其它对等代理中是否可用,或者NoSQL代理定位到要请求数据的目标NoSQL数据服务器。一旦识别出数据的位置,NoSQL代理将会检索数据并将其返回给应用逻辑。与较早的用例相同,Proxy将执行二级索引向主索引的转换以及数据串行解串。
在该使用场景中,NoSQL代理具有较低的延迟,这是因为NoSQL代理与应用逻辑接近,从而避免了到架顶式(TOR)交换机的额外跳跃等。
图6中示出NoSQL代理驻留在NoSQL数据服务器中并使用本机API的示例性用例。除使用本机API而不是REST API外,图6的NoSQL代理的典型呼叫顺序与图4的NoSQL代理的呼叫顺序相同。
图7是根据一些实施例的NoSQL代理与应用服务器以及NoSQL数据服务器之间的连接建立方法的简化图。如图7所示,NoSQL代理能够通过监视应用服务器和NoSQL服务器之间的连接数来支持应用服务器和NoSQL服务器之间的连接管理。
图8是根据一些实施例的使用NoSQL代理进行CRUD操作的方法的简化图。如图8所示,基于命令类型(创建、读、更新、和/或删除)以及与命令相关联的数据所在的位置来处理命令。在命令是创建命令的情况下,NoSQL代理创建新数据并将其存储在其本地数据存储中,然后使用直写策略将创建命令传递给NoSQL数据存储。在命令是读、更新或删除命令的情况下,NoSQL代理首先检查关联数据是否缓存在本地。在数据缓存在本地的情况下,通过从本地数据存储返回数据的副本来直接处理读命令。在数据缓存在本地的情况下,通过在本地数据存储中进行更改来直接处理更新和删除命令,然后将命令转发至NoSQL数据存储以在NoSQL数据存储中进行相应的更新或删除数据的副本。在数据未缓存在本地的情况下,NoSQL代理进行检查以查看对等NoSQL代理是否已缓存数据。在对等NoSQL代理缓存了数据的情况下,将命令转发到该对等NoSQL代理以进行处理。在数据未缓存在本地或对等NoSQL代理中的情况下,将命令传递到NoSQL数据存储以进行处理。在一些示例中,当在数据未缓存在本地的情况下将读和/或更新转发到NoSQL数据存储时,可以将数据读取和/或更新缓存在本地以支持使用该数据的将来命令。
图9是根据一些实施例的NoSQL代理的内部架构的简化图。可以使用一个或多个中央处理单元、处理器、多核处理器、微处理器、现场可编程门阵列(FPGA)、专用集成电路(ASIC)、片上系统(SOC)、现成组件和/或板等的任何合适的组合(例如包括一个或多个中央处理单元和FPGA的组合、以及/或者一个或多个FPGA和SOC的组合等)来实现NoSQL代理。如图9所示,NoSQL代理包括以下子系统:
1.IO子系统,其包括10GbE MAC、与DDR3DRAM存储器和SSD闪速存储器进行交互的混合存储器控制器、以及PCIe 3.0接口。在一些示例中,该子系统在Verilog中实现。根据NoSQL代理是位于应用服务器还是位于NoSQL数据存储中,可以通过PCIe接口和/或经由10GbE MAC的网络来接收NoSQL代理所要处理的数据命令。
2.分组处理器,其管理与例如Linux服务器的以太网和TCP/IP连接。在一些示例中,分组处理器可以用C实现,并且可利用诸如CentOS等的标准Linux分发进行操作、并且可在FPGA上实现。分组处理器支持IPv4、TCP、DHCP、ARP、ICMP协议。在2016年1月提交的标题为“Bid Gateway for a Real-time Ad Bidding”的美国专利申请序列62/681,922中进一步描述了合适的分组处理器,其通过引用而整体并入于此。
3.安全REST接口,其包括HTTP引擎和SSL引擎。在一些示例中,在该子系统中,基于HTTP引擎来实现REST接口编码器和解码器。在一些示例中,REST接口支持用于安全数据交换的SSL编码和解码。
4.数据串行解串引擎,其支持各种串行解串协议(例如,JSON、ProtoBuf、Thrift等)。数据串行解串引擎允许将各种串行解串协议实例化为具有以线路速率进行协议转化的能力。例如,传入数据请求可以采用JSON格式,而NoSQL数据服务器返回BSON或Thrift格式的数据。数据串行解串引擎将进行数据格式转化并将有效的JSON数据返回给应用逻辑。
5.索引转换器,其为作为针对主索引的数据请求的一部分而包括的二级索引的线路速率转化提供支持。这允许使用更有效的主索引来完成数据请求。
6.代理有限状态机(FSM),其包括用以管理各种数据和控制事务的FSM。代理FSM基于每个事务和/或基于每个连接来跟踪NoSQL代理的状态信息。代理FSM还与配置和协作引擎以及负载均衡器进行交互以确定适当的动作(例如,将请求转发到另一对等NoSQL代理)。
7.配置和协作引擎,其管理与当前NoSQL代理协作操作的子系统和/或其它对等NoSQL代理之间的一致和协作。通常,在接受数据丢失或延迟或不一致以及为此功能投入更多CPU周期和网络带宽之间存在折衷。配置和协作引擎中可被加速并变高效的一个块是原子广播块(在引导者侧)和登记响应块(在跟随者侧)。在一些示例中,在配置和协作引擎中实现这些改进,使得扩展到更多NoSQL代理变得有效。在一些示例中,配置和协作引擎使用Apache ZooKeeper项目来进行操作。在一些示例中,Zookeeper用于使状况和功能维护信息一致并协作(例如,服务在w.x.y.z IP地址、支持xxx Mb/s的业务、服务启动等)。在一些示例中,Zookeeper不用于通过网络接口而发生的NoSQL代理之间的一般数据共享。
8.负载均衡器,用以与其它对等NoSQL代理实例进行交互以更好地管理应用侧业务。在一些示例中,负载均衡器维持一组计数器和逻辑以测量目标度量(例如,每秒事务数、Mb/s和/或Gb/s等),并确定特定的对等NoSQL代理是否正运行在高于当前数量(例如,85%和/或90%等)的负载下。在一些示例中,在基于目标度量而看起来像NoSQL代理可能无法满足所设置的SLA的情况下,将传入的针对事务的请求转发到具有更多容量来处理请求的另一对等NoSQL代理。在一些示例中,使用布隆过滤器等以作为负载均衡的预处理步骤来判断正被分析的传入请求所用的数据是否缓存在当前NoSQL代理中。在数据未缓存在本地的情况下,请求变为受限于负载均衡,并且可被转发到具有进行进一步计算并处理请求的容量的对等NoSQL代理。
9.混合存储器管理单元(H-MMU),其允许可以使用DRAM和SSD的组合来存储数据的灵活缓存策略。在一些示例中,这允许在DRAM延迟时访问缓存数据,同时允许H-MMU确定针对SSD的适当读和/或写调度。在一些示例中,H-MMU还可以实现了DRAM或SRAM与SSD的隔离,使得数据可以直接缓存在SSD中而不会被缓存在SRAM或DRAM中。在一些示例中,这种隔离支持将临时数据写入SRAM并且不允许其它永久数据污染SRAM,这对于实现性能是至关重要的。在一些示例中,布隆过滤器表/矢量可以存储在SRAM中并且快速检查所述代理是否具有特定数据。在美国专利No.9,286,221中进一步描述了H-MMU的实施例的架构和操作,其通过引用而全文并入于此。
10.计算块,其支持正则表达式(regex)评价和/或过滤等。在一些示例中,计算块支持能够扩展诸如node.js的语言框架的库。在一些示例中,计算块支持位于FPGA上以及/或者NoSQL代理经由PCIe接口和/或其它接口可访问的一个或多个处理器的紧密连接。在一些示例中,诸如来自Intel公司的QuickPath互联(QPI)、来自ARM Ltd.的加速器一致性端口(ACP)、以及/或者来自IBM的一致性加速器处理器接口(CAPI)等的接口允许数据使用L2/L3缓存器而并非经由PCIe总线在NoSQL代理和一个或多个处理器之间移动。在一些示例中,可以使用诸如Ragel等的域特定语言的编译来支持使用正则表达式的复杂数据过滤和分类的描述,其中域特定语言将生成用于一个或多个处理器上运行的C代码或者可以作为替代使用高级合成编译器编译为FPGA。
根据一些实施例,NoSQL代理可以在该NoSQL代理位于应用服务器中的情况下经由PCIe接口从应用逻辑接收数据命令,或者在NoSQL代理已经缓存了由对等NoSQL代理(例如,如图8所述)接收到的命令所用的数据的情况下经由10GbE MAC网络从应用服务器(例如,在NoSQL代理位于应用服务器或NoSQL数据存储中的情况下)或者从对等NoSQL代理接收数据命令。在一些示例中,然后将命令转发到索引转换器,使得命令中的分别引用二级索引的数据引用被转换为相应的主索引,以使数据访问请求更有效。在一些示例中,索引转换作为线路速率而发生,以在命令的处理中不引入不期望的延迟。在一些示例中,然后将命令传递到数据串行解串引擎以将命令中的数据转换为NoSQL数据存储的数据格式协议。在一些示例中,协议转换作为线路速率而发生,以在命令的处理中不引入不期望的延迟。然后使用例如图8的方法来处理命令。在一些示例中,然后将命令的结果传递通过计算块以进行额外处理从而支持附加的表达式评价和/或过滤。在一些示例中,然后将命令的结果通过数据串行解串引擎传回,以将结果转换为发出命令的应用逻辑的数据格式协议。在一些示例中,协议转换作为线路速率而发生,以在命令的处理中不引入不期望的延迟。然后将命令的结果传递回应用逻辑。
图10是根据一些实施例的使用数据库代理的数据中心架构100的简化图。如图10所示,数据中心架构100围绕与图1~6的数据中心架构一致的多层客户端-服务模型构建。数据中心架构100包括客户端110。尽管图10中仅示出一个客户端,但是数据中心架构100可以包括与客户端110相同和/或不同的任何数量的客户端。在一些实施例中,客户端110与图1~6的应用服务器一致。尽管图10中未示出,但是如本领域普通技术人员将理解的,客户端110可以包括一个或多个处理器、存储器、操作系统和/或虚拟机等。如图所示,客户端110包括应用111、客户端侧驱动器112、和网络接口113。应用111代表可能需要数据库的存储服务并且可以与最终用户应用、以及/或者支持前端服务器的应用层中的应用相对应的许多可能应用中的任一个。
应用111使用客户端侧驱动器112来利用数据中心架构100中的数据库代理。在一些示例中,客户端侧驱动器112可以包括用作数据中心架构100的应用111和数据库代理之间的诸如门面接口等的接口的API。在一些示例中,客户端侧驱动器112可以提供对通常在数据库驱动器接口中发现的功能的访问,包括对诸如查询操作、连接管理、认证、查询提交、查询结果处理、以及/或者事务等的支持。在一些示例中,客户端侧驱动器的功能可被实现为REST API和/或本机API。在一些示例中,客户端侧驱动器112用于代替应用111可使用的一个或多个其它数据库驱动器或用作其补充,以访问数据中心架构100中的一个或多个数据库服务器。在一些示例中,客户端侧驱动器112还可以为数据中心架构100的客户端110和数据库代理之间的连接池提供支持,使得当请求客户端110和数据库代理之间的通信连接时,可以立即使用连接池中的现有连接而不产生建立新连接的延迟。
网络接口113提供客户端110和/或客户端侧驱动器112与网络120之间的连接。网络120可以与包括局域网(诸如以太网)、无线网络、数据中心网络、以及/或者广域网(诸如互联网)等的任何类型的网络相对应。网络120可以包括任何数量的网络开关装置、桥、集线器、路由器、接入点、以及/或者网关等。网络接口113可以包括软件驱动器、固件和/或硬件模块等的组合,其中这些软件驱动器、固件和/或硬件模块提供如网络驱动器所预期的网络访问和网络服务,从而提供对诸如TCP/IP和/或OSI等的分层网络系统的支持。在一些示例中,网络接口113可以包括物理层支持、介质访问控制(例如,以太网等)、对路由服务的访问(例如,IP)、对传递服务的访问(例如,TCP和/或UDP等)、对网络管理的支持(例如,ICMP、ARP和/或DHCP等)、一个或多个分组处理器、一个或多个队列、一个或多个应用层API(例如,HTTP和/或其它REST API等)、以及/或者安全性(例如,IPSec和/或SSL等)。
数据中心架构100还包括数据库代理130。在一些实施例中,数据库代理130与图1~6和图9的任意数据库代理一致。在一些实施例中,数据库代理130是NoSQL代理。如图10所示,数据库代理130包括若干模块,其中这些模块可以各自使用硬件和/或软件的任何合适组合单独地和/或共同地实现。在一些实施例中,数据库代理130的组件(如以下进一步详细讨论)可以使用一个或多个中央处理单元、处理器、多核处理器、微处理器、FPGA、ASIC、SOC、现成组件和/或板等的任何合适的组合(例如包括一个或多个中央处理单元和FPGA的组合、以及/或者一个或多个FPGA和SOC的组合等)来实现。如本领域普通技术人员将理解的,一个或多个处理器、多核处理器和/或微处理器等可以正在执行非暂时性机器可读介质(未示出)中所存储的软件。可以包括处理和方法的一些常见形式的机器可读介质是例如软盘、柔性盘、硬盘、磁带、任何其它磁性介质、CD-ROM、任何其它光学介质、RAM、PROM、EPROM、FLASH-EPROM、任何其它存储器芯片或盒、以及/或者处理器或计算机适于读取的任何其它介质。
数据库代理130包括请求处理器131、缓存器145、数据库插件150、日志记录和度量单元159、以及若干网络接口132、139和152。请求处理器131负责处理通过网络接口132和/或网络接口139接收到的数据库请求。请求处理器131还负责在数据库请求涉及底层数据库动作时将数据库请求发送至数据库插件150,并且在这些其它数据库代理负责处理数据库请求的一个或多个部分时将数据库请求发送至其它数据库代理。请求处理器131还使用缓存器145以进行本地存储和/或其它缓存存储。在一些示例中,缓存器145可以是用于将数据存储在诸如闪存/SSD等的非易失性存储器中的持久缓存器。
与网络接口113相同,网络接口132可以包括软件驱动器、固件、和/或硬件模块等的组合,其中这些软件驱动器、固件和/或硬件模块提供如网络驱动器所预期的网络访问和网络服务,从而提供对诸如TCP/IP和/或OSI等的分层网络系统的支持。在一些示例中,网络接口132可以包括物理层支持、介质访问控制(例如,以太网等)、对路由服务的访问(例如,IP)、对传递服务的访问(例如,TCP和/或UDP等)、对网络管理的支持(例如,ICMP、ARP和/或DHCP等)、一个或多个分组处理器、一个或多个队列、一个或多个应用层API(例如,HTTP和/或其它REST API等)、以及/或者安全性(例如,IPSec和/或SSL等)。网络接口132经由客户端侧驱动器112和网络120接收来自应用111的数据库请求。在接收到各数据库请求时,请求处理器131为该数据库请求分配请求标识符,以在数据库代理130处理数据库请求时辅助跟踪这些数据库请求。在一些示例中,标识符可以与会话标识符和/或连接标识符等相对应。
请求处理器131包括索引转换器133。在经由客户端侧驱动器112和网络120从客户端110接收数据库请求的情况下,利用网络接口132将数据库请求转发至索引转换器133。索引转换器133为作为各数据库请求的一部分而包括的二级索引向用于组织和存储请求处理器131所缓存的数据库记录的主索引的转化提供支持。在一些示例中,索引转换器133可以以线路速率进行操作,使得数据库读请求的索引转换不会使请求处理器131正处理的数据库请求的流水线减慢。在一些示例中,索引转换器133可以使用一个或多个查找和/或交叉引用结构(诸如一个或多个表等)以将使用一个或多个二级索引来引用数据的数据库请求转换为依赖主索引的数据库请求。例如,在数据库请求使用与二级索引其中之一相对应的列或字段(例如,经由“WHERE”子句等)来指定数据子集的情况下,索引转换器133修改数据库请求以使用主索引。在一些示例中,该索引转换允许使用更有效的主索引来完成数据请求。在数据库请求仅使用主关键字来指定数据的情况下,数据库请求无改变地传递通过索引转换器133。
在被索引转换器133处理之后,数据库请求被转发至串行解串引擎134。在一些示例中,串行解串引擎134可以支持各种串行解串协议(例如,JSON、ProtoBuf、Thrift等)。在一些示例中,串行解串引擎134可以以线路速率进行操作,使得数据库读请求的数据协议转换不会使请求处理器131正处理的数据库请求的流水线减慢。在一些示例中,使用串行解串引擎134来支持应用111所使用的数据格式化协议向请求处理器131所使用的数据格式化协议的转换。这允许请求处理器131的其它模块以其优选的数据格式化协议进行本地操作,而不必进行应用111的数据格式化协议的单独转换。例如,在数据库请求包括JSON格式的数据并且请求处理器131以BSON格式进行本地操作的情况下,串行解串引擎134将JSON格式的数据对象转换为BSON格式的数据对象。在数据库请求包括已处于请求处理器131的本机格式的数据的情况下,数据库请求无改变地传递通过串行解串引擎134。
在被索引转换器133和/或串行解串引擎134处理之后,数据库请求被转发至散列单元135。散列单元135检查主索引、主索引的范围、和/或数据库请求中所包括的主索引的集合,并对各索引应用散列函数以确定各索引的固定长度散列值。在一些示例中,散列函数可以是任何合适的散列函数,诸如循环冗余校验、校验和、通用散列、以及/或者非加密散列等。在一些示例中,散列函数的结构及其如何对各索引进行散列是基于请求处理器131如何组织和/或检索数据。在一些示例中,在请求处理器131组织和/或检索与列式(columnar)数据格式(诸如Apache Cassandra的列式数据格式等)一致的数据的情况下,散列函数可以应用于关键字空间、表标识符、和/或数据库请求中的关键字或主索引值。在数据库请求包括一系列主索引和/或一组主索引的情况下,可以对不同的索引值多次应用散列函数以确定与数据库请求相对应的一系列散列值。在一些示例中,其它数据库格式可以与不同的散列函数一起使用。然后将一个或多个散列值转发至路由器136以进行进一步处理。
在一些实施例中,路由器136与图9的代理有限状态机、配置和协作引擎和/或负载均衡器相对应。路由器136基于由散列单元135提供用于数据库请求的一个或多个散列值来确定存储各数据库请求所请求和/或识别的数据的一个或多个位置。路由器136检查各散列值以判断该散列值是否落在作为数据库代理130、或者与数据库代理130形成代理集群的其它数据库代理171~179其中之一的责任的散列值的范围内。在一些示例中,可能散列值的集合被分割为多个散列值范围,其中数据库代理130和数据库代理171~179各自负责一个或多个散列值范围。在一些示例中,可以根据一致散列和/或类似布置来映射散列值,其中可能散列值的集合被映射到圆形空间,数据库代理130和数据库代理171~179各自被分配至该圆形空间内的一个或多个角范围。在一些示例中,数据库代理130和一个或多个其它数据库代理171~179之间的散列值的分割支持数据库代理130与一个或多个其它数据库代理171~179之间的负载均衡。
然后,路由器136针对各散列值判断数据库代理130或其它数据库代理171~179其中之一是否要进行与该散列值相关联的数据的进一步处理。在散列值与分配给数据库代理130的散列值范围其中之一相对应的情况下,数据库代理130访问与该散列值相关联的数据。在散列值与同一个或其它数据库代理171~179的散列值相关联的散列值范围其中之一相对应的情况下,将与散列值相关联的数据的处理转发至其它数据库代理171~179中的分配了该散列值的相应的一个数据库代理。使用网络接口139将具有散列值的数据库请求转发到其它数据库代理171~179中的相应的一个数据库代理。在其它数据库代理171~179中的相应的一个数据库代理完成被转发数据库请求的处理时,其它数据库代理171~179通过网络接口139返回结果以及/或者对路由器136的响应。
网络接口139与网络接口113和/或132相同,并且经由与网络120相同的网络160来提供与各其它数据库代理171~179的互连。在一些示例中,各其它数据库代理171~179可以基本上与数据库代理130相同,并且可以在相应的网络接口139上接收被转发的数据库请求。在一些示例中,网络接口139可以提供与各其它数据库代理171~179中的相应网络接口139的连接池。尽管图10示出两个其它数据库代理171和179,但任何数量的其它数据库代理都是可能的(包括一个、三个、以及/或者四个或更多个)。
参考回路由器136,在路由器136判断为散列值被分配给数据库代理130的情况下,路由器136检查数据库请求以判断该数据库请求是读请求、是写请求、是更新请求、还是删除请求。在数据库请求是读请求的情况下,路由器136使用存储引擎140来判断相关数据的本地副本是否存储在缓存器145中。在一些示例中,由散列单元135确定的散列值可以被存储引擎140用作到缓存器145的索引,并且通过查找缓存器145中的散列值来判断相关数据是否存储在缓存器145中。在一些示例中,在散列值未被用作缓存器145的索引的情况下,存储引擎140和/或缓存器145可以计算不同的散列并使用该散列来判断相关数据是否存储在缓存器145中。在相关数据存储在缓存器145中的情况下,存储引擎140从缓存器145中检索相关数据并将其作为数据库请求的结果返回给路由器136。在一些示例中,存储引擎140和/或缓存器145可以使用任何合适的数据替换政策,诸如最近最少使用和/或最不经常使用等。在一些实施例中,存储引擎140包括在美国专利No.9,286,221中进一步描述的H-MMU,上述文献通过引用而全文并入于此。在一些实施例中,存储引擎140将用于提供针对各种NoSQL数据库类型的支持的一个或多个高阶数据模型覆盖到缓存器145上。在一些示例中,一个或多个高阶模型可以包括列式数据格式(诸如Apache Cassandra所使用的列式数据格式等)、图数据格式、文档存储数据格式、以及/或者其它合适的数据格式。
在数据库请求是写请求的情况下,使用散列值(或存储引擎140和/或缓存器145所使用的其它索引)来将结果存储在缓存器145中,然后使用数据库插件150将副本写入底层数据库。在数据库请求是删除请求的情况下,如果副本存储在缓存器145中、并且使用数据库插件150从底层数据库删除相应数据,则使用散列值(或存储引擎140和/或缓存器145所使用的其它索引)来从缓存器145删除相应的数据。在数据库请求是更新请求的情况下,如果相应数据已经存储在缓存器145中,则使用散列值(或存储引擎140和/或缓存器145所使用的其它索引)来更新缓存器145中的相应数据,或者如果相应数据未存储在缓存器145中,则将相应数据存储在缓存器145中。然后使用数据库插件150将副本写入底层数据库。在一些示例中,利用与底层数据库的写入政策一致的数据库插件150将写请求、更新请求和/或删除请求转发至底层数据库,而无论该写入政策是回写和/或直写政策。
在数据库请求与多个散列值相关联的情况下,路由器136将数据库请求细分为与各散列值相对应的一系列数据库子请求。然后,路由器136使用其它数据库代理171~179其中之一、存储引擎140、缓存器145和/或数据库插件150来单独处理各子请求以及相关联的散列值。然后,路由器136将与各散列值相关联的子结果和/或子响应收集到复合结果和/或复合响应中。在一些示例中,在请求处理器131接收到分配给原始数据库请求的请求标识符的情况下,可以通过利用这些请求标识符标记子请求和子结果中的每一个来管理各种子请求和子结果的跟踪。
在路由器136聚集了数据库查询的结果和/或响应之后,将结果和/或响应转发到计算块137。计算块137提供针对可被包括作为数据库请求的一部分的正则表达式评价和/或过滤等的支持。在一些示例中,计算块137可以提供针对压缩、加密和/或类似功能的支持。在一些示例中,计算块137经由对存储过程等的支持来支持能够扩展诸如node.js等的语言框架的库。在一些示例中,计算块137可以通过诸如Ragel等的域特定语言的编译来实现,其中该域特定语言的编译可以用于支持使用正则表达式的复杂数据过滤和分类的描述,其中域特定语言将生成用于一个或多个处理器上的操作的C代码或者可以作为替代使用高级合成编译器编译为FPGA。在结果和/或响应不作为数据库请求的一部分进行表达和/或过滤等的情况下,结果和/或响应无改变地传递通过计算块137。
然后将结果和/或响应转发至串行解串引擎138以为了返回针对请求应用111的结果和/或响应作进一步准备。在一些示例中,串行解串引擎138与串行解串引擎134相同,并且负责将数据对象从请求处理器131所使用的数据格式化协议转换为应用111所使用的数据格式化协议。在应用111和请求处理器131使用相同的数据格式化协议、以及/或者结果和/或响应不包括任何数据对象的情况下,结果和/或响应无改变地传递通过串行解串引擎138。
在串行解串引擎138处理之后,结果和/或响应由网络接口132传递回应用111。在一些示例中,在数据库代理130接收到被分配给原始数据库请求的请求标识符的情况下,使用该请求标识符来管理针对应用111的结果和/或响应的正确传递。
由于各底层数据库通常使用不同的查询语言、数据格式化协议、写入策略(回写和/或直写)、事务政策、和/或底层架构等,因此数据库插件150是根据底层数据库的类型从一系列可能的数据库插件中选择的。在一些示例中,数据库插件150所支持的底层数据库的类型可以包括Apache Cassandra、Mongo、Hbase、和/或Hadoop等。数据库插件150包括与串行解串引擎134和/或串行解串引擎138相同的串行解串引擎151。串行解串引擎151负责将数据对象从数据库代理130所使用的数据格式化协议转换为底层数据库所使用的数据格式化协议。在底层数据库和请求处理器131使用相同的数据格式化协议、以及/或者数据库请求不包括任何数据对象的情况下,数据库请求无改变地传递通过串行解串引擎151。
在串行解串引擎151处理之后,数据库请求被转发到网络接口152,以传递至底层数据库所用的数据库服务器190。数据库服务器190提供对形成底层数据库的一个或多个数据库191~199的访问。网络接口152与网络接口113、132和/或139相同,并且经由与网络120和/或160相同的网络180来提供与数据库服务器190的互连。在一些示例中,网络接口152和数据库插件150可以使用数据库服务器190的一个或多个API来访问数据库服务器190。在一些示例中,网络接口152可以提供与数据库服务器190中的网络接口(未示出)的连接池。尽管图10示出单个数据库服务器,但数据库插件150能够与两个或更多个数据库服务器进行通信。
在数据库服务器190经由网络接口152向数据库插件150返回对数据库请求的响应(作为读取的结果或写入、更新或删除的状况)之后,结果和/或响应被转发到与串行解串引擎134、138和/或151相同的串行解串引擎153。串行解串引擎153负责将数据对象从底层数据库所使用的数据格式化协议转换为数据库代理130所使用的数据格式化协议。在底层数据库和数据库代理130使用相同的数据格式化协议、以及/或者结果和/或响应不包括任何数据对象的情况下,结果和/或响应无改变地传递通过串行解串引擎153。
在数据库插件150处理之后,结果和/或响应被返回到路由器136,其中在路由器136中,这些结果和/或响应可以如上所述与其它结果和/或响应进行组合以返回到应用111。在结果响应于数据库读请求的情况下,结果可以如先前所讨论地存储在缓存器145中。
日志记录和度量单元159提供针对数据库代理130的日志记录和分析支持。在一些示例中,日志记录和度量单元159通过数据库代理130的其它单元(例如,请求处理器131、网络接口132、索引转换器133、串行解串引擎134、散列单元135、路由器136、计算块137、串行解串引擎138、网络接口139、存储引擎140、缓存器145、串行解串引擎151、网络接口152、以及/或者串行解串引擎153)在处理数据库请求时可以用来以日志形式记录其各自的活动的一个或多个记录API,来提供一个或多个记录支持。在一些示例中,可以使用一个或多个日志来跟踪数据库请求、以及/或者调试请求的处理等。在一些示例中,客户端(诸如客户端110和/或应用111等)和/或管理员可以访问一个或多个日志以监视数据库代理130的活动。在一些示例中,日志记录和度量单元159可以提供可确定一个或多个性能度量(例如,吞吐量、延迟、利用率、缓存容量、和/或命中率等)和/或一个或多个操作统计的一个或多个分析引擎。在一些示例中,一个或多个性能度量和/或一个或多个操作统计可以由客户端(诸如客户端110和/或应用111等)和/或管理员经由一个或多个API来访问。在一些示例中,可以使用网络接口132来访问和/或共享一个或多个日志中的一个或多个条目、一个或多个性能度量、和/或一个或多个操作统计。
如以上讨论并在这里进一步强调的,图10仅仅是不应不适当地限制权利要求的范围的示例。本领域普通技术人员将认识到许多变化、替代和修改。在一些实施例中,数据库代理130还可以包括多于一个的数据库插件,以支持数据库请求向多个数据库服务器的转发以及/或者支持不同类型的数据库服务器等。
在一些实施例中,客户端110、数据库代理130、其它数据库代理171~179和/或数据库服务器190之间可以有不同的互连。在一些示例中,可以组合网络接口132、网络接口139和/或网络接口180中的任意两个或更多个,使得数据库代理130可以使用相同的硬件和/或软件模块来与客户端110、其它数据库代理171~179和/或数据库服务器190进行通信。在一些示例中,是使用单独的还是组合的网络接口的决策可以基于并行性的额外吞吐量与数据库代理130内的较少电路和/或模块之间的均衡。在一些示例中,是使用单独的还是组合的网络接口可以取决于网络接口132、139和/或152所支持的网络端口的数量和/或缓冲器大小等。同样,网络120、160和/或180中的任意两个或更多个可以是相同的网络。
在一些实施例中,数据库代理130与客户端110、其它数据库代理171~179和/或数据库服务器190之间的一个或多个互连可以使用本地端口连接和/或总线等而不是网络连接来实现。在一些示例中,在数据库代理130被安装在客户端110中的情况下(诸如在图5的实施例中),数据库代理130可以使用一个或多个端口以及/或者一个或多个总线等与客户端110的其余部分互连。在一些示例中,数据库代理130和/或一个或多个其它数据库代理171~179可以可选地安装在同一机架中,从而允许数据库代理130与一个或多个其它数据库代理171~179之间通过中平面和/或后平面连接机构的互连。在一些示例中,在数据库代理130被安装在数据库服务器190中的情况下(诸如在图3、4和/或6的实施例中),数据库代理130可以使用一个或多个端口以及/或者一个或多个总线等与数据库服务器190的其余部分互连。在一些实施例中,一个或多个端口和/或一个或多个总线可以是PCIe总线、QuickPath互连、加速器一致性端口、和/或高级微控制器总线架构(AMBA)总线等。
图11是根据一些实施例的使用数据库代理来处理读请求的方法200的简化图。方法200的处理202~240中的一个或多个处理可以至少部分地以非暂时性、有形、机器可读的介质上所存储的可执行代码的形式实现,其中该可执行代码在由一个或多个处理器(例如,数据库代理130的一个或多个处理器)运行时可以使一个或多个处理器进行处理202~240中的一个或多个处理。在一些实施例中,方法200的处理202~240中的一个或多个处理可以至少部分地使用包括一个或多个ASIC和/或一个或多个FPGA等的一个或多个硬件模块来实现。在一些实施例中,方法200可用于从诸如应用111等的应用接收被发送至数据库代理(诸如数据库代理130以及/或者其它数据库代理171~179中的任意其它数据库代理等)的数据库读请求并处理该请求。图11中的处理202~240的排序仅仅是示例性的,并且处理202~240的其它可能的排序和/或布置是可能的。在一些示例中,可以并发地进行处理202~240中的一个或多个处理。在一些实施例中,在数据库请求涉及与多个散列值相关联的数据的情况下,可以多次进行处理208~214、218~232、236和/或238。在一些实施例中,处理204、206、222、228、236和/或238中的一个或多个处理可以是可选的,并且可以省略。在一些实施例中,图11中未示出的其它处理也可以是方法200的一部分。在一些实施例中,方法200与图8的方法和处理一致。
在处理202处,从应用接收数据库读请求。在一些示例中,诸如数据库代理130等的数据库代理经由诸如网络接口132等的接口从诸如应用111等的应用接收数据库读请求。数据库读请求可以采用以诸如Cassandra查询语言等的标准查询语言的查询的形式,并且可以包括针对数据库代理正支持的数据库中存储的一个或多个条目和/或字段的请求。在一些示例中,可以使用用于通过数据库代理来访问数据库的应用和/或客户端侧驱动器(诸如客户端侧驱动器112等)所调用的一个或多个API呼叫来接收数据库读请求。在一些示例中,数据库读请求可被分配诸如会话标识符和/或连接标识符等的请求标识符,使得可以在方法200中跟踪数据库读请求。
在可选处理204处,利用诸如索引转换器133等的索引转换器来将数据库读请求中所使用的任何二级索引转换为主索引。在一些示例中,索引转换可以包括使用一个或多个查找和/或交叉引用结构(诸如一个或多个表等)以将处理202期间所接收的数据库读请求中的二级索引转换为主索引。在一些示例中,索引转换可以以线路速率发生,以不会使数据库代理正处理的数据库请求的流水线减慢。在数据库读请求仅使用主关键字指定数据的情况下,可以省略处理204。
在可选处理206处,使用诸如串行解串引擎134等的串行解串引擎将数据库读请求中不在数据库代理所使用的数据格式化协议中的数据对象转换为数据库代理所使用的数据格式化协议。在一些示例中,格式转换可以以线路速率发生,以不会使数据库代理正处理的数据库请求的流水线减慢。在数据库读请求不包括数据格式化协议中的、不被数据库代理本机支持的数据对象的情况下,可以省略处理206。
在处理208处,利用诸如散列单元135等的散列单元对数据库读请求所引用的数据库条目进行散列。散列单元检查主索引、主索引的范围、以及/或者数据库读请求中所包括的主索引的集合,并对各索引应用散列函数以确定各索引的固定长度散列值。在数据库请求包括一系列主索引和/或一组主索引的情况下,可以对不同索引值多次应用散列函数以确定与数据库读请求相对应的一系列散列值。然后,将处理208期间所确定的各散列值传递到方法200的其它处理,以作为单独的数据库读请求(即,子请求)进行进一步处理。
在处理210处,判断散列值是与被分配给数据库代理(即,本地)的散列值相对应还是与被分配给系统中的另一数据库代理(对等代理)的散列值相对应。在一些示例中,可以将散列值与被分配给本地数据库代理的一个或多个散列值范围进行比较,以判断本地数据库代理是否将处理与散列值相关联的数据库读取或者数据库读请求是否要被转发至对等数据库代理其中之一以进行处理。在一些示例中,在散列值被分配给对等数据库代理其中之一的情况下,基于被分配给该对等数据库代理的散列值的一个或多个范围来识别对等数据库代理。在散列值被分配给本地数据库代理的情况下,与散列值相对应的数据库读请求的一部分被转发到处理218以进行进一步处理。在散列值被分配给对等数据库代理其中之一的情况下,与该散列值相对应的数据库读请求的一部分被转发到处理212以进行进一步处理。
在处理212处,将与散列值相对应的数据库读请求的一部分发送到适当的对等数据库代理。在一些示例中,可以经由诸如网络接口139等的接口将与散列值相对应的数据库读请求的一部分转发到对等数据库代理。在一些示例中,为了辅助跟踪数据库读请求,请求标识符可以与被发送至对等数据库代理以及/或者与用于将数据库读请求的一部分发送至对等数据库代理的连接相关联的数据库读请求的一部分一起发送。在一些示例中,请求标识符的使用允许在不必以严格的顺序进行发送和/或接收的情况下发送数据库读请求的一部分并接收结果。
在处理214处,在对等数据库代理完成数据库读请求的一部分的处理(例如,以检索数据库读请求的该部分所请求的数据)的情况下,从对等数据库代理向本地数据库代理返回结果。在一些示例中,包括在接收结果中以及/或者与到对等数据库代理的连接相关联的请求标识符可用于将结果与在处理202期间接收到的数据库读请求进行关联,而并非必须以任何严格的顺序接收结果。一旦接收到结果,就从处理236开始进一步处理这些结果。
作为处理202~214的替代,在处理216处,从对等数据库代理接收数据库读请求。在一些示例中,可以从对等数据库代理接收数据库读请求,作为对等数据库代理中的相应发送处理(诸如处理212等)的对应物。由于数据库读请求已被对等数据库代理部分地处理并且相应的散列值已被确定为属于本地数据库代理,因此可以在并非必须使用处理202~210的情况下处理数据库读请求。在一些示例中,数据库读请求可被分配请求标识符。一旦接收到请求标识符,数据库读请求就被传递到处理218以进行进一步处理。
在处理218处,判断与散列值相对应的数据是否先前已被检索并存储在诸如缓存器145等的本地缓存器中。在与散列值相对应的数据存储在本地缓存器中(即,发生命中)的情况下,数据库读请求被传递到处理220以进行进一步处理。在与散列值相对应的数据未存储在本地缓存器中(即,发生未命中)的情况下,数据库读请求被传递到诸如数据库插件150等的数据库插件,以从处理222开始进行进一步处理。
在处理220处,使用诸如存储引擎140等的存储引擎来从缓存器检索与散列值相对应的数据。然后将检索到的数据传递到处理232以进行进一步处理。
在可选处理222处,使用诸如串行解串引擎151等的串行解串引擎将数据库读请求中不在底层数据库所使用的数据格式化协议中的数据对象转换为底层数据库所使用的数据格式化协议。在一些示例中,格式转换可以以线路速率发生,以不会使数据库代理和/或数据库插件正处理的数据库请求的流水线减慢。在数据库读请求不包括底层数据库不支持的数据格式化协议中的数据对象的情况下,可以省略处理222。
在处理224处,将数据库读请求发送至诸如数据库服务器190等的与底层数据库相关联的数据库服务器以进行进一步处理。在一些示例中,与散列值相对应的数据库读请求可以经由诸如网络接口152等的接口而被转发至数据库服务器。在一些示例中,为了辅助跟踪数据库读请求,请求标识符可以与被发送至数据库服务器以及/或者与用于将数据库读请求发送至数据库服务器的连接相关联的数据库读请求一起发送。在一些示例中,请求标识符的使用允许在并非必须以严格的顺序进行发送和/或接收的情况下发送数据库读请求并接收结果。
在处理226处,在数据库服务器完成数据库读请求的处理(例如,以从底层数据库检索数据库读请求所请求的数据)的情况下,从数据库服务器向数据库插件返回结果。在一些示例中,包括在接收结果中以及/或者与到数据库服务器的连接相关联的请求标识符可用于将结果与在处理202期间接收到的数据库读请求进行关联,而并非必须以任何严格的顺序接收结果。
在可选处理228处,使用诸如串行解串引擎153等的串行解串引擎将来自数据库服务器的结果的、不在数据库代理所使用的数据格式化协议中的数据对象转换为数据库代理所使用的数据格式化协议。在一些示例中,格式转换可以以线路速率发生,以不会使数据库代理和/或数据库插件正处理的数据库请求的流水线减慢。在结果不包括数据格式化协议中的、不被数据格式代理本机支持的数据对象的情况下,可以省略处理228。
在处理230处,将来自数据库服务器的结果存储在缓存器中。这允许使用处理220更快地检索针对与结果相对应的数据的后续请求,作为针对相同数据的后续请求中的缓存命中。在一些示例中,在缓存器中没有空间来存储结果的情况下,可以使用诸如最近最少使用和/或最不经常使用等的任何合适缓存替换政策来替换缓存器中的一个或多个值。在将结果存储在缓存器中之后,使用处理232进一步处理这些结果。
在处理232处,确定数据库读请求的原始来源,该原始来源确定结果要被发送至的位置。在数据库读请求经由处理216而来自对等数据库代理的情况下,使用处理234将结果返回到对等数据库代理。在数据库读请求经由处理202而来自应用的情况下,从处理236开始将结果返回至该应用。然而,在一些实施例中,在处理208的散列导致将数据库读请求分成多个子请求的情况下,各子请求的结果可被收集和/或组合成要从处理236开始返回给应用的单个结果集。
在处理234处,将结果返回至在处理216期间发送了数据库读请求的对等数据库代理。在一些示例中,在处理216期间被分配给数据库读请求的请求标识符可用于将结果返回至正确的对等数据库代理。在一些示例中,可以将数据库读请求返回至对等数据库代理的相应处理214。一旦结果被返回至对等数据库代理,就完成了数据库读请求的处理。
在可选处理236处,使用诸如计算块137等的计算块来处理数据库读请求的结果。在一些示例中,计算块可以对数据库读请求的结果应用数据库读请求中所指定的任何正则表达式、过滤、压缩、加密、和/或存储过程。在结果不作为数据库读请求的一部分进行计算的情况下,可以省略处理236。
在可选处理238处,使用诸如串行解串引擎138等的串行解串引擎来将结果中不在应用所使用的数据格式化协议中的数据对象转换为应用所使用的数据格式化协议。在一些示例中,格式转换可以以线路速率发生,以不会使数据库代理正处理的数据库请求的流水线减慢。在结果不包括数据格式化协议中的、不被应用支持的数据对象的情况下,可以省略处理238。
在处理240处,使用用于在处理202期间接收数据库读请求的接口来将结果返回至应用。在一些示例中,在处理202期间被分配给数据库读请求的请求标识符可用于使用接收数据库读请求的相同连接来返回结果。以这种方式,结果可被返回至应用中的适当位置。一旦结果被返回至应用,就完成了数据库读请求的处理。
图12是根据一些实施例的使用数据库代理来处理更新、写入、或删除请求的方法300的简化图。方法300的处理302、204~214、304、222~228、306、232、234和240中的一个或多个处理可以至少部分地以非暂时性、有形、机器可读的介质上所存储的可执行代码的形式实现,其中该可执行代码在由一个或多个处理器(例如,数据库代理130的一个或多个处理器)运行时可以使一个或多个处理器进行处理302、204~214、304、222~228、306、232、234和240中的一个或多个处理。在一些实施例中,方法300的处理302、204~214、304、222~228、306、232、234和240中的一个或多个处理可以至少部分地使用包括一个或多个ASIC和/或一个或多个FPGA等的一个或多个硬件模块来实现。在一些实施例中,方法300可用于从诸如应用111等的应用接收被发送至数据库代理(诸如数据库代理130以及/或者其它数据库代理171~179中的任意其它数据库代理等)的数据库写入、更新、和删除请求并处理这些请求。图12中的处理302、204~214、304、222~228、306、232、234和240的排序仅仅是示例性的,并且处理302、204~214、304、222~228、306、232、234和240的其它可能的排序和/或布置是可能的。在一些示例中,处理306可以在处理222~228之前和/或与处理222~228并发地进行。在一些示例中,可以并发地进行处理302、204~214、304、222~228、306、232、234和240中的一个或多个处理。在一些实施例中,在数据库请求涉及与多个散列值相关联的数据的情况下,可以多次进行处理210~214、304、222~228、306、232、234和/或240。在一些实施例中,处理204、206、222和/或228中的一个或多个处理可以是可选的,并且可以省略。在一些实施例中,图12中未示出的其它处理也可以是方法300的一部分。在一些实施例中,方法300与图8的方法和处理一致。
在处理302处,从应用接收数据库写入、更新或删除请求。在一些示例中,诸如数据库代理130等的数据库代理使用与处理202相同的处理、经由诸如网络接口132等的接口从诸如应用111等的应用接收数据库写入、更新或删除请求。数据库写入、更新或删除请求可以采用以诸如Cassandra查询语言等的标准查询语言的查询的形式,并且可以包括针对数据库代理正支持的数据库中所存储的一个或多个条目和/或字段的写入、更新或删除请求。在一些示例中,可以使用与针对处理202所讨论的机制和/或处理相同的机制和/或处理来接收数据库写入、更新或删除请求。在一些示例中,数据库写入、更新或删除请求可被分配诸如会话标识符和/或连接标识符等的请求标识符,使得可以在方法300中跟踪数据库写入、更新或删除请求。
然后,使用处理204~208以与利用方法200中的相应处理处置数据读请求大致相同的方式来处理数据库写入、更新或删除请求。在处理210处,检查在处理208期间所确定的各散列值以判断该散列值是否被指定为向本地数据库代理分配的一个或多个散列值范围中的一个散列值。在散列值被分配至本地数据库代理的情况下,将数据库写入、更新或删除请求传递至处理222以进行进一步处理。在散列值被分配至对等数据库代理的情况下,将数据库写入、更新或删除请求发送至对等数据库代理,以使用与利用方法200中的处理212和214来处置数据库读请求大致相同的方式来进行处理。
作为处理302和204~214的替代,在处理304处,从对等数据库代理接收数据库写入、更新或删除请求。在一些示例中,可以以在方法200的处理216期间接收数据库读请求大致相同的方式从对等数据库代理接收数据库写入、更新或删除请求,作为对等数据库代理中的相应发送处理(诸如处理212等)的对应物。在一些示例中,数据库写入、更新或删除请求可被分配请求标识符。一旦接收到请求标识符,数据库写入、更新或删除请求就被传递到处理222以进行进一步处理。
然后,使用处理222~228、以与利用方法200中的相应处理来处置数据库读请求大致相同的方式来处理数据库写入、更新或删除请求。这允许在底层数据库中所存储的数据中反映数据库写入、更新或删除请求。在一些示例中,可以根据数据库插件和/或底层数据库的写入政策(例如,直写或回写)来处理数据库写入、更新或删除请求。
在处理306处,对缓存器应用数据库写入、更新或删除请求。这允许使用处理220更快地检索针对与数据库写入、更新或删除请求相对应的数据的后续请求,作为使用方法200的对相同数据的后续请求中的缓存命中。在数据库请求是写请求的情况下,使用散列值(或缓存器所使用的其它索引)来将数据库写请求指定的数据存储在缓存器中。在数据库请求是删除请求的情况下,如果副本存储在缓存器中,则使用散列值(或缓存器所使用的其它索引)来从缓存器中删除相应的数据。在数据库请求是更新请求的情况下,如果相应数据已存储在缓存器中,则使用散列值(或缓存器所使用的其它索引)来更新缓存器中的相应数据,或者如果相应的数据尚未存储在缓存器中,则将相应的数据存储在缓存器中。在一些示例中,在缓存器中没有空间来存储更新的情况下,可以使用诸如最近最少使用和/或最不经常使用等的任何合适缓存替换政策来替换缓存器中的一个或多个值。
在使用数据库写入、更新或删除请求在处理306期间更新缓存器之后,使用处理232、234和240以与方法200中的相同处理大致相同的方式来进一步处理来自数据库写入、更新或删除请求的响应。在一些示例中,由于数据库写入、更新和/或删除请求通常不返回结果,因此将响应(通常以成功或失败的形式)适当地返回至对等数据库代理或应用。一旦处理234或240返回响应,就完成了对数据库写入、更新或删除请求的处理。
如上所述,数据库和NoSQL代理以及使用数据库和NoSQL代理的数据中心架构的各种实施例有利地能够实现高吞吐量,使用分层存储器来访问大量数据,以及/或者使串行化和解串行化操作加速。
这里所述的代理和服务器的一些示例可以包括非暂时性、有形、机器可读的介质,其包括在由一个或多个处理器运行时使这一个或多个处理器进行这里所述的处理和方法的可执行代码。可包括处理和方法的一些常见形式的机器可读介质例如是软盘、柔性盘、硬盘、磁带、任何其它磁性介质、CD-ROM、任何其它光学介质、穿孔卡片、纸带、具有孔图案的任何其它物理介质、RAM、PROM、EPROM、FLASH-EEPROM、任何其它存储器芯片或盒、以及/或者处理器或计算机适于读取的任何其它介质。
尽管已经示出和描述了说明性实施例,但是在前述发明中预期了广泛的修改、变化和替代,并且在一些情况下,可以采用实施例的一些特征而无需相应地使用其它特征。本领域普通技术人员将认识到许多变化、替代和修改。因此,本发明的范围应仅由所附权利要求限制,并且权利要求应当广泛地并且以与这里公开的实施例的范围相一致的方式进行解释。
Claims (20)
1.一种数据库代理装置,包括:
请求处理器;
缓存器,其连接至所述请求处理器;
数据库插件,其连接至所述请求处理器;
第一接口,用于将所述请求处理器连接至一个或多个客户端装置;
第二接口,用于将所述请求处理器连接至一个或多个其它数据库代理;以及
第三接口,用于将所述数据库插件连接至一个或多个数据库服务器;
其中,所述请求处理器被配置为:
使用所述第一接口从客户端接收数据库读请求;
判断所述数据库读请求是否被分配至所述数据库代理;
在所述数据库读请求未被分配至所述数据库代理的情况下使用所述第二接口将所述数据库读请求转发至所述一个或多个其它数据库代理中的第一个其它数据库代理;
在所述数据库读请求被分配至所述数据库代理的情况下:
在与所述数据库读请求相关联的数据存储在所述缓存器中的情况下使用所述缓存器中所存储的数据来处理所述数据库读请求;以及
在与所述数据库读请求相关联的数据未存储在所述缓存器中的情况下将所述数据库读请求转发至所述数据库插件,并将从所述数据库插件接收到的所述数据库读请求的结果存储在所述缓存器中;以及
使用所述第一接口将所述数据库读请求的结果返回至所述客户端;其中所述数据库插件被配置为:
将所述数据库读请求转发至所述一个或多个数据库服务器中的第一个数据库服务器;
从所述一个或多个数据库服务器中的第一个数据库服务器接收所述数据库读请求的结果;以及
将所述结果返回至所述请求处理器。
2.根据权利要求1所述的数据库代理装置,其中,所述第一接口和所述第二接口是相同的接口。
3.根据权利要求1所述的数据库代理装置,其中,所述第一接口、所述第二接口和所述第三接口至少之一是网络接口。
4.根据权利要求1所述的数据库代理装置,其中,所述第一接口、所述第二接口和所述第三接口至少之一是总线。
5.根据权利要求1所述的数据库代理装置,其中,经由客户端侧驱动器来从所述客户端接收所述数据库读请求。
6.根据权利要求1所述的数据库代理装置,其中,为了判断所述数据库读请求是否被分配至所述数据库代理,所述请求处理器:
对与所述数据库读请求相关联的信息进行散列,以创建散列值;以及
将所述散列值与被分配至所述数据库代理的散列值的一个或多个范围进行比较。
7.根据权利要求1所述的数据库代理装置,其中,所述请求处理器还被配置为使用一个或多个串行器-解串器引擎在所述客户端所使用的一个或多个第一数据格式和所述请求处理器所使用的一个或多个第二数据格式之间转换数据对象。
8.根据权利要求1所述的数据库代理装置,其中,所述数据库插件还被配置为使用一个或多个串行器-解串器引擎在所述数据库服务器所使用的一个或多个第一数据格式和所述请求处理器所使用的一个或多个第二数据格式之间转换数据对象。
9.根据权利要求1所述的数据库代理装置,其中,所述请求处理器还被配置为使用索引转换器将所述数据库读请求中所使用的一个或多个二级索引转换为一个或多个主索引。
10.根据权利要求1所述的数据库代理装置,其中,所述请求处理器还被配置为利用计算块、在将所述结果返回至所述客户端之前使用一个或多个正则表达式或函数来处理所述结果。
11.根据权利要求1所述的数据库代理装置,其中,经由混合存储器管理单元来访问所述缓存器。
12.根据权利要求1所述的数据库代理装置,其中,存储引擎根据列式数据格式、图数据格式、或文档存储数据格式来将数据存储在所述缓存器中。
13.根据权利要求1所述的数据库代理装置,其中,在所述数据库读请求未被分配至所述数据库代理的情况下,所述请求处理器还被配置为使用所述第二接口从所述一个或多个其它数据库代理中的第一个其它数据库代理接收所述结果。
14.根据权利要求1所述的数据库代理装置,其中,所述请求处理器还被配置为:
将所述数据库读请求分割为多个子请求;
基于与所述子请求中的各子请求相关联的散列值来处理所述子请求中的各子请求;以及
组合所述子请求中的各子请求的结果,作为所述数据库读请求的结果。
15.根据权利要求1所述的数据库代理装置,其中,所述请求处理器还被配置为处理数据库写请求、数据库更新请求、以及数据库删除请求。
16.根据权利要求1所述的数据库代理装置,其中,所述数据库代理包括一个或多个处理器、专用集成电路、现场可编程门阵列、或它们的任何组合。
17.一种使用数据库代理来处理数据库读请求的方法,所述方法包括:
利用第一数据库代理的请求处理器,使用第一接口从客户端接收数据库读请求;
利用所述请求处理器来判断所述数据库读请求是否被分配至所述第一数据库代理;
在所述数据库读请求未被分配至所述第一数据库代理的情况下,利用所述请求处理器,使用第二接口将所述数据库读请求转发至第二数据库代理;
在所述数据库读请求被分配至所述第一数据库代理的情况下:
在与所述数据库读请求相关联的数据存储在缓存器中的情况下,利用所述请求处理器,使用所述缓存器中所存储的数据来处理所述数据库读请求;以及
在与所述数据库读请求相关联的数据未存储在所述缓存器中的情况下,利用所述第一数据库代理的数据库插件将所述数据库读请求转发至数据库服务器,并且利用所述请求处理器将从所述数据库插件接收到的所述数据库读请求的结果存储在所述缓存器中;以及
使用所述第一接口将所述数据库读请求的结果返回至所述客户端。
18.根据权利要求17所述的方法,还包括:
使用一个或多个第一串行器-解串器引擎在所述客户端所使用的一个或多个第一数据格式和所述请求处理器所使用的一个或多个第二数据格式之间转换第一数据对象;或者
使用一个或多个第二串行器-解串器引擎在所述数据库服务器所使用的一个或多个第三数据格式和所述请求处理器所使用的一个或多个第二数据格式之间转换第二数据对象。
19.根据权利要求17所述的方法,还包括:使用索引转换器将所述数据库读请求中所使用的一个或多个二级索引转换为一个或多个主索引。
20.根据权利要求17所述的方法,还包括:在所述数据库读请求未被分配至所述第一数据库代理的情况下使用所述第二接口从所述第二数据库代理接收所述结果。
Applications Claiming Priority (7)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US201662319223P | 2016-04-06 | 2016-04-06 | |
US62/319,223 | 2016-04-06 | ||
US201662383297P | 2016-09-02 | 2016-09-02 | |
US62/383,297 | 2016-09-02 | ||
US15/344,993 US10237350B2 (en) | 2016-04-06 | 2016-11-07 | System and method for a database proxy |
US15/344,993 | 2016-11-07 | ||
PCT/US2017/024840 WO2017176533A1 (en) | 2016-04-06 | 2017-03-29 | System and method for a database proxy |
Publications (2)
Publication Number | Publication Date |
---|---|
CN109313644A CN109313644A (zh) | 2019-02-05 |
CN109313644B true CN109313644B (zh) | 2022-03-08 |
Family
ID=59999841
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201780035020.4A Active CN109313644B (zh) | 2016-04-06 | 2017-03-29 | 数据库代理所用的系统和方法 |
Country Status (4)
Country | Link |
---|---|
US (2) | US10237350B2 (zh) |
EP (1) | EP3532944A1 (zh) |
CN (1) | CN109313644B (zh) |
WO (1) | WO2017176533A1 (zh) |
Families Citing this family (26)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US11349922B2 (en) | 2016-04-06 | 2022-05-31 | Marvell Asia Pte Ltd. | System and method for a database proxy |
US10305861B2 (en) | 2016-08-29 | 2019-05-28 | Microsoft Technology Licensing, Llc. | Cross-tenant data leakage isolation |
US10824655B2 (en) * | 2016-12-29 | 2020-11-03 | Sap Se | Data models for geo-enriched data |
US10880272B2 (en) * | 2017-04-20 | 2020-12-29 | Wyse Technology L.L.C. | Secure software client |
US10558641B2 (en) * | 2017-04-21 | 2020-02-11 | Microsoft Technology Licensing, Llc | Trigger system for databases using proxy |
EP3401820B1 (en) * | 2017-05-10 | 2019-12-18 | Siemens Aktiengesellschaft | Apparatus and method for providing a secure database access |
US10469600B2 (en) * | 2017-11-14 | 2019-11-05 | Dell Products, L.P. | Local Proxy for service discovery |
US11397711B1 (en) * | 2017-11-22 | 2022-07-26 | Amazon Technologies, Inc. | Proxy-based database scaling |
US10931587B2 (en) | 2017-12-08 | 2021-02-23 | Reniac, Inc. | Systems and methods for congestion control in a network |
US10866893B2 (en) | 2018-01-23 | 2020-12-15 | Home Depot Product Authority, Llc | Cache coherency engine |
CN108494875A (zh) * | 2018-04-10 | 2018-09-04 | 网宿科技股份有限公司 | 一种反馈资源文件的方法和装置 |
DE102018112742A1 (de) | 2018-05-28 | 2019-11-28 | Comforte Ag | Computerimplementiertes Verfahren zum Übergeben eines Datenstrings von einer Anwendung an eine Datenschutzeinrichtung |
WO2020159415A1 (en) * | 2019-02-01 | 2020-08-06 | Telefonaktiebolaget Lm Ericsson (Publ) | Distributed unit, proxy central unit and methods in a wireless communications network |
CN110473540B (zh) * | 2019-08-29 | 2022-05-31 | 京东方科技集团股份有限公司 | 语音交互方法及系统、终端设备、计算机设备及介质 |
US11397694B2 (en) * | 2019-09-17 | 2022-07-26 | Micron Technology, Inc. | Memory chip connecting a system on a chip and an accelerator chip |
US11163490B2 (en) | 2019-09-17 | 2021-11-02 | Micron Technology, Inc. | Programmable engine for data movement |
US11416422B2 (en) | 2019-09-17 | 2022-08-16 | Micron Technology, Inc. | Memory chip having an integrated data mover |
US11442928B2 (en) | 2019-11-04 | 2022-09-13 | Amazon Technologies, Inc. | Multi-tenant provider network database connection management and governance |
CN110909000B (zh) * | 2019-11-19 | 2023-05-12 | 深圳市网心科技有限公司 | 一种数据处理方法、系统、装置及计算机可读存储介质 |
US11429595B2 (en) | 2020-04-01 | 2022-08-30 | Marvell Asia Pte Ltd. | Persistence of write requests in a database proxy |
CN114095514B (zh) * | 2020-07-29 | 2023-03-10 | 华为技术有限公司 | 一种数据库访问方法和系统 |
CN113742336A (zh) * | 2021-02-09 | 2021-12-03 | 北京沃东天骏信息技术有限公司 | 一种数据处理方法及设备、存储介质 |
CN113329048B (zh) * | 2021-04-13 | 2023-04-07 | 网络通信与安全紫金山实验室 | 基于交换机的云负载均衡方法、装置及存储介质 |
US20230015697A1 (en) * | 2021-07-13 | 2023-01-19 | Citrix Systems, Inc. | Application programming interface (api) authorization |
US11567841B1 (en) * | 2021-09-28 | 2023-01-31 | Freshworks Inc. | Database system |
CN115361277B (zh) * | 2022-07-08 | 2023-06-20 | 天津车之家软件有限公司 | 通用集群系统部署方法、装置、设备及介质 |
Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101848245A (zh) * | 2010-02-05 | 2010-09-29 | 南京德讯信息系统有限公司 | 基于ssl/xml的数据库访问代理方法及系统 |
CN102103544A (zh) * | 2009-12-16 | 2011-06-22 | 腾讯科技(深圳)有限公司 | 一种分布式缓存的实现方法及装置 |
CN102262680A (zh) * | 2011-08-18 | 2011-11-30 | 北京新媒传信科技有限公司 | 一种基于海量数据存取需求的分布式数据库代理系统 |
CN102594798A (zh) * | 2011-12-31 | 2012-07-18 | 苏州阔地网络科技有限公司 | 一种连接数据库的代理方法及系统 |
CN103209121A (zh) * | 2013-03-15 | 2013-07-17 | 中兴通讯股份有限公司 | 基于开放流协议的控制面设备的发现处理方法及装置 |
CN104219085A (zh) * | 2014-08-07 | 2014-12-17 | 深圳市同洲电子股份有限公司 | 一种数据库的数据处理方法、代理服务器及系统 |
CN104750558A (zh) * | 2013-12-31 | 2015-07-01 | 伊姆西公司 | 在分层配额系统中管理资源分配的方法和装置 |
CN105122241A (zh) * | 2013-03-15 | 2015-12-02 | 亚马逊科技公司 | 具有数据库引擎和独立分布式存储服务的数据库系统 |
US9286221B1 (en) * | 2012-06-06 | 2016-03-15 | Reniac, Inc. | Heterogeneous memory system |
Family Cites Families (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP3269849B2 (ja) * | 1992-05-29 | 2002-04-02 | 株式会社日立製作所 | 並列データベース処理システムとその検索方法 |
JPH10307818A (ja) * | 1997-05-08 | 1998-11-17 | Nec Corp | 文書変換システム、文書変換方法および文書変換用プログラムを記録した記録媒体 |
US5999941A (en) * | 1997-11-25 | 1999-12-07 | Micron Electronics, Inc. | Database access using active server pages |
US6341311B1 (en) * | 1998-05-29 | 2002-01-22 | Microsoft Corporation | Directing data object access requests in a distributed cache |
US8595308B1 (en) | 1999-09-10 | 2013-11-26 | Ianywhere Solutions, Inc. | System, method, and computer program product for server side processing in a mobile device environment |
US6801927B1 (en) * | 1999-09-24 | 2004-10-05 | Akamba Corporation | Network adaptor card with reverse proxy and cache and method implemented therewith |
JP2004070860A (ja) * | 2002-08-09 | 2004-03-04 | Hitachi Ltd | ストリームコンテンツ配送システムおよびプロキシサーバ |
US7552223B1 (en) * | 2002-09-16 | 2009-06-23 | Netapp, Inc. | Apparatus and method for data consistency in a proxy cache |
US7171469B2 (en) * | 2002-09-16 | 2007-01-30 | Network Appliance, Inc. | Apparatus and method for storing data in a proxy cache in a network |
US8010670B2 (en) | 2003-12-23 | 2011-08-30 | Slipstream Data Inc. | Meta-data based method for local cache utilization |
US20060248194A1 (en) * | 2005-03-18 | 2006-11-02 | Riverbed Technology, Inc. | Connection forwarding |
US8180750B2 (en) * | 2007-03-14 | 2012-05-15 | The Boeing Company | Support model integration system and method |
WO2008149337A2 (en) * | 2007-06-05 | 2008-12-11 | Dcf Technologies Ltd. | Devices for providing distributable middleware data proxy between application servers and database servers |
US8359605B2 (en) * | 2009-01-13 | 2013-01-22 | Disney Enterprises, Inc. | System and method for integrated hardware platform for flash applications with distributed objects |
US20110131341A1 (en) * | 2009-11-30 | 2011-06-02 | Microsoft Corporation | Selective content pre-caching |
WO2011133812A1 (en) * | 2010-04-22 | 2011-10-27 | Kirk Lanciani | Data mining system |
US20120102134A1 (en) * | 2010-10-21 | 2012-04-26 | International Business Machines Corporation | Cache sharing among branch proxy servers via a master proxy server at a data center |
US8805984B2 (en) | 2011-07-14 | 2014-08-12 | Red Hat, Inc. | Multi-operational transactional access of in-memory data grids in a client-server environment |
EP3008875B1 (en) * | 2013-06-13 | 2016-11-23 | Telefonaktiebolaget LM Ericsson (publ) | Traffic optimization in a communications network |
US10061852B1 (en) * | 2015-05-19 | 2018-08-28 | Amazon Technologies, Inc. | Transparent proxy tunnel caching for database access |
US9736259B2 (en) | 2015-06-30 | 2017-08-15 | Iheartmedia Management Services, Inc. | Platform-as-a-service with proxy-controlled request routing |
US10635658B2 (en) * | 2015-10-23 | 2020-04-28 | Oracle International Corporation | Asynchronous shared application upgrade |
-
2016
- 2016-11-07 US US15/344,993 patent/US10237350B2/en active Active
-
2017
- 2017-03-29 CN CN201780035020.4A patent/CN109313644B/zh active Active
- 2017-03-29 WO PCT/US2017/024840 patent/WO2017176533A1/en unknown
- 2017-03-29 EP EP17716405.0A patent/EP3532944A1/en not_active Withdrawn
-
2019
- 2019-03-13 US US16/351,818 patent/US11044314B2/en active Active
Patent Citations (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102103544A (zh) * | 2009-12-16 | 2011-06-22 | 腾讯科技(深圳)有限公司 | 一种分布式缓存的实现方法及装置 |
CN101848245A (zh) * | 2010-02-05 | 2010-09-29 | 南京德讯信息系统有限公司 | 基于ssl/xml的数据库访问代理方法及系统 |
CN102262680A (zh) * | 2011-08-18 | 2011-11-30 | 北京新媒传信科技有限公司 | 一种基于海量数据存取需求的分布式数据库代理系统 |
CN102594798A (zh) * | 2011-12-31 | 2012-07-18 | 苏州阔地网络科技有限公司 | 一种连接数据库的代理方法及系统 |
US9286221B1 (en) * | 2012-06-06 | 2016-03-15 | Reniac, Inc. | Heterogeneous memory system |
CN103209121A (zh) * | 2013-03-15 | 2013-07-17 | 中兴通讯股份有限公司 | 基于开放流协议的控制面设备的发现处理方法及装置 |
CN105122241A (zh) * | 2013-03-15 | 2015-12-02 | 亚马逊科技公司 | 具有数据库引擎和独立分布式存储服务的数据库系统 |
CN104750558A (zh) * | 2013-12-31 | 2015-07-01 | 伊姆西公司 | 在分层配额系统中管理资源分配的方法和装置 |
CN104219085A (zh) * | 2014-08-07 | 2014-12-17 | 深圳市同洲电子股份有限公司 | 一种数据库的数据处理方法、代理服务器及系统 |
Non-Patent Citations (4)
Title |
---|
Caching Options for Optimizing Your VPS;Kerri Molitor;《https://www.liquidweb.com/blog/caching-options-for-optimizing-your-vps/》;20150814;1-3 * |
Oracle Coherence Getting Started Guide Release 3.5;Joseph Ruzzi;《https://docs.oracle.com/cd/E14526_01/coh.350/e14510.pdf》;20090601;1-176 * |
面向多核集群的层次化MapReduce模型的设计与实现;肖之慰;《中国优秀硕士学位论文全文数据库 信息科技辑》;20130315;I138-311 * |
高并发系统数据库设计;coodoing;《https://www.cnblogs.com/ttltry-air/archive/2012/08/13/2636884.html》;20120813;1-9 * |
Also Published As
Publication number | Publication date |
---|---|
US11044314B2 (en) | 2021-06-22 |
EP3532944A1 (en) | 2019-09-04 |
US20190273782A1 (en) | 2019-09-05 |
US10237350B2 (en) | 2019-03-19 |
US20170295236A1 (en) | 2017-10-12 |
WO2017176533A1 (en) | 2017-10-12 |
CN109313644A (zh) | 2019-02-05 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN109313644B (zh) | 数据库代理所用的系统和方法 | |
US11349922B2 (en) | System and method for a database proxy | |
US11853779B2 (en) | System and method for distributed security forensics | |
US10540279B2 (en) | Server-based persistence management in user space | |
EP3057272B1 (en) | Technologies for concurrency of cuckoo hashing flow lookup | |
US20170337224A1 (en) | Targeted Processing of Executable Requests Within A Hierarchically Indexed Distributed Database | |
US9684597B1 (en) | Distributed cache coherent shared memory controller integrated with a protocol offload network interface card | |
JP2009026141A (ja) | キャッシュ方法及びキャッシュ装置 | |
US10708379B1 (en) | Dynamic proxy for databases | |
US11138130B1 (en) | Nested page tables | |
JP2007025785A (ja) | データベース処理方法、システム及びプログラム | |
CN111708719B (zh) | 计算机存储加速方法、电子设备及存储介质 | |
CN110069431A (zh) | 基于RDMA和HTM的弹性Key-Value键值对数据存储方法 | |
KR20190137948A (ko) | 네트워크 프로세서에서의 멀티-코어 상호접속 | |
JP2017537404A (ja) | メモリアクセス方法、スイッチ、およびマルチプロセッサシステム | |
CN114640716A (zh) | 一种基于快速网络路径的云网络缓存加速系统和方法 | |
Ziegler et al. | RDMA Communciation Patterns: A Systematic Evaluation | |
US10225344B2 (en) | High-performance key-value store using a coherent attached bus | |
US11327890B1 (en) | Partitioning in a processor cache | |
WO2020038466A1 (zh) | 数据预取方法及装置 | |
US11429595B2 (en) | Persistence of write requests in a database proxy | |
Hemmatpour et al. | Analyzing in-memory nosql landscape | |
US20220414001A1 (en) | Memory inclusivity management in computing systems | |
US11652746B1 (en) | Resilient consistent hashing for a distributed cache | |
WO2019149031A1 (zh) | 应用于节点系统的数据处理方法及装置 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
TA01 | Transfer of patent application right |
Effective date of registration: 20220216 Address after: Singapore Applicant after: Marvell Asia Pte. Ltd. Address before: California, USA Applicant before: RENIAC, Inc. |
|
TA01 | Transfer of patent application right | ||
GR01 | Patent grant | ||
GR01 | Patent grant |