CN106415534B - 一种分布式数据库中关联表分区的方法和设备 - Google Patents

一种分布式数据库中关联表分区的方法和设备 Download PDF

Info

Publication number
CN106415534B
CN106415534B CN201580001222.8A CN201580001222A CN106415534B CN 106415534 B CN106415534 B CN 106415534B CN 201580001222 A CN201580001222 A CN 201580001222A CN 106415534 B CN106415534 B CN 106415534B
Authority
CN
China
Prior art keywords
data
tables
subregion
key
range
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
Application number
CN201580001222.8A
Other languages
English (en)
Other versions
CN106415534A (zh
Inventor
王铁英
刘哲
沈柯
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Huawei Technologies Co Ltd
Original Assignee
Huawei Technologies Co Ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Huawei Technologies Co Ltd filed Critical Huawei Technologies Co Ltd
Publication of CN106415534A publication Critical patent/CN106415534A/zh
Application granted granted Critical
Publication of CN106415534B publication Critical patent/CN106415534B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/22Indexing; Data structures therefor; Storage structures
    • G06F16/2282Tablespace storage structures; Management thereof
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1009Address translation using page tables, e.g. page table structures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F12/00Accessing, addressing or allocating within memory systems or architectures
    • G06F12/02Addressing or allocation; Relocation
    • G06F12/08Addressing or allocation; Relocation in hierarchically structured memory systems, e.g. virtual memory systems
    • G06F12/10Address translation
    • G06F12/1027Address translation using associative or pseudo-associative address translation means, e.g. translation look-aside buffer [TLB]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/65Details of virtual memory and virtual address translation
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F2212/00Indexing scheme relating to accessing, addressing or allocation within memory systems or architectures
    • G06F2212/68Details of translation look-aside buffer [TLB]

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Databases & Information Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Software Systems (AREA)
  • Computing Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明实施例公开了一种分布式数据库中关联表分区的方法,包括:在需要分区的各数据表中确定第一数据表,生成第一数据表的共址分区CP表集合,第一数据表的CP表集合包括第一数据表和第一数据表的至少一个CP表,其中,第一数据表的CP表为分区键是第一数据表的分区键的子集的数据表,将第一数据表按照分区键进行Partition,并将CP表集合中第一数据表的每个CP表进行分区,每个CP表与第一数据表相关联的分区键的分区范围与第一数据表中相对应的分区键的分区范围相同。从而使得进行OLAP操作时,只需要本节点或者从其他节点获得关联的相同Range的数据,而不需要获得整张的事实表,从而提升了整个系统的性能。

Description

一种分布式数据库中关联表分区的方法和设备
技术领域
本发明实施例涉及数据库领域,尤其涉及分布式数据库中关联表分区的方法方法和设备。
背景技术
海量数据对于传统的分布式数据库管理系统(Distributed DatabaseManagement System,简称DDBMS)是一个挑战。而Google设计的分布式数据存储系统BigTable思想的公开,使得大量的非关系型数据库(Not Only SQL,简称NoSQL)系统相继出现,NoSQL作为主要面向万维网(Web)业务的数据管理系统,由于没有复杂的表关系,基于键值(Key-Value)的数据模型就可以解决绝大部分数据管理的问题。即使存在管理关系的表,NoSQL也通过构建嵌套形式数据模型的Schema模型,把多张关系表的数据放置在一张大表中。但这一类型的数据模型会增加数据的冗余,而且面对分析型业务的数据时,这种嵌套的数据模型严重影响联机分析处理(On-Line Analytical Processing,简称OLAP)的查询效率。
分布式数据库管理系统,也称为分布式数据库,其中有多个节点,每个节点维护和管理着一部分数据,其中有一部分数据提供服务(称为Active数据),另外一部分数据作为备份不提供服务(称为Backup数据),这些节点也可以称作数据管理节点或数据节点。所有节点的Active数据的并集是数据库的完整数据,节点之间表的Active数据不存在交集。为了保证上面这个条件,在数据库管理员(Database Administrator,简称DBA)创建表后,数据库管理系统需要对表进行分区(Partition)处理。然后把Partition后的各个分区范围(Range),分配到各个节点上进行管理。在多表管理的业务场景中,需要对各个表建立各自的分区键(PartitionKey),并把Partition后的各个Range分配到各个节点进行管理。Partition和分配方式会影响OLAP的查询效率,基于海量数据的分布式数据库,OLAP操作会涉及计算节点需从其他节点获得计算数据,造成系统延迟过大,使得整个系统的整体性能下降。
现有技术中,分布式数据库,例如,Hadoop数据库(Hadoop ed database,简称HBase)、分布式key-value数据库HyperDex等对于关联表的Partition方法均会导致OLAP的操作涉及到批量的数据要从多个节点获得,且多表Join操作时,会涉及维度表的全局匹配,导致整个系统的性能下降。
发明内容
有鉴于此,本发明实施例提供了一种分布式数据库中关联表的Partition方法和设备,使得OLAP操作时减少从多个节点获取大量的数据以及维度表全局匹配的情况,从而提升了整个系统的性能。
第一方面,本发明实施例提供了一种分布式数据库中关联表分区的方法,包括:在需要分区的各数据表中确定第一数据表,所述第一数据表的分区键不是任一个第二数据表的外键,所述第二数据表为所述需要分区的各数据表中除所述第一数据表之外的其他数据表;生成所述第一数据表的共址分区CP表集合,所述第一数据表的CP表集合包括第一数据表和所述第一数据表的至少一个CP表,其中,所述第一数据表的CP表为分区键是所述第一数据表的分区键的子集的数据表;将所述第一数据表按照所述第一数据表的每个分区键分别进行分区;将所述CP表集合中所述第一数据表之外的每个CP表进行分区,其中,所述CP表集合中所述第一数据表之外的每个CP表与所述第一数据表相关联的分区键的分区范围与所述第一数据表中相对应的分区键的分区范围相同。
在第一方面的第一种可能的实现方式中,所述生成所述第一数据表的CP表集合,具体为:获取所述第一数据表的维度表,判断所述第一数据表的维度表是否为所述第一数据表的CP表,若是,则将所述第一数据表的维度表加入所述第一数据表的CP表集合;迭代判断已加入所述第一数据表的CP表集合中的所述第一数据表的CP表的维度表是否为所述第一数据表的CP表,将确认为是所述第一数据表的CP表的数据表加入所述第一数据表的CP表集合,直到查找到全部的所述第一数据表的CP表为止。
结合第一方面或第一方面的第一种可能的实现方式,在第二种可能的实现方式中,所述方法还包括:接收进行负载均衡请求,所述负载均衡请求指明需对第一节点进行负载均衡;在所述第一节点中确定进行负载均衡的CP表集合;
在所述确定进行负载均衡的CP表集合中确定进行负载调整的数据表;从所述确定进行负载均衡的数据表中选择一个分区键进行分区范围调整;对所述确定进行负载均衡的CP表集合中所有包含所述选择进行分区范围调整的分区键的数据表,根据所述选择进行分区范围调整的分区键进行与所述选择进行分区范围调整的分区键的数据表相同的分区范围调整。
结合第一方面的第二种可能的实现方式,在第三种可能的实现方式中,所述在所述第一节点中确定进行负载均衡的CP表集合,具体为:根据数据表记录数或者占用空间维度,确定所述第一节点上需要进行负载均衡的CP表集合。
第二方面,本发明实施例提供了一种数据库管理器,包括:确定单元,用于在需要分区的各数据表中确定第一数据表,所述第一数据表的分区键不是任一个第二数据表的外键,所述第二数据表为所述需要分区的各数据表中除所述第一数据表之外的其他数据表;共址分区CP表集合生成单元,用于生成所述第一数据表的共址分区CP表集合,所述第一数据表的CP表集合包括第一数据表和所述第一数据表的至少一个CP表,其中,所述第一数据表的CP表为分区键是所述第一数据表的分区键的子集的数据表;分区单元,用于将所述第一数据表按照所述第一数据表的每个分区键分别进行分区,并将所述CP表集合中所述第一数据表的每个CP表进行分区,其中,所述CP表集合中所述第一数据表的每个CP表与所述第一数据表相关联的分区键的分区范围与所述第一数据表中相对应的分区键的分区范围相同。
在第二方面的第一种可能的实现方式中,所述共址分区CP表集合生成单元,具体用于:获取所述第一数据表的维度表,判断所述第一数据表的维度表是否为所述第一数据表的CP表,若是,则将所述第一数据表的维度表加入所述第一数据表的CP表集合;迭代判断已加入所述第一数据表的CP表集合中的所述第一数据表的CP表的维度表是否为所述第一数据表的CP表,将确认为是所述第一数据表的CP表的数据表加入所述第一数据表的CP表集合,直到查找到全部的所述第一数据表的CP表为止。
结合第二方面或第二方面的第一种可能的实现方式,在第二种可能的实现方式中,数据库管理器还包括负载均衡单元,用于:接收进行负载均衡请求,所述负载均衡请求指明需对第一节点进行负载均衡;在所述第一节点中确定进行负载均衡的CP表集合;在所述确定进行负载均衡的CP表集合中确定进行负载调整的数据表;从所述确定进行负载均衡的数据表中选择一个分区键进行分区范围调整;对所述确定进行负载均衡的CP表集合中所有包含所述选择进行分区范围调整的分区键的数据表,根据所述选择进行分区范围调整的分区键进行与所述选择进行分区范围调整的分区键的数据表相同的分区范围调整。
结合第二方面或第二方面的第一种可能的实现方式,在第三种可能的实现方式中,所述数据库管理器还包括负载均衡单元,所述负载均衡单元包括:接收模块:用于接收进行负载均衡请求,所述负载均衡请求指明需对第一节点进行负载均衡;在所述第一节点中确定进行负载均衡的CP表集合;确定模块:用于在所述确定进行负载均衡的CP表集合中确定进行负载调整的数据表;从所述确定进行负载均衡的数据表中选择一个分区键进行分区范围调整;调整模块:用于对所述确定进行负载均衡的CP表集合中所有包含所述选择进行分区范围调整的分区键的数据表,根据所述选择进行分区范围调整的分区键进行与所述选择进行分区范围调整的分区键的数据表相同的分区范围调整。
结合第一方面第二种或第三种可能的实现方式,在第四种可能的实现方式中,所述确定进行负载均衡的CP表集合的方法为:根据数据表记录数或者占用空间维度,确定所述第一节点上需要进行负载均衡的CP表集合。
第三方面,本发明实施例还提供了一种数据库管理设备,包括:处理器、存储器和总线;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述数据库管理设备运行时,所述处理器读取所述存储器存储的所述计算机执行指令,以执行上述第一方面或第一方面中任一可能的实现方式中所述的方法。
通过上述方案,本发明实施例提供的分布式数据库中关联表的Partition方法,通过把各个关联表中相关联的数据共址(Colocation),即关联表中相关联的分区键的Partition方式相同,并且分布也一一映射起来。使得进行OLAP操作时,只需要本节点或者从其他节点获得关联的Range的数据,而不需要获得整张的事实表,从而提升了整个系统的性能。
附图说明
为了更清楚地说明本发明实施例的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例中分布式数据库架构图;
图2为本发明实施例1的分布式数据库库结构示意图;
图3为本发明实施例1的分布式数据库Partition结果示意图;
图4为本发明实施例2的分布式数据库中关联表分区方法流程图;
图5为本发明实施例2中确定第一数据表的方法流程图;
图6为本发明实施例2中生成第一数据表的CP表集合的方法流程图;
图7为本发明实施例3中负载均衡的方法流程图;
图8为本发明实施例3中节点负载均衡示意图;
图9为本发明实施例4的数据库管理器的结构图;
图10为本发明实施例4的数据库管理器的另一结构图;
图11为本发明实施例4的数据库管理器的另一结构图;
图12为本发明实施例5的数据库管理设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
图1为本发明实施例中分布式数据库系统架构图,如图1所示,分布式数据库系统中包括多个节点20,如图中所示节点_1--节点_5,还包含一个管理器10(Manager)用于对数据库系统进行维护、管理,图1所示的管理器10独立于节点1-5,在不同于图1所示的架构中,管理器也可以由分布式数据库系统的各节点中的一个节点来担任,设置在该节点上,提供数据库系统的维护、管理功能。本发明实施例中分布式数据库系统中的节点和管理器具体可以由任意主机来实现,任意主机包括普通的计算机、移动终端、工作站或服务器、专用服务器等,如X86处理器,本发明不作具体限定。每个节点维护和管理着部分数据,其中有一部分数据提供服务(称为Active数据,也可称为主用数据),另外一部分数据作为备份(称为Backup数据,也可称为备用数据),所有节点Active数据的并集是数据库的完整数据。在数据进行存储时,需要对表进行分区(Partition)处理,然后把Partition后的各个范围(Range),分配到各个节点上去。如图1中所示,将主用数据按照Partition分别存储到各个节点,例如,其中Range(0,10]、(50,60]在节点_1存储,Range(10,20]、(60,70]在节点_2存储,各个节点中存储的Active数据构成了数据库的完整数据(0,100],且不重复。进一步的,每个节点都存储一部分其他节点主用数据的Backup数据,图1所示的系统中每个节点的主用数据在其他的两个节点存有备份,例如,节点_1存储的Range(0,10]、(50,60]的主用数据,在节点_4、节点_5均有备份,节点_1会将自身的主用数据向节点_4、节点_5备份作为备用数据。
在分布式数据库多表管理的业务场景中,数据库保存的表根据保存的内容可以分为事实表和维度表。一个事实表可以关联多个维度表。如下表1和表2所示,表1为事实表,表2为与事实表1相关联的多个维度表中的一个。
表1事实表
销售地区 产品代码 销售月份 销售量 销售额
1 347 1 3 7.95
1 447 1 3 7.32
2 347 2 4 7.95
2 447 2 4 7.32
3 339 3 16 42.70
表2维度表
产品代码 产品名称 产品类别
347 山地100 自行车
339 远路650 自行车
447 车锁 配件
事实表是数据库架构中的核心表,包含描述业务(如银行事务或产品销售)内特定事件的数据,用于存储至少一个事实记录,每个事实记录对应事实表中的一行。表1中的事实表中的每一数据行记录一个销售的事实记录,在示例数据行中,前3个列——销售地区、产品代码和销售月份——为键值列。剩下的两个列——销售量和销售额——为度量值列。键值列中的值对应事实记录的维度,例如,销售地区、产品代码、销售月份、产品产地、产品种类等等,度量值列中的值对应于事实表的主题内容,例如,销售额或销售量等等。维度表中的条目用来描述事实表中的数据,记录事实表中的事实记录的维度(一般是其中的键值列)特性,维度表包含创建维度所基于的数据。例如表2中的维度表用于对表1中的事实表的产品代码维度进行描述。维度表可以包括名称列和属性列,例如表2中,产品代码为名称列,产品名称和产品类别为属性列。例如,在实际应用中,银行对存款记账的数据库系统,A表中存放实际数据,包括账号、所属机构号、存款金额等,B表存放机构号和机构名称的对应关系,则A是事实表,B是维度表。
数据表包含主键和外键,主键在创建表的时候指定,可以是表中的一列或者是多列的联合值,主键是行记录的唯一标识,具有唯一性,一个表中任意两行具有不同的主键值,主键一般为表的第一列。外键则用于连接两个表,是另一张表中与这张表的某个字段的类型、字段名相同的字段,用作关联两张或两张以上的表,可以理解为外键一般是指另外表中的主键。通常,事实表的外键对应于维度表的主键。例如,如果表A中的列M与表B中的列N相对应,即A表中的列M与B表中列N对应于相同的属性,例如,均对应于订单号,并且列M为表A中的主键,则列N为表B中的外键。联接两个数据表的键也常常称为关联键,事实表与维度表通过关联键进行关联,关联键对于事实表来说是外键,对于维度表来说是主键,事实表的外键对应于维度表的主键。例如,表1中的产品代码列与表2中的产品代码列相关联,可以称作关联键,表1中的产品代码列为事实表的外键,表2中的产品代码列为维度表的主键。
在分布式数据库中,事实表中的数据量要远大于维度表的数据量,表之间的关联查询非常普遍,相对于维度表,事实表的数据插入和更新更加频繁。通常,管理器需要对各个表设置分区键,分区键是数据表中决定数据行属于哪个分区的一组数据列,是对数据进行分区的判断依据。管理器通过PartitionKey对数据表进行Partition,得到Partition后每个表的各个Range,将每个表的各个Range分配到各个节点进行管理,可以采用对表的PartitionKey进行哈希(Hash)、排序(Order)或其他的Partition方式,各个表的数据按照Partition得到的各个Range,分散在各个节点上。需要进行数据处理时,把数据聚合到一个节点,进行聚合Join计算,对于基于海量数据的分布式数据库,跨节点数据读取造成系统延迟过大,会使得整个系统的整体性能下降,尤其是在涉及到多个表的Join操作时。
本发明实施例中提供了一种分布式数据库中关联表分区的方法。图2示出了本发明实施例相关的分布式数据库的库结构示意图,在分布式数据库中包括如下8个关联数据表,项目表Lineitem、部件供应商表Part_Supp、部件表Part、供应商表Supp、订单表Order、客户表Customer、国家表Nation、区域表Region。其中,各个表之间的关联关系如图2所示:LineItem表通过部件键Part_Key、供应商键Supp_Key与Part_Supp表关联,通过订单键Order_Key与Order表关联,这里的Part_Key、Supp_Key、Order_Key均为LineItem表的外键。Part_Supp表通过部件键Part_Key与Part表关联,通过供应商键Supp_Key与Supp表关联。Order表通过客户键CustomerKey与Custermer表关联,CustomerKey为Order表的外键。Customer表通过国家键Nat_Key与Nation表关联,Nat_Key为Custermer表的外键。Nation表通过区域键Reg_Key与Region表关联,Reg_Key为Nation表的外键。各数据表中确定的分区键如下:LineItem表的分区键为OrderKey、Part_Key和Supp_Key,Part_Supp表的分区键为Part_Key和Supp_Key,Part表的分区键为Part_Key,Supp表的分区键为Supp_Key,Order表的分区键为Order_Key和CustermerKey,Custermer表的分区键为CustermerKey,Nation表、Region表没有指定分区键。
在本发明实施例的关联表分区的方法中,首先从需要Partition的各数据表中选定一个核心数据表,我们在这里把它称作第一数据表。确定第一数据表的具体步骤是:从分布式数据库的所有数据表中任意选择一个还未进行Partition的数据表,这里假设图2中所示的8个数据表都还未进行Partition,假设这里选择了部件供应商表Part_Supp表。确定Part_Supp表的分区键为Part_Key和Supp_Key,然后判断该表的分区键中是否存在分区键为其他表的外键,如果没有,则就将这个表作为第一数据表(即核心数据表),如果存在分区键为其他表的外键,那么获得这个其他表(这里所找到的其他表,也就是该表的事实表),再判断这个事实表是否可以作为第一数据表,直到找到第一数据表。因为Part_Supp表的分区键中Part_Key、Supp_Key均为LineItem表的外键,则找到事实表LineItem表,接下来继续判断LineItem表是否可以作为第一数据表,因为LineItem表中的LineItem表的分区键为OrderKey、Part_Key、Supp_Key,均不是其他数据表的外键,所以可以选定LineItem表作为进行Partition的第一数据表。上述方法选择了一个数据表进行Partition,可以理解为实质上最终是找到一个事实表,这个事实表是需要Partition的各关联数据表中最上层的数据表,这个第一数据表中的分区键均不是其他表格的外键。可以看出来,在图2所示的分布式数据库中,无论从哪个表开始这个查找第一数据表的步骤,最终均会找到事实表LineItem表作为第一数据表。
接下来,需要找第一数据表的共址分区(Colocation Partition,简称CP)表,建立第一数据表的CP表集合。CP表的概念是指,如果表B的所有分区键均包含在表A的分区键中,即表B的分区键是表A的分区键的子集,则称表B为表A的CP表,表明B表可以按照与A表对应的关联键进行相同的Range的Partition。首先,获得我们找到的第一数据表LineItem的所有分区键,以及与分区键关联的各数据表(即LineItem表的分区键作为外键所关联的维度表,也可称作分区键的关联表)。LineItem表的分区键为OrderKey、Part_Key、Supp_Key,找到它的关联表包括Part_Supp表、Order表。接下来逐个判断这些关联表,是否适合于与LineItem表一起进行CP,即是否为LineItem表的CP表,直到完成对所有关联表的判断,获得LineItem表的CP 表集合。具体方法为:选择一个未判断CP表关系的第一数据表的关联表,并获得该关联表的所有分区键,判断该关联表的所有分区键是否全部包含在第一数据表的分区键中,若全部包含,则确认该关联表是第一数据表的CP表,将其加入第一数据表的CP表集合,并进一步采用循环迭代的方式来判断该关联表(即前面确认为第一数据表的CP表)的关联表是否为第一数据表的CP表,同样是先确定与该关联表的分区键关联的数据表,在这些与该CP表关联的数据表中,判断若关联的数据表的所有分区键全部包含在第一数据表的分区键中,则确认这个数据表是第一数据表的CP表,也将这个数据表加入到第一数据表的CP表集合中。按照此方法循环迭代持续查找第一数据表的CP表,直到找到的CP表再找不到第一数据表的CP表为止。将第一数据表的关联表全部按照上述方法完成CP表关系的判断,获得所有第一数据表的CP表集合。至此,第一数据表的CP表集合中包括了第一数据表和第一数据表的CP表,集合中各个CP表的分区键均包含在第一数据表的分区键中。在查找第一数据表的CP表时,如果一个关联表的分区键不全部包含在第一数据表的分区键中,则可以确认该关联表不是第一数据表的CP表。所以,针对LineItem表的分区键的关联表Part_Supp表、Order表,逐一判断各关联表的CP表关系,Part_Supp表的分区键为Part_Key、Supp_Key,均包含在LineItem表的分区键中,所以Part_Supp表为LineItem表的CP表,应在LineItem表的CP表集合中。接下来判断Part_Supp表的关联表,Part_Supp表的分区键为Part_Key、Supp_Key,找到它的分区键的关联表包括Part表、Supp表,而Part表的分区键为Part_Key,Supp表的分区键为Supp_Key,均包含在LineItem表表的分区键中,所以Part表、Supp表均为LineItem表表的CP表,也应在LineItem表的CP表集合中。接下来,查找Part表、Supp表的关联表,Part表、Supp表均没有分区键的关联表,所以均没有LineItem表的CP表。再来看Order表,Order表的分区键为Order_Key、CustermerKey,其中,CustermerKey不包含在LineItem表的分区键中,所以Order表不是LineItem表的CP表。经过前面的步骤,获得了第一数据表的CP表集合CP1,CP1中包括第一数据表以及可以和第一数据表进行共址分区CP的关联表,即第一数据表的CP表。所以,前面LineItem表的CP表集合CP1中包括LineItem 表、Part_Supp表、Part表、Supp表。
下面就可以对第一数据表和其CP表集合CP1中的表进行共址分区ColocationPartition。具体的步骤是:根据第一数据表的分区键进行第一数据表的Partition,如果分区键的数量为一个,则为一维Partition,如果为多个,则为多维Partition。依次对第一数据表的CP表集合中未Partition的CP表进行Partition,根据该CP表与第一数据表相同的分区键进行与第一数据表相同的Partition,即CP表和其对应的第一数据表,在相同的分区键进行相同的Partition,这里所说的相同的Partition,是指两个数据表在进行Partition时,相同的分区键的Range区间相同,直到CP集合中所有数据表都被Partition,则完成了该分布式数据库的关联表分区。如本发明实施例的分布式数据库Partition结果示意图图3中所示的CP表集合的分区结果,每个数据表根据其分区键的数量,确定了进行Partition的Range的维数,相同的分区键在各个数据表中对应相同的Range区间。例如,CP表集合CP1中的LineItem表、Part_Supp表、Part表、Supp表,均以相同的Range区间进行Partition,LineItem表为三维分区,其中L列按照(L_0,L-1]、(L_1,L-2]、(L_2,L-3]进行Partition分为3个Range,P列按照(P_0,P-1]、(P_1,P-2]、(P_2,P-3]、(P_3,P-4]、(P_4,P-5]进行Partition分为5个Range,S列按照(S_0,S-1]、(S_1,S-2]进行Partition分为2个Range,Part表为一维分区,P列采用与LineItem表相同的Range区间,按照(P_0,P-1]、(P_1,P-2]、(P_2,P-3]、(P_3,P-4]、(P_4,P-5]进行Partition分为五个Range,Supp表也为一维分区,S列采用与LineItem表相同的Range区间,按照(S_0,S-1]、(S_1,S-2]进行Partition分为两个Range,Part_Supp表作为LineItem表的CP表,为二维分区,采用与LineItem表相同的Range区间,P列按照(P_0,P-1]、(P_1,P-2]、(P_2,P-3]、(P_3,P-4]、(P_4,P-5]进行Partition,S列按照(S_0,S-1]、(S_1,S-2]进行Partition。通过这种方式,同一个CP表集合中的各个关联表中相关联的分区键的Partition方式相同,即Range相同。
接下来,再针对分布式数据库中需要Partition的各数据表重复执行上面的步骤,直到完成整个数据库中所有表的Partition。以图2所示的数据库为例,在完成前面的Partition后,尚剩余订单表Order、客户表Customer、国家表Nation、区域表Region未进行Partition,按照前面所述的方法,首先确定第一数据表为Order表,再建立Order表的CP表集合CP2,Order表的CP表集合CP2中包括Order表、Customer表。再将Order表的CP表集合CP2中的表进行共址分区Colocation Partition,得到如图3中所示的CP表集合的分区结果,Order表、Customer表均以相同的Range区间进行Partition,Order表为二维分区,其中0列按照(0_0,0-1]、(0_1,0-2]、(0_2,0-3]进行Partition,C列按照(C_0,C-1]、(C_1,C-2]、(C_2,C-3]、(C_3,C-4]、(C_4,C-5]进行Partition,Customer表作为Order表的CP表为一维分区,C列采用与Order表相同的Range区间,按照(C_0,C-1]、(C_1,C-2]、(C_2,C-3]、(C_3,C-4]、(C_4,C-5]进行Partition。国家表Nation、区域表Region无分区键,无需考虑。至此,整个分布式数据库的Partition完成。且各个数据表均按照同一个CP表集合中的相关联的分区键,进行相同方式的Partition,分区范围也就能够一一映射起来。
通过本发明实施例中的分布式数据库中关联表的Partition方法,在各个关联表中找出相关联的CP表,将CP表按照相关联的分区键进行Partition的Range方式相同,使得进行OLAP操作时,只需要本节点或者从其他节点获得关联的相同Range的数据,而不需要获得整张的事实表,从而提升了整个系统的性能。
图4为本发明实施例2的一种分布式数据库中关联表分区方法的流程图。如图所示,本方法为:
步骤101,在需要分区的各数据表中确定第一数据表。这里的第一数据表是指满足如下的条件的一个数据表:该数据表的分区键不是任一个第二数据表的外键,这里的第二数据表是指需要分区的各数据表中除第一数据表之外的其他数据表。
在分布式数据库系统中,通常由系统中的管理器Manager进行Partition 处理。优选的,管理器在系统中选定第一数据表可以采用如下方法:从分布式数据库的所有数据表中任意选择一个还未进行Partition的数据表,然后判断该表的分区键中是否存在分区键为其他表的外键,如果没有,则就将这个表作为第一数据表,否则再针对这个找到的其他表,判断这个其他表是否可以作为第一数据表,如此反复处理,直到找到第一数据表。可以认为,第一数据表是需要Partition的数据表中最上层的关联表,这个第一数据表中的分区键均不是其他表格的外键。当然,如果这个尚未进行Partition的数据表中存在分区键为其他表的外键,但这个其他表已进行了Partition,同样可以将这个尚未进行Partition的数据表作为第一数据表。
步骤101中在需要分区的各数据表中确定第一数据表的方法流程可以如图5所示。包括:
步骤1011,从数据库中的所有数据表中,选择一个尚未Partition的数据表作为备选表。管理器Manager从所有数据表中任意选择一个尚未Partition的数据表开始确定是否可以作为第一数据表,这里把这个选择的数据表称为备选表,即第一数据表的备选表。
步骤1012,获取该备选表的所有分区键。
步骤1013,判断该备选表的分区键中是否存在分区键为其他数据表的外键,若有则进入步骤1014,否则进入步骤1016。
步骤1014,获得步骤1013所找到的该其他数据表。如果该备选表存在分区键为其他数据表的外键(或叫做关联键),那么获得该其他数据表。从前面对分布式数据库的介绍可以得知,这个其他数据表其实就是该备选表的事实表。即步骤1013中找到的是该其他数据表,它的外键为该备选表的外键,那么它就是该备选表的事实表。步骤1013的实质就是寻找该备选表的事实表。
步骤1015,判断该找到的其他表(事实表)是否已经Partition,若已经Partition,则进入步骤1017,否则进入1016。
步骤1016,如果该其他表还没有Partition,则将该其他表作为新的备选表,重新进入步骤1012。如果该其他表还没有进行Partition,那么说明该其他表是比当前的备选表更上层的需要进行Partition的数据表,接下来将该其他表作为新的备选表,重新回到步骤1012,查找该新的备选表是否还有更上层的未进行Partition的关联表。
步骤1017,如果该备选表没有分区键为其他数据表的外键,或即使找到其有分区键为其他数据表的外键,但找到的其他数据表,即它的事实表已经Partition,则可以确定该备选表就是要找的第一数据表。其实,符合上面两个条件说明,这个备选表就是需要Partition的数据表中最上层的关联表,它的分区键均不是其他表的外键,或即使它存在分区键是其他表的外键,但它的上层表均已Partition。
通过上面的方法流程可以完成第一数据表的确定。当然,在步骤101之前,数据库系统中的管理器接收系统管理员通过后台系统输入的命令创建各数据表,完成各个数据表的建立和表的分区键的定义。首先需要完整定义各个数据表中的字段,以及确定各个数据表的分区键。优选的,可以通过数据定义语言(Data Definition Language,DDL)完成数据表的字段定义以及PatitionKey的定义。
步骤102,生成第一数据表的共址分区CP表集合。第一数据表的CP表集合包括第一数据表和第一数据表的至少一个CP表。其中,第一数据表的CP表为分区键是第一数据表的分区键的子集的数据表,即,第一数据表的CP表集合中每个数据表的分区键均包含在第一数据表的分区键中,集合中包括第一数据表以及可以和第一数据表进行CP的数据表。
优选的,首先需要获得第一数据表的所有分区键,以及与第一数据表的分区键关联的各关联表(即第一数据表的分区键作为外键所关联的维度表),接下来逐个判断这些关联表是否为第一数据表的CP表。其中,判断一个关联表是否为第一数据表的CP表的方法具体为:获得该关联表的所有分区键,判断该关联表的所有分区键是否全部包含在第一数据表的分区键中,若全部包含,则确认该关联表是第一数据表的CP表,将其加入第一数据表的CP表集合,否则,则确认该关联表不是第一数据表的CP表。对于是第一数据表的CP表的关联表,例如,第一CP表,要参照确认第一数据表的关联表的方法,来判断第一CP表的关联表是否为第一数据表的CP表。判断一个该第一CP表的分区键关联的关联表是否为该第一数据表的CP表的具体方法类似地为:获得该关联表的所有分区键,判断该关联表的所有分区键是否全部包含在第一数据表的分区键中,若全部包含,则确认该关联表是第一数据表的CP表,将其加入第一数据表的CP表集合,否则,则确认该关联表不是第一数据表的CP表。并进一步地,按照此方法判断该新加入的第一数据表的CP表的关联表,按照如此循环迭代的方法,直到找到的CP表再找不到第一数据表的CP表为止。将第一数据表的关联表全部按照上述方法完成CP表关系的判断,获得所有第一数据表的CP表集合。至此,第一数据表的CP表集合中包括了第一数据表和第一数据表的CP表,按照确认过程可以确定,集合中各个CP表的分区键均包含在第一数据表的分区键中。经过前面的步骤,获得了第一数据表的CP表集合,集合中包括第一数据表以及可以和第一数据表进行共址分区CP的数据表。
步骤102中生成第一数据表的共址分区CP表集合的方法流程可以如图6所示。包括:
步骤1021,获取第一数据表的分区键关联的关联表。首先,获取第一数据表的分区键,然后根据分区键获取分区键关联的关联表。
步骤1022,判断关联表中是否存在未判断与第一数据表的CP关系的关联表。需要逐个判断第一数据表的这些关联表是否适合与第一数据表进行共址分区CP,获得第一数据表的CP表集合。与第一数据表的CP关系是指这个关联表是否为第一数据表的CP表。若有,则说明生成第一数据表的CP表集合的工作尚未结束,执行步骤1023;否则,则第一数据表的CP表集合建立已完成。
步骤1023,选择一个未判断与第一数据表的CP关系的关联表,获得该关联表的所有分区键。在未判断与第一数据表的CP关系的关联表中,任意选择一个关联表进行CP关系判断,首先获取该关联表的分区键。
步骤1024,判断该未判断CP关系的关联表的所有分区键是否均包含在第一数据表的分区键中。如果该关联表的分区键中有不被包含在第一数据表的分区键中的,则说明该关联表不是第一数据表的CP表,转到步骤1022,继续选择看是否有其他未判断CP关系的关联表,进行后续步骤。否则,执行步骤1025。
步骤1025,确定该关联表是第一数据表的CP表,将该关联表加入第一数据表的CP表集合中。该关联表的分区键中均被包含在第一数据表的分区键中的,则确定该关联表是第一数据表的CP表,可以与第一数据表进行CP,将其加入第一数据表的CP表集合中。
步骤1026,查找该确定的CP表的关联表中的第一数据表的CP表,将找到的CP表加入到第一数据表的CP表集合中。此处,查找该确定的CP表的CP表的方法与查找第一数据表的关联表中的CP表的方法一样,即执行步骤1021——1026中的方法,在具体实现上是采用迭代的方法来查找到所有适合加入第一数据表的CP表集合中的数据表。迭代的方法就是重复调用步骤1021——1026的流程递归处理,直到递归结束,只是初始的是时候是查找为第一数据表的关联表中的第一数据表的CP表,即步骤1021中的输入是第一数据表,后续迭代的过程中步骤1021中的输入表为新加入的第一数据表的CP表,直到递归结束。对于每一层迭代来说,假设该层迭代查找的是第一CP表的关联表中的第一数据数据表的CP表,这里的第一CP表可以是第一数据表的CP表中的任一个,则先获取该第一CP表的分区键关联的关联表,然后逐个判断这些关联表是否适合与第一数据表进行共址分区CP,即判断关联表的所有分区键是否均包含在第一数据表的分区键中,如果全部包含,则确定该关联表是第一数据表的CP表,可以与第一数据表进行CP,将其加入第一数据表的CP表集合中。并针对找到的第一CP表的关联表中的CP表,例如第二CP表,进入下一层迭代,查找第二CP表的关联表中的第一数据表的CP表,直到在某层迭代中再找不到适合与第一数据表进行CP的数据表为止,即递归结束。
步骤1027,已获得第一数据表的所有CP表,至此,第一数据表的CP集合建立完成。
经过上面的流程,获得了第一数据表的CP表集合,CP表群中的表包括第一数据表的CP表。
步骤103,将第一数据表按照其分区键进行Partition。根据第一数据表的分区键的情况,进行多维/一维的Partition,具体进行多维或一维的Partition是根据第一数据表的分区键的数量来决定的。如果仅有1个分区键,则进行一维Partition,如果有N个分区键,则进行N维Partition。
步骤104,将CP表集合中第一数据表的每个CP表进行分区,其中,每个CP表与第一数据表相关联的分区键的分区范围与第一数据表中相对应的分区键的分区范围相同。将第一数据表的CP表集合中除第一数据表之外的其他数据表根据与第一数据表关联的分区键,进行与第一数据表相同的Partition。依次对第一数据表的CP表集合中各CP表进行Partition,根据该CP表与第一数据表相同的分区键进行与第一数据表相同的Partition,即CP表和其对应的第一数据表在相同的分区键进行相同的Partition(Range区间相同),直到CP集合中所有数据表都被Partition,完成第一数据表的关联表分区。
具体的,步骤104中对于第一数据表的CP表集合中各CP表按照与第一数据表关联的分区键进行与第一数据表相同的Partition的方法,包括:首先,判断第一数据表的CP表集合中是否有未Partition的CP表,如果有,则在第一数据表的CP表集合中选择一个未Partition的CP表,进行与第一数据表相同的Partition,即CP表按照和其与第一数据表对应的分区键,进行相同的Partition(Range区间相同),直到第一数据表的CP表集合中再没有未Partition的CP表。
进一步的,可以针对分布式数据库中尚未进行Partition的各数据表重复执行上面的步骤101-104,直到完成整个数据库中所有表的Partition。即针对第一数据表的CP表集合之外的其他需要进行Partition的各数据表,按照前面图4中步骤101-104所述的方法进行共址分区Colocation Partition,直到整个分布式数据库的Partition完成。这样,各个数据表均按照同一个CP表集合中的相关联的分区键,进行相同方式的Partition,各个关联表中同一分区键进行Partition后的Range相同。
通过本发明实施例中的分布式数据库中关联表的Partition方法,首先在需要Partition的各数据表找到相关联的CP表,将CP表按照相关联的分区键采用相同的Partition的Range,使得进行OLAP操作时,只需要本节点或者从其他节点获得关联的相同Range的数据,而不需要获得整张的事实表,从而提升了整个系统的性能。
在经过了如前面实施例2中的分布式数据库中关联表分区方法进行Partition后,数据库系统在节点的加入、退出、系统运行过程中,往往会存在节点的负载调整或者负载不均衡的问题,为了保证系统能够平稳的运行,需要保证各个节点的运行负载差异不能太大,这时还需对已经完成Partition的数据表进行再次Range切分。本发明的实施例3中还提供了如图7所示的一种负载均衡的方法。
步骤201,接收负载均衡请求。管理器接收对数据库中某个节点进行负载均衡的请求,负载均衡请求会指明需对第一节点进行负载均衡,例如第一节点。这里的负载均衡请求可以是系统管理员通过后台系统输入的,也可以是数据库系统的后台系统、网管系统或管理器的监控组件等根据各节点的负载监控情况产生的。往往是在节点的添加、删除等,或某个节点负载过重时的负载不均衡等场景需要进行负载均衡。
步骤202,确定进行负载均衡的CP表集合。在计划进行负载均衡的第一节点上,通过记录数或者占用空间等维度进行判断,确定该节点上需要进行负载均衡的CP表集合,例如,将负载较大的CP表集合作为需要进行负载调整的CP表集合。
步骤203,在进行负载均衡的CP表集合中确定进行负载调整的数据表。在步骤202中确定的进行负载均衡的CP表集合中通过记录数或者占用空间等维度进一步选择需要进行负载调整的数据表,例如,负载较大的数据表A。
步骤204,从确定的数据表A中选择一个分区键进行Range调整。在步骤203中确定的进行负载调整的数据表中随机选择或选择负载相对较大/较小的分区键进行Range调整。
步骤205,对确定的CP表集合中所有包含选择的分区键的数据表,按照步骤204中对数据表A的Partition处理进行相同的Range调整。
进一步的,需要根据第一节点的负载均衡调整,对相关的节点进行负载均衡调整。例如,如果需求是第一节点负载过重,需要将部分数据调整到其他节点,则将从第一节点中进行Range调整后分出来的数据调整到其他节点,可以将调整出来的数据调整到负载较轻的节点或者新加入的节点上,从而实现均衡负载。
为更清楚的了解本发明实施例的负载均衡方法,图8中示出了一个具体的节点负载均衡的实例。在图8左边的表格中示出的是按照如前面实施例2中关联表分区方法进行Partition后的结果,共列出了3个数据表,其中,表1为事实表,表2、表3为维度表。表1为三维Partition,表2、表3为一维Partition。现在,假设节点2过载,管理器收到了需要对节点2进行负载均衡的请求。管理器确定节点2上的表1、表2、表3为一个CP表集合,且负载较大。并进一步的发现,第一种情况:表3负载较大,则选择表3的分区键进行Range拆分,现有的表3的分区键在节点2的Range为(100,200],将其拆分为(100,150]、(150,200],同样的,将CP表集合中包含表3的分区键的数据表(表1)按照与表3同样的Range进行切分。则节点2上仅包含表1中Range(0,10](0,10](100,150]的数据,表2中Range(0,10]的数据,表3中Range(100,150]的数据,负载大大降低。将节点2中拆分出来的数据分配到节点9上,节点9上包含表1中Range(0,10](0,10](150,200]的数据,表2中Range(0,10]的数据,表3中Range(150,200]的数据。当然这里的节点9可以是一个新增的节点,也可以是已有的其他节点。第二种情况:节点2中表1负载较大,且表2中数据较多,则考虑选择表1、表2共有的分区键进行Range拆分,节点2中现有的表2的分区键的Range为(0,10],将其拆分为(0,5]、(5,10],同样的,将CP表集合中包含表2的分区键的数据表(表1)按照与表2同样的Range进行切分。则节点2上仅包含表1中Range(0,10](0,5](100,200]的数据,表2中Range(0,5]的数据,表3中Range(100,200]的数据,负载大大降低。将节点2中拆分出来的数据分配到节点9上,节点9上包含表1中Range(0,10](5,10](100,200]的数据,表2中Range(5,10]的数据,表3中Range(100,200]的数据。
通过以上负载调整的方法,确定需要进行负载均衡调整的数据表以及相关的分区键,并将各关联的CP表仍然按照关联的分区键进行Range相同的Partition,可以保证各个节点各个节点的负载均衡,系统能够平稳的运行,且经过负载均衡后的各节点中各关联的CP表仍然按照关联的分区键进行Partition的Range相同,保障了进行OLAP操作时,只需要本节点或者从其他节点获得关联的相同Range的数据,而不需要获得整张的事实表,提升整个系统的性能。
图9为本发明实施例4提供的一种数据库管理器的结构图。如图9所示:数据库管理器30,包括确定单元31和共址分区表集合生成单元32,分区单元33。其中,
确定单元31,用于在需要分区的各数据表中确定第一数据表,第一数据表的分区键不是任一个第二数据表的外键,这里的第二数据表是指为需要分区的各数据表中除第一数据表之外的其他数据表。。确定单元31确定第一数据表的具体方法为从分布式数据库的所有数据表中任意选择一个还未进行Partition的数据表,然后判断该表的分区键中是否存在分区键为其他表的外键,如果没有,则就将这个表作为第一数据表,否则再针对这个找到的其他表,判断这个其他表是否可以作为第一数据表,如此反复处理,直到找到第一数据表。可以认为,第一数据表是需要Partition的数据表中最上层的关联表,这个第一数据表中的分区键均不是其他表格的外键。当然,如果这个尚未进行Partition的数据表中存在分区键为其他表的外键,但这个其他表已进行了Partition,同样可以将这个尚未进行Partition的数据表作为第一数据表。确定单元31确定第一数据表的具体方法可以参看前面实施例1、2中的描述,此处不再赘述。
共址分区CP表集合生成单元32,用于生成所述第一数据表的CP表集合,第一数据表的CP表集合包括第一数据表和第一数据表的至少一个CP表,其中,第一数据表的CP表为分区键是第一数据表的分区键的子集的数据表。可以理解,第一数据表的CP表集合中每个数据表的分区键均包含在第一数据表的分区键中,集合中包括第一数据表以及可以和第一数据表进行CP的数据表。
可选的,共址分区CP表集合生成单元32,具体用于:获取第一数据表的维度表,判断第一数据表的维度表是否为第一数据表的CP表,若是,则将第一数据表的维度表加入第一数据表的CP表集合;迭代判断已加入第一数据表的CP表集合中的第一数据表的CP表的维度表是否为第一数据表的CP表,将确认为是第一数据表的CP表的数据表加入第一数据表的CP表集合,直到查找到全部的第一数据表的CP表为止。共址分区CP表集合生成单元32生成第一数据表的CP表集合的具体方法可以参看前面实施例1、2中的描述,此处不再赘述。
分区单元33,用于将第一数据表按照第一数据表的每个分区键分别进行分区,并将CP表集合中第一数据表的每个CP表进行分区,其中,CP表集合中第一数据表的每个CP表与第一数据表相关联的分区键的分区范围与第一数据表中相对应的分区键的分区范围相同。按照分区键进行Partition,需要根据分区键的数量进行多维或一维的Partition。如果仅有1个分区键,则进行一维Partition,如果有N个分区键,则进行N维Partition。
优选的,分区单元33将其他数据表根据与第一数据表相同的分区键进行与第一数据表相同的Partition,即其对应的第一数据表的相同的分区键进行相同的Partition(Range区间相同)。在第一数据表的CP表集合中选择一个第一数据表之外的未Partition的其他数据表,根据选择的数据表与第一数据表相同的分区键进行与第一数据表相同的Partition,这里所说的相同的Partition是指相同的分区键进行Partition的区间Range相同,直到第一数据表的CP表集合中所有数据表均已完成Partition。分区单元33进行分区的具体方法实施细节可以参看前面实施例1、2中的描述,此处不再赘述。
进一步的,图10为本发明实施例4的数据库管理器的另一结构图。在图9所示的实施例4的数据库管理器的基础上,本发明实施例所示的数据库管理器30中还包括负载均衡单元34。负载均衡单元34用于:
接收进行负载均衡请求,所述负载均衡请求指明需对第一节点进行负载均衡;在所述第一节点中确定进行负载均衡的CP表集合;
在所述确定进行负载均衡的CP表集合中确定进行负载调整的数据表;
从所述确定进行负载均衡的数据表中选择一个分区键进行Range调整;
对所述确定进行负载均衡的CP表集合中所有包含所述选择进行Range调整的分区键的数据表,根据所述选择进行Range调整的分区键进行与所述选择进行Range调整的分区键的数据表相同的Range调整。
负载均衡单元34进行负载均衡调整的具体方法实施细节可以参看前面实施例3中的描述,此处不再赘述。
可选的,图11中示出了本发明实施例4的数据库管理器的另一结构图。在图10所示的数据库管理器的基础上,本发明实施例的确定单元31中包括:
备选表选择模块311:用于在需要分区的各数据表中选择一个尚未进行Partition的数据表作为第一数据表的备选表;
判断模块312:用于判断选择的备选表的分区键中是否存在分区键为其他数据表的外键,如果不存在,则将所述备选表作为所述第一数据表,否则将所述其他数据表作为所述第一数据表的备选表继续判断其是否可以作为所述第一数据表,直到确定所述第一数据表。当然,如果这个备选表中存在分区键为其他表的外键,但这个其他表已进行了Partition,同样可以将这个备选表作为第一数据表。
可选的,数据库管理器30中的共址分区CP表集合生成单元32,包括:获取模块321:用于获取一个数据表的分区键以及与所述一个数据表的分区键关联的维度表;
CP表判断模块322:用于判断每个所述关联的维度表是否为所述第一数据表的CP表,若一个所述关联的维度表的所有分区键均包含在所述第一数据表的分区键中,则确认所述关联的维度表是第一数据表的CP表,否则,则确认所述关联的维度表不是所述一个数据表的CP表。
可选的,数据库管理器30还包括负载均衡单元34,负载均衡单元34包括:
接收模块341:用于接收进行负载均衡请求,负载均衡请求指明需对第一节点进行负载均衡,并在第一节点中确定进行负载均衡的CP表集合;
确定模块342:用于在确定进行负载均衡的CP表集合中确定进行负载调整的数据表,并从确定进行负载均衡的数据表中选择一个分区键进行Range调整;
调整模块343:用于对确定进行负载均衡的CP表集合中所有包含选择进行Range调整的分区键的数据表,根据选择进行Range调整的分区键进行与选择进行Range调整的分区键的数据表相同的Range调整。
进一步的,本实施例中确定模块342确定进行负载均衡的CP表集合的方法为:根据数据表记录数或者占用空间维度,确定第一节点上需要进行负载均衡的CP表集合。
本发明实施例中数据库管理器的各部分的功能的实现细节与前面实施例1、2相同的部分,可以参看前面实施例的描述,本处也不再赘述。
通过本发明实施例中的数据库管理器,在对分布式数据库中关联表进行Partition时,首先在需要Partition的各数据表找到相关联的CP表,将CP表按照相关联的分区键采用相同的Partition的Range,使得进行OLAP操作时,只需要本节点或者从其他节点获得关联的相同Range的数据,而不需要获得整张的事实表,从而提升了整个系统的性能。并且,在需要进行负载调整时,数据库管理器确定需要进行负载均衡调整的数据表以及相关的分区键,将各关联的CP表仍然按照关联的分区键进行Range相同的Partition,可以保证各个节点各个节点的负载均衡,系统平稳运行,且经过负载均衡后的各节点中各关联的CP表仍然按照关联的分区键进行Partition的Range相同,保障了进行OLAP操作时,只需要本节点或者从其他节点获得关联的相同Range的数据,而不需要获得整张的事实表,提升整个系统的性能。
图12示意性地示出了本发明实施例5的数据库管理设备40。如图12所示,该数据库管理设备40包括:处理器41、存储器42和总线43。其中,处理器41和存储器42通过总线43实现彼此之间的通信连接。
处理器41可以采用通用的中央处理器(Central Processing Unit,CPU),微处理器,应用专用集成电路(Application Specific Integrated Circuit,ASIC),或者一个或多个集成电路,用于执行相关程序,以实现本发明实施例所提供的技术方案。
存储器42可以是只读存储器(Read Only Memory,ROM),静态存储设备,动态存储设备或者随机存取存储器(Random Access Memory,RAM)。存储器42可以存储操作系统和其他应用程序。在通过软件或者固件来实现本发明实施例提供的技术方案时,用于实现本发明实施例提供的技术方案的程序代码保存在存储器42中,并由处理器41来执行。
具体地,存储器42可以用于存储计算机执行指令,也可以用于存储各种信息,例如,查询结果。处理器41可以通过总线系统43读取该存储器42存储的信息,或者将查询结果存储至存储器42。此外,当该数据库管理设备40运行时,处理器41可以读取存储器42存储的计算机执行指令,以执行前面实施例1、2、3中所描述的分布式数据库的关联表Partition方法。
可选地,如图12所示,该数据库管理设备还可以包括输入/输出接口44和通信接口45。输入/输出接口44用于接收输入的数据和信息,输出操作结果等数据。
通信接口45使用例如但不限于收发器一类的收发装置,来实现数据库管理设备40与其他设备或通信网络之间的通信。
总线43可包括一个通路,在数据库管理设备40各个部件(例如处理器41、存储器42、输入/输出接口43和通信接口44)之间传送信息。
图12所示的硬件结构以及上述描述适用于执行本发明实施例所提供的各种分布式数据库的关联表Partition方法,例如,实施例1、2,以及图4至图7所示的各种方法流程,为了简洁,这里不再赘述。
应注意,尽管图12所示的数据库管理设备40仅仅示出了处理器41、存储器42、输入/输出接口44、通信接口45以及总线43,但是在具体实现过程中,本领域的技术人员应当明白,数据,数据库管理设备40还包含实现正常运行所必须的其他器件。同时,根据具体需要,本领域的技术人员应当明白,数据库管理设备40还可包含实现其他附加功能的硬件器件。此外,本领域的技术人员应当明白,数据库管理设备40也可仅仅包含实现本发明实施例所必须的器件,而不必包含图12中所示的全部器件。
本领域普通技术人员可以意识到,结合本文中所公开的实施例中描述的各方法步骤和单元,能够以电子硬件、计算机软件或者二者的结合来实现,为了清楚地说明硬件和软件的可互换性,在上述说明中已经按照功能一般性地描述了各实施例的步骤及组成。这些功能究竟以硬件还是软件方式来执行,取决于技术方案的特定应用和设计约束条件。本领域普通技术人员可以对每个特定的应用来使用不同方法来实现所描述的功能,但是这种实现不应认为超出本发明的范围。
所属领域的技术人员可以清楚地了解到,为了描述的方便和简洁,上述描述的系统、装置和单元的具体工作过程,可以参考前述方法实施例中的对应过程,在此不再赘述。
在本申请所提供的几个实施例中,应该理解到,所揭露的系统、装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述单元/模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个系统,或一些特征可以忽略,或不执行。另外,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口、装置或单元的间接耦合或通信连接,也可以是电的,机械的或其它的形式连接。
所述作为分离部件说明的单元可以是或者也可以不是物理上分开的,作为单元显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部单元来实现本发明实施例方案的目的。
另外,在本发明各个实施例中的各功能单元可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以是两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用软件功能单元的形式实现。
所述集成的单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读取存储介质中或作为计算机可读介质上的一个或多个指令或代码进行传输。计算机可读介质包括计算机存储介质和通信介质,其中通信介质包括便于从一个地方向另一个地方传送计算机程序的任何介质。存储介质可以是计算机能够存取的任何可用介质。以此为例但不限于:计算机可读介质可以包括RAM、ROM、EEPROM、CD-ROM或其他光盘存储、磁盘存储介质或者其他磁存储设备、或者能够用于携带或存储具有指令或数据结构形式的期望的程序代码并能够由计算机存取的任何其他介质。此外。任何连接可以适当的成为计算机可读介质。例如,如果软件是使用同轴电缆、光纤光缆、双绞线、数字用户线(DSL)或者诸如红外线、无线电和微波之类的无线技术从网站、服务器或者其他远程源传输的,那么同轴电缆、光纤光缆、双绞线、DSL或者诸如红外线、无线和微波之类的无线技术包括在所属介质的定义中。如本发明所使用的,盘(Disk)和碟(disc)包括压缩光碟(CD)、激光碟、光碟、数字通用光碟(DVD)、软盘和蓝光光碟,其中盘通常磁性的复制数据,而碟则用激光来光学的复制数据。上面的组合也应当包括在计算机可读介质的保护范围之内。基于这样的理解,本发明的技术方案本质上或者说对现有技术做出贡献的部分,或者该技术方案的全部或部分可以存储在一个存储介质中,包括若干指令用以使得一台计算机设备(可以是个人计算机,服务器,或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。
总之,以上所述仅为本发明技术方案的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (10)

1.一种分布式数据库中关联表分区的方法,包括:
在需要分区的各数据表中确定第一数据表,所述第一数据表的分区键不是任一个第二数据表的外键,所述第二数据表为所述需要分区的各数据表中除所述第一数据表之外的其他数据表,其中,所述分区键用于决定数据表中的数据行的分区,所述外键用于关联至少两张数据表;
生成所述第一数据表的共址分区CP表集合,所述第一数据表的CP表集合包括第一数据表和所述第一数据表的至少一个CP表,其中,所述第一数据表的CP表为分区键是所述第一数据表的分区键的子集的数据表;
将所述第一数据表按照所述第一数据表的每个分区键分别进行分区;
将所述CP表集合中所述第一数据表的每个CP表进行分区,其中,所述CP表集合中所述第一数据表的每个CP表与所述第一数据表相关联的分区键的分区范围与所述第一数据表中相对应的分区键的分区范围相同。
2.根据权利要求1所述的方法,其特征在于,所述生成所述第一数据表的CP表集合,具体为:
获取所述第一数据表的维度表,判断所述第一数据表的维度表是否为所述第一数据表的CP表,若是,则将所述第一数据表的维度表加入所述第一数据表的CP表集合;
迭代判断已加入所述第一数据表的CP表集合中的所述第一数据表的CP表的维度表是否为所述第一数据表的CP表,将确认为是所述第一数据表的CP表的数据表加入所述第一数据表的CP表集合,直到查找到全部的所述第一数据表的CP表为止。
3.根据权利要求1或2所述的方法,其特征在于,所述方法还包括:
接收负载均衡请求,所述负载均衡请求指明需对第一节点进行负载均衡;
在所述第一节点中确定进行负载均衡的CP表集合;
在所述确定进行负载均衡的CP表集合中确定进行负载调整的数据表;
从所述确定进行负载均衡的数据表中选择一个分区键进行分区范围调整;
对所述确定进行负载均衡的CP表集合中所有包含所述选择进行分区范围调整的分区键的数据表,根据所述选择进行分区范围调整的分区键进行与所述选择进行分区范围调整的分区键的数据表相同的分区范围调整。
4.根据权利要求3所述的方法,其特征在于,所述在所述第一节点中确定进行负载均衡的CP表集合,具体为:
根据数据表记录数或者占用空间维度,确定所述第一节点上需要进行负载均衡的CP表集合。
5.一种数据库管理器,其特征在于,包括:
确定单元,用于在需要分区的各数据表中确定第一数据表,所述第一数据表的分区键不是任一个第二数据表的外键,所述第二数据表为所述需要分区的各数据表中除所述第一数据表之外的其他数据表,其中,所述分区键用于决定数据表中的数据行的分区,所述外键用于关联至少两张数据表;
共址分区CP表集合生成单元,用于生成所述第一数据表的共址分区CP表集合,所述第一数据表的CP表集合包括第一数据表和所述第一数据表的至少一个CP表,其中,所述第一数据表的CP表为分区键是所述第一数据表的分区键的子集的数据表;
分区单元,用于将所述第一数据表按照所述第一数据表的每个分区键分别进行分区,并将所述CP表集合中所述第一数据表的每个CP表进行分区,其中,所述CP表集合中所述第一数据表的每个CP表与所述第一数据表相关联的分区键的分区范围与所述第一数据表中相对应的分区键的分区范围相同。
6.根据权利要求5所述的数据库管理器,其特征在于,所述共址分区CP表集合生成单元,具体用于:
获取所述第一数据表的维度表,判断所述第一数据表的维度表是否为所述第一数据表的CP表,若是,则将所述第一数据表的维度表加入所述第一数据表的CP表集合;
迭代判断已加入所述第一数据表的CP表集合中的所述第一数据表的CP表的维度表是否为所述第一数据表的CP表,将确认为是所述第一数据表的CP表的数据表加入所述第一数据表的CP表集合,直到查找到全部的所述第一数据表的CP表为止。
7.根据权利要求5或6所述的数据库管理器,其特征在于,还包括负载均衡单元,用于:
接收负载均衡请求,所述负载均衡请求指明需对第一节点进行负载均衡;
在所述第一节点中确定进行负载均衡的CP表集合;
在所述确定进行负载均衡的CP表集合中确定进行负载调整的数据表;
从所述确定进行负载均衡的数据表中选择一个分区键进行分区范围调整;
对所述确定进行负载均衡的CP表集合中所有包含所述选择进行分区范围调整的分区键的数据表,根据所述选择进行分区范围调整的分区键进行与所述选择进行分区范围调整的分区键的数据表相同的分区范围调整。
8.根据权利要求5或6所述的数据库管理器,其特征在于,所述数据库管理器还包括负载均衡单元,所述负载均衡单元包括:
接收模块:用于接收负载均衡请求,所述负载均衡请求指明需对第一节点进行负载均衡;在所述第一节点中确定进行负载均衡的CP表集合;
确定模块:用于在所述确定进行负载均衡的CP表集合中确定进行负载调整的数据表;从所述确定进行负载均衡的数据表中选择一个分区键进行分区范围调整;
调整模块:用于对所述确定进行负载均衡的CP表集合中所有包含所述选择进行分区范围调整的分区键的数据表,根据所述选择进行分区范围调整的分区键进行与所述选择进行分区范围调整的分区键的数据表相同的分区范围调整。
9.根据权利要求7所述的数据库管理器,其特征在于,所述确定进行负载均衡的CP表集合的方法为:根据数据表记录数或者占用空间维度,确定所述第一节点上需要进行负载均衡的CP表集合。
10.一种数据库管理设备,其特征在于,包括:处理器、存储器和总线;所述存储器用于存储计算机执行指令,所述处理器与所述存储器通过所述总线连接,当所述数据库管理设备运行时,所述处理器读取所述存储器存储的所述计算机执行指令,以执行权利要求1至4中任一项所述的方法。
CN201580001222.8A 2015-05-31 2015-05-31 一种分布式数据库中关联表分区的方法和设备 Active CN106415534B (zh)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/CN2015/080444 WO2016191995A1 (zh) 2015-05-31 2015-05-31 一种分布式数据库中关联表分区的方法和设备

Publications (2)

Publication Number Publication Date
CN106415534A CN106415534A (zh) 2017-02-15
CN106415534B true CN106415534B (zh) 2019-09-20

Family

ID=57439756

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201580001222.8A Active CN106415534B (zh) 2015-05-31 2015-05-31 一种分布式数据库中关联表分区的方法和设备

Country Status (3)

Country Link
US (1) US10831737B2 (zh)
CN (1) CN106415534B (zh)
WO (1) WO2016191995A1 (zh)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113641686A (zh) * 2021-10-19 2021-11-12 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备、存储介质及程序产品

Families Citing this family (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US10482076B2 (en) 2015-08-14 2019-11-19 Sap Se Single level, multi-dimension, hash-based table partitioning
CN108874950B (zh) * 2018-06-05 2022-04-12 亚信科技(中国)有限公司 一种基于er关系的数据分布存储方法及装置
CN108959510B (zh) * 2018-06-27 2022-04-19 北京奥星贝斯科技有限公司 一种分布式数据库的分区级连接方法和装置
CN115827627A (zh) * 2018-12-24 2023-03-21 深圳市奋源科技有限公司 一种基于自定义数据表的数据资料管理方法及装置
CN112015738A (zh) * 2020-08-28 2020-12-01 支付宝(杭州)信息技术有限公司 用于实现多个数据明细表的联表处理的方法及装置
CN112233727B (zh) * 2020-10-29 2024-01-26 北京诺禾致源科技股份有限公司 数据分区存储方法及装置

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101916261A (zh) * 2010-07-28 2010-12-15 北京播思软件技术有限公司 一种分布式并行数据库系统的数据分区方法
CN104462430A (zh) * 2014-12-12 2015-03-25 北京国双科技有限公司 关系型数据库的数据处理方法及装置

Family Cites Families (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2005098655A2 (en) * 2004-02-21 2005-10-20 Datallegro, Inc. Ultra-shared-nothing parallel database
US20090171885A1 (en) * 2007-12-27 2009-07-02 Adam Silberstein Efficient bulk load
US9195701B2 (en) * 2012-10-29 2015-11-24 Futurewei Technologies, Inc. System and method for flexible distributed massively parallel processing (MPP) database
US9594580B2 (en) * 2014-04-09 2017-03-14 Bitspray Corporation Secure storage and accelerated transmission of information over communication networks

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101916261A (zh) * 2010-07-28 2010-12-15 北京播思软件技术有限公司 一种分布式并行数据库系统的数据分区方法
CN104462430A (zh) * 2014-12-12 2015-03-25 北京国双科技有限公司 关系型数据库的数据处理方法及装置

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN113641686A (zh) * 2021-10-19 2021-11-12 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备、存储介质及程序产品
CN113641686B (zh) * 2021-10-19 2022-02-15 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备、存储介质及程序产品
WO2023066222A1 (zh) * 2021-10-19 2023-04-27 腾讯科技(深圳)有限公司 数据处理方法、装置、电子设备、存储介质及程序产品

Also Published As

Publication number Publication date
US10831737B2 (en) 2020-11-10
WO2016191995A1 (zh) 2016-12-08
US20180075077A1 (en) 2018-03-15
CN106415534A (zh) 2017-02-15

Similar Documents

Publication Publication Date Title
CN106415534B (zh) 一种分布式数据库中关联表分区的方法和设备
EP2735979B1 (en) Data consistency management
US9684702B2 (en) Database redistribution utilizing virtual partitions
US7475055B2 (en) Method for executing a database query
US7392261B2 (en) Method, system, and program for maintaining a namespace of filesets accessible to clients over a network
US20130110873A1 (en) Method and system for data storage and management
US20100030995A1 (en) Method and apparatus for applying database partitioning in a multi-tenancy scenario
CN103631924B (zh) 一种分布式数据库平台的应用方法和系统
CN104794249A (zh) 一种数据库的实现方法和设备
CN101566986A (zh) 联机事务处理中的数据处理方法和装置
CN108268614B (zh) 一种森林资源空间数据的分布式管理方法
CN108875042A (zh) 一种混合联机分析处理系统及数据查询方法
JP4483034B2 (ja) 異種データソース統合アクセス方法
US20190251097A1 (en) Optimized data distribution system
CN106933891A (zh) 访问分布式数据库的方法和分布式数据服务的装置
CN109542861A (zh) 一种文件管理方法、装置和系统
CN109271438B (zh) 一种数据库访问方法及其系统
JP3367140B2 (ja) データベース管理方法
CN110134698A (zh) 数据管理方法及相关产品
WO2020259191A1 (zh) 一种数据中心节点分配方法、装置、系统及计算机设备
CN107220363A (zh) 一种支持全局复杂检索的跨地域查询方法及系统
US20090100000A1 (en) Acquisition and expansion of storage area network interoperation relationships
CN110826993A (zh) 项目管理处理方法、装置、存储介质和处理器
Groothuyse et al. GlobeTP: Template-based database replication for scalable web applications
CN108595482A (zh) 一种数据索引方法及装置

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