本发明专利技术涉及数据库系统和跨数据库查询优化方法。该数据库系统包括:多个数据库,所述多个数据库中的至少两个数据库存储有一个或多个由具有相同结构的表组成的数据集合,在所述至少两个数据库中的每个数据库上创建有所述数据集合的联合视图;和请求路由层,在运行时根据预定路由规则将跨所述数据集合的查询请求路由到所述至少两个数据库中的一个数据库,以便利用该数据库的联合视图进行查询。
【技术实现步骤摘要】
本专利技术一般涉及数据库领域,具体地说,涉及一种数据库系统和跨数据库查询优 化方法。
技术介绍
目前,在数据库领域,如果要进行的查询涉及多个数据库中存储的同结构数据表, 通常可以采用诸如以下两种方法。作为一种方法,可以对多个数据库中的每个数据库执行查询,然后在应用逻辑中 将得自各个数据库的查询结果聚集在一起,之后提供给查询请求者。但是,该方法所涉及的 编程逻辑非常复杂,并且查询性能低。作为另一种方法,可以定期地或实时地在作为查询目标的一个数据库中对于多个 数据库中的其它数据库中的部分数据进行同步,并且仅对该作为查询目标的数据库进行查 询。但是,该方法尤其在需要同步大量数据时会产生数据冗余问题,需要目标数据库具有相 当大的容量。另外,这种将多个数据库中的数据同步到一个数据库中的方法难以保持数据 的一致性。另外,进行同步需要有复杂的同步机制或逻辑并且可能需要实时支持,这都增加 了系统的复杂度。上述问题在&iaS环境下尤为突出。&iaS是Software-as-a-Service (软件即服 务)的简称,它是一种通过^ternet提供软件的模式。利用该模式,用户不用再购买软件, 而是向服务提供商租用基于Web的软件来管理企业经营活动,且无需对软件进行维护。租 用软件的用户称为租户(tenant)。服务提供商会全权管理和维护软件,服务提供商在向租 户提供互联网应用的同时,也提供软件的离线操作和本地数据存储,让租户随时随地都可 以使用其租用的软件和服务。对于许多小型企业来说,MaS是采用先进技术的最好途径, 它消除了企业购买、构建和维护基础设施和应用程序的需要。大型&iaS应用会有大量租户和数据,随着业务的增长,一般都会利用平面扩容 (scale out)机制。所谓平面扩容就是将应用的数据拆分,将原本要集中存储的数据根据一 定的规则分布到不同的物理数据库上。图1示出了一个利用平面扩容机制的示例性^aS数据库系统。在该^aS数据库 系统中,使用了三个下层数据库,并且根据租户将数据划分到这三个下层数据库中。在下文 中,属于一个租户的数据的集合被称为该租户的“租户数据”。在图1所示的MaS数据库 系统中,租户T1、T2、T5的租户数据位于数据库A中,租户Τ3、Τ4的租户数据位于数据库B 中,租户Τ6的租户数据位于数据库B中。目前,在许多典型的^aS应用中,存在跨租户访问的需求。图2示出了需要进行跨 租户访问的几个示例情况。例如,当零售商和批发商同为一个MaS应用的租户的情况下, 在批发商授权的情况下,零售商可能希望看到它的批发商的全部或部分数据。例如,母公司 可能希望看到其子公司的数据,子公司可能希望看到其分支机构的数据。此外,MaS的运 营商(例如操作人员)基于某些考虑可能需要访问所有租户的数据以产生报告或进行操作等。为了满足上述需求,现有技术一般进行如下的处理。例如,对于图1中的情况,假 定在数据库A和B中分别存在如图3所示的订单表SalesOrder。在图3所示的作为简单示 例的表SalesOrder中,各个列分别表示如下含义。ID为用于区别行的标识,Tenant表示该 行数据所属于的租户,Name表示订单涉及的商品名,Num表示订单涉及的商品数量,Price 表示订单涉及的商品价格。例如,如果租户Tl希望查询自身的所有订单数据,同时希望查询位于另一数据库 B中的租户T3的订单涉及的商品数量大于500的订单数据,则通过租户Tl在基于Web的软 件上的操作而由该基于Web的软件生成如下的SQL查询语句SELECT * FROM SalesOrder WHERE Tenant =,Tl,OR (Tenant =,T3,AND Num > 500);该SQL语句被基于Web的软件发送到图1中的请求路由层,该请求路由层将上述 语句发送到各个数据库A、B和C。在数据库A、B和C中分别执行该SQL语句,例如在数据 库A中执行该SQL语句获得dbA. SalesOrder中的ID为001和002的两行数据,在数据库B 中执行该SQL语句获得dbB. SalesOrder中的ID为002的一行数据,而在数据库C中执行 该SQL语句获得空集。各数据库执行上述查询之后,将结果集分别发送回请求路由层。然 后,请求路由层将从数据库A和B返回的查询的结果集聚集在一起,在本示例中通过求合集 得到最终查询结果。最后,请求路由层将查询结果返回给基于Web的软件,以向租户Tl显 示最终结果。但是,如上所述,该方法所涉及的编程逻辑非常复杂,并且需要每个数据库均 执行查询,因此查询性能低。此外,采用现有技术,无法在SQL查询语句中使用AVG(求平均值)等函数。这是 因为,使用AVG等函数,在每个数据库中仅能针对存储于该数据库中的数据求平均值,而无 法作用于存储于其它数据库中的数据。例如,在图3的情况下,如果希望得到租户Tl和T3 两者的订单的价格平均值,产生如下SQL语句SELECT AVG(Price)FROM SalesOrder WHERE Tenant =’ Tl’ OR Tenant =’ T3’。在数据库A和B中分别执行该语句仅能返回租户Tl的 订单的价格平均值以及租户T3的订单的价格平均值,而无法得到租户Tl和T3两者的订单 的价格平均值。因此,在这种情况下无法使用诸如AVG的函数。这里,AVG函数仅是函数的 一个示例,所述函数还可以包括但不限于COUNT、MAX、MIN、SUM以及自定义函数等。近年来,开发出了一种称为联合数据库的技术。许多组织的包括在部门或分部作 为独立系统存在的局域网(LAN)、小型计算机和大型计算机具有各自的数据库,当建造一个 企业计算平台来互连一个组织时,组织内分散的异构数据库系统就应结合成联合数据库以 供多个用户访问数据。利用中间件产品或诸如分布式计算环境(DCE)的环境提供一个软件 层,通过它用户可以与不同的系统互操作。采用联合数据库技术,可以使用一条SQL语句查 询多个数据源中的数据。这些数据源可以多种多样,既可以是多种关系数据库,也可以是非 关系数据库,比如微软Excel、xml等。联合视图(Federated View)是联合数据库中一个视图,其基本表位于远程数据源 上。基本表在联合视图中是按昵称而不是按数据源表名引用的。当从联合视图查询时,数 据是从远程数据源检索到的。联合数据库和联合视图技术可以应用于SaaS环境。例如,可以在应用了联合数据库技术的SaaS数据库系统中的一个下层数据库A中建立一个联合视图(FV,Federated View),该联合视图是联合了多个下层数据库所包含的一个结构相同的表的视图。通过针对 建立了联合视图的该数据库,利用该联合视图进行查询,可以向查询者提供透明的跨数据 库查询服务。另外,在现有的SaaS数据库系统中还存在以下问题,由于租户是逐渐增加的,当 一个数据库无法容纳更多租户的租户数据时,服务提供商通过平面扩容(增加新数据库) 来容纳新租户。通常,容纳较多租户的数据库的负载较重,而容纳较少租户的数据库的负载 较轻。因而,还需要一种对数据库系统中的各数据库的负载进行平衡的机制。
技术实现思路
为了解决上述问题,本专利技术的主要目的是本文档来自技高网...
【技术保护点】
一种数据库系统,包括:多个数据库,所述多个数据库中的至少两个数据库存储有一个或多个由具有相同结构的表组成的数据集合,在所述至少两个数据库中的每个数据库上创建有所述数据集合的联合视图;和请求路由层,用于响应跨所述数据集合的查询请求,根据预定路由规则将跨所述数据集合的查询请求路由到所述至少两个数据库中的一个数据库,以便利用该数据库的联合视图进行查询。
【技术特征摘要】
【专利技术属性】
技术研发人员:高波,郭常杰,蒋忠波,唐凯,孙伟,王凤娟,
申请(专利权)人:国际商业机器公司,
类型:发明
国别省市:US[美国]
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。