CN104424245B - 一种管理数据表的共享关系的方法和装置 - Google Patents
一种管理数据表的共享关系的方法和装置 Download PDFInfo
- Publication number
- CN104424245B CN104424245B CN201310379149.0A CN201310379149A CN104424245B CN 104424245 B CN104424245 B CN 104424245B CN 201310379149 A CN201310379149 A CN 201310379149A CN 104424245 B CN104424245 B CN 104424245B
- Authority
- CN
- China
- Prior art keywords
- super
- framework structure
- dial framework
- data
- row
- 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.)
- Expired - Fee Related
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/21—Design, administration or maintenance of databases
- G06F16/211—Schema design and management
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Software Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Mobile Radio Communication Systems (AREA)
Abstract
本发明公开了一种管理数据表的共享关系的方法和装置,所述方法包括:根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构;根据超级表架构中未被任何数据表占据的空穴,评估所述超级表架构的空余存储量;根据所述超级表架构的空余存储量,确定所述多个数据表的共享关系。所述装置与上述方法对应。利用上述方法和装置,可以有效管理数据库中的大量数据表之间的共享关系,从而设计或者优化数据表之间的共享方案。
Description
技术领域
本发明涉及数据库以及数据库中的数据表,更具体而言,涉及管理数据表的共享关系的方法和装置。
背景技术
随着信息技术和互联网的发展,资源共享成为一种趋势。例如,在数据库领域中,多个用户可以共同使用同一数据库,从而以高密度部署来实现最大可能的资源共享,节省硬件和软件成本。此时,每个用户并不独立地拥有共享的数据库,因此这样的用户往往称为“租户”(tenant),其表示使用数据库服务的一个逻辑实体。另一方面,在实现共享的同时,出于安全的需要并满足各个租户独有的需求,需要在各个租户的数据之间进行一定隔离。因此,对于支持多租户的数据库来说,需要在共享和隔离之间达到一种平衡。
更具体而言,数据的隔离通常意味着,不同租户使用不同架构的数据表来存储各自的数据;而数据的共享意味着,多个租户在一定程度上保持表架构的一致性,从而至少部分地共享数据表。在现有技术中,已经提出了若干种方案,这些方案通过使用例如数据透视表(pivot table)、私有表、预分配的字段、定制列、块折叠以及一些表架构映射技术来解决数据表架构的差异,从而实现数据表的共享。然而,这些解决表架构差异的方案仍存在一些不足,例如空闲数据较多,额外而昂贵的连接(join)成本,附加的谓词项,难以使用对定制列的索引等等。一些方案在逻辑上共享表架构,但物理上仍使用隔离的数据表。一些方案虽然支持物理上共享的数据表,但需要附加的操作和开销来实现共享,例如数据词典的查询、表描述符的映射、数据类型的映射、字段指针的关联等。因此,希望提出改进的方案,能够为数据库中的大量数据表设计出有效的共享表架构,从而高效地实现共享。
发明内容
鉴于以上提出的问题,提出本发明,旨在为数据库中的多个数据表提供更有效的共享方案。
根据本发明一个实施例,提出了一种管理数据表的共享关系的方法,包括:根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构;根据超级表架构中未被任何数据表占据的空穴,评估所述超级表架构的空余存储量;根据所述超级表架构的空余存储量,确定所述多个数据表的共享关系。
根据另一实施例,提出了一种管理数据表的共享关系的装置,包括:形成单元,配置为,根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构;估计单元,配置为根据超级表架构中未被任何数据表占据的空穴,评估所述超级表架构的空余存储量;以及确定单元,配置为根据所述超级表架构的空余存储量,确定所述多个数据表的共享关系。
利用上述方法和装置,可以有效管理数据库中的大量数据表之间的共享关系,从而设计或者优化数据表之间的共享方案。
附图说明
通过结合附图对本公开示例性实施方式进行更详细的描述,本公开的上述以及其它目的、特征和优势将变得更加明显,其中,在本公开示例性实施方式中,相同的参考标号通常代表相同部件。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图;
图2示出根据本发明一个实施例的管理数据表的共享关系的方法的流程图;
图3示出根据一个实施例添加数据表以形成超级表架构的步骤;
图4A和4B示出形成过程中的超级表架构的例子;
图5示出根据一个实施例所形成的超级表架构;
图6示出根据一个实施例管理数据表的共享关系的流程图;
图7示出拆分得到的两个超级表架构的例子;
图8A和8B示出超级表架构ST2中的空穴矩阵的排布;
图9示出根据一个实施例拆分得到的四个超级表架构;
图10示出根据一个实施例确定用于存储新数据表的表架构的流程图;
图11A和11B示出在一个例子中确定用于新数据表的表架构的示意图;以及
图12示出根据本发明一个实施例的管理数据表的共享关系的装置的框图。
具体实施方式
在附图中显示了本公开的一些优选实施方式,下面将参照附图更详细地描述这些优选实施方式。然而,可以以各种形式实现本公开,其不应被这里阐述的实施方式所限制。相反,提供这些实施方式是为了使本公开更加透彻和完整,并且能够将本公开的范围完整地传达给本领域的技术人员。
所属技术领域的技术人员知道,本发明可以实现为系统、方法或计算机程序产品。因此,本公开可以具体实现为以下形式,即:可以是完全的硬件、也可以是完全的软件(包括固件、驻留软件、微代码等),还可以是硬件和软件结合的形式,本文一般称为“电路”、“模块”或“系统”。此外,在一些实施例中,本发明还可以实现为在一个或多个计算机可读介质中的计算机程序产品的形式,该计算机可读介质中包含计算机可读的程序代码。
可以采用一个或多个计算机可读的介质的任意组合。计算机可读介质可以是计算机可读信号介质或者计算机可读存储介质。计算机可读存储介质例如可以是——但不限于——电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。计算机可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式计算机磁盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑磁盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。在本文件中,计算机可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
计算机可读的信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了计算机可读的程序代码。这种传播的数据信号可以采用多种形式,包括——但不限于——电磁信号、光信号或上述的任意合适的组合。计算机可读的信号介质还可以是计算机可读存储介质以外的任何计算机可读介质,该计算机可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
计算机可读介质上包含的程序代码可以用任何适当的介质传输,包括——但不限于——无线、电线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言或其组合来编写用于执行本发明操作的计算机程序代码,所述程序设计语言包括面向对象的程序设计语言—诸如Java、Smalltalk、C++,还包括常规的过程式程序设计语言—诸如”C”语言或类似的程序设计语言。程序代码可以完全地在用户计算机上执行、部分地在用户计算机上执行、作为一个独立的软件包执行、部分在用户计算机上部分在远程计算机上执行、或者完全在远程计算机或服务器上执行。在涉及远程计算机的情形中,远程计算机可以通过任意种类的网络——包括局域网(LAN)或广域网(WAN)—连接到用户计算机,或者,可以连接到外部计算机(例如利用因特网服务提供商来通过因特网连接)。
下面将参照本发明实施例的方法、装置(系统)和计算机程序产品的流程图和/或框图描述本发明。应当理解,流程图和/或框图的每个方框以及流程图和/或框图中各方框的组合,都可以由计算机程序指令实现。这些计算机程序指令可以提供给通用计算机、专用计算机或其它可编程数据处理装置的处理器,从而生产出一种机器,这些计算机程序指令通过计算机或其它可编程数据处理装置执行,产生了实现流程图和/或框图中的方框中规定的功能/操作的装置。
也可以把这些计算机程序指令存储在能使得计算机或其它可编程数据处理装置以特定方式工作的计算机可读介质中,这样,存储在计算机可读介质中的指令就产生出一个包括实现流程图和/或框图中的方框中规定的功能/操作的指令装置(instructionmeans)的制造品(manufacture)。
也可以把计算机程序指令加载到计算机、其它可编程数据处理装置、或其它设备上,使得在计算机、其它可编程数据处理装置或其它设备上执行一系列操作步骤,以产生计算机实现的过程,从而使得在计算机或其它可编程装置上执行的指令能够提供实现流程图和/或框图中的方框中规定的功能/操作的过程。
图1示出了适于用来实现本发明实施方式的示例性计算机系统/服务器12的框图。图1显示的计算机系统/服务器12仅仅是一个示例,不应对本发明实施例的功能和使用范围带来任何限制。
如图1所示,计算机系统/服务器12以通用计算设备的形式表现。计算机系统/服务器12的组件可以包括但不限于:一个或者多个处理器或者处理单元16,系统存储器28,连接不同系统组件(包括系统存储器28和处理单元16)的总线18。
总线18表示几类总线结构中的一种或多种,包括存储器总线或者存储器控制器,外围总线,图形加速端口,处理器或者使用多种总线结构中的任意总线结构的局域总线。举例来说,这些体系结构包括但不限于工业标准体系结构(ISA)总线,微通道体系结构(MAC)总线,增强型ISA总线、视频电子标准协会(VESA)局域总线以及外围组件互连(PCI)总线。
计算机系统/服务器12典型地包括多种计算机系统可读介质。这些介质可以是任何能够被计算机系统/服务器12访问的可用介质,包括易失性和非易失性介质,可移动的和不可移动的介质。
系统存储器28可以包括易失性存储器形式的计算机系统可读介质,例如随机存取存储器(RAM)30和/或高速缓存存储器32。计算机系统/服务器12可以进一步包括其它可移动/不可移动的、易失性/非易失性计算机系统存储介质。仅作为举例,存储系统34可以用于读写不可移动的、非易失性磁介质(图1未显示,通常称为“硬盘驱动器”)。尽管图1中未示出,可以提供用于对可移动非易失性磁盘(例如“软盘”)读写的磁盘驱动器,以及对可移动非易失性光盘(例如CD-ROM,DVD-ROM或者其它光介质)读写的光盘驱动器。在这些情况下,每个驱动器可以通过一个或者多个数据介质接口与总线18相连。存储器28可以包括至少一个程序产品,该程序产品具有一组(例如至少一个)程序模块,这些程序模块被配置以执行本发明各实施例的功能。
具有一组(至少一个)程序模块42的程序/实用工具40,可以存储在例如存储器28中,这样的程序模块42包括——但不限于——操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。程序模块42通常执行本发明所描述的实施例中的功能和/或方法。
计算机系统/服务器12也可以与一个或多个外部设备14(例如键盘、指向设备、显示器24等)通信,还可与一个或者多个使得用户能与该计算机系统/服务器12交互的设备通信,和/或与使得该计算机系统/服务器12能与一个或多个其它计算设备进行通信的任何设备(例如网卡,调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口22进行。并且,计算机系统/服务器12还可以通过网络适配器20与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器20通过总线18与计算机系统/服务器12的其它模块通信。应当明白,尽管图中未示出,可以结合计算机系统/服务器12使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
下面结合附图描述本发明的各个实施例。在本发明的实施例中,为了管理数据库中多个数据表之间的共享关系,首先假定性地基于上述多个数据表的数据类型,形成超级表架构,然后基于该超级表架构中未被占据的空穴来评估该超级表架构的空余存储量。在评估获得上述假设形成的超级表架构的空余存储量的基础上,就可以确定该多个数据表的共享关系,例如包括,是否使得上述多个数据表共享该使用该超级表架构。
现在参看图2,其示出根据本发明一个实施例的管理数据表的共享关系的方法的流程图。如图所示,首先在步骤220,根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构;接着,在步骤240,根据所述超级表架构中未被任何数据表占据的空穴(hole),评估所述超级表架构的空余存储量;然后,在步骤260,根据所述超级表架构的空余存储量,确定所述多个数据表的共享关系。下面结合典型场景中的具体例子描述上述各个步骤的执行方式。
在一个典型场景中,数据库中已经存储有大量的数据表。在一种情况下,数据库中的各个数据表利用各自的表架构分别独立存储,数据表之间没有共享;在另一种情况下,一些数据表已经按照某种方案形成共享组。然而,已有的共享方案和共享分组可能不够理想。为了全局性地对多个数据表的共享方案进行设计或优化,可以通过图2所示的方法管理上述多个数据表的共享关系,从而对共享方案和共享分组进行设计或重组。
为此,首先,在步骤220,根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构。在一个实施例中,上述多个数据表是数据库中存储的所有数据表。在另一实施例中,上述多个数据表是数据库中存储的部分数据表。在一个实施例中,上述多个数据表是针对同一行业的数据表,例如电信行业、银行业、制造业、零售业等等,因为同一行业的数据表往往具有相似的结构特点,因而具有更大的共享可能。出于类似的原因和考虑,在另一实施例中,上述多个数据表是针对同一地区的数据表,或针对同一时段的数据表。在一个实施例中,上述多个数据表是各自独立存储的数据表;在另一实施例中,上述多个数据表中的至少一部分已经形成共享组。
对于如上所述的多个数据表,为了形成将这多个数据表都包含在内的超级表架构,考虑所述多个数据表的各个列的数据类型。具体地,基于数据类型形成超级表架构的各个列,使得来自不同数据表但具有兼容的数据类型的列在超级表架构中共享同一列。在一个实施例中,可以通过逐个添加上述多个数据表的各个列的方式来形成超级表架构。
图3示出根据一个实施例添加数据表以形成超级表架构的步骤。如图3所示,首先,在步骤31,针对当前数据表Ti创建代表该数据表的新行。一般地,数据表Ti具有多个数据行,例如m个行,和多个列,例如n个列。在一个实施例中,在步骤31,创建m个新行以分别代表Ti的m行。在另一实施例中,在步骤31,针对一个数据表仅创建一个新行,但通过标记、索引等记录方式使得这一个新行代表数据表Ti的m个实际数据行。
接着,考虑数据表Ti中的某个列,例如第j列Cj。具体地,在步骤32,判断超级表架构中是否存在与列Cj具有兼容的数据类型的已有列。可以理解,在典型情况下,数据表Ti通常在第0行(非数据行)定义各个列的数据类型。在其他情况下,数据表Ti也可以通过其他方式记录和定义其n列中各个列的数据类型。另一方面,超级表架构也会记录其已有的各个列的数据类型。上述数据类型包括,实数(real)、整型(integer)、小整型(small int)、字符(char)、可变字符(var char)、时间等其他数据库可识别的类型。可以理解,相同的数据类型必然彼此兼容。此外,相似的数据类型之间也存在兼容关系。例如,可以将整型,大整型(big int)以及小整型(small int)认为是兼容的数据类型,因为这几个数据类型都限定了整数型数据,仅仅是可允许的字节数,或者数据长度有所不同。类似地,字符和可变字符可以认为是兼容的数据类型。对此,本领域技术人员能够根据现有技术中已有的标准来判断两种数据类型是否兼容。基于此,在步骤32,可以首先确定表Ti的列Cj的数据类型,然后将该数据类型与超级表架构中各个已有列的数据类型进行比对,从而判断出超级表架构中是否存在与列Cj具有兼容的数据类型的已有列。
如果超级表架构中存在与列Cj的数据类型相兼容的已有列,那么前进至步骤33,继续判断在针对Ti创建的新行中与上述已有列对应的位置是否已经被同一表Ti的其他列占据。如果没有,则前进至步骤34,将上述列Cj填充在上述新行中与所述已有列对应的位置。
在一个实施例中,有可能超级表架构中存在多个与列Cj的数据类型相兼容的已有列。在这样的情况下,通过步骤33的判断可以获取上述多个已有列中未被Ti的其他列占据的空余已有列。如果存在多个空余已有列,则在步骤34,从中选择数据类型与Cj的数据类型兼容度较高的已有列,将列Cj填充在上述新行中与所选的兼容度最高的已有列对应的位置。对于数据类型的兼容度,本领域技术人员能够根据已有标准进行判断。例如,完全相同的数据类型具有最高的兼容度。对于兼容但不完全相同的数据类型,可以认为,字段长度相差较小的数据类型之间具有较高的兼容度。例如,假定列Cj的数据类型为最大长度为1000字节的字符(var char 1000),备选的两个空余已有列的数据类型分别为最大长度为500字节的字符以及最大长度为800字节的字符,那么可以认为,最大长度为800字节字符的数据类型与Cj的数据类型具有更高的兼容度。
另一方面,如果超级表架构中不存在与列Cj的数据类型相兼容的已有列(步骤32的判断结果为否),或者与兼容的已有列相对应的位置全都已经被Ti的其他列占据(步骤33的判断结果为是),在任一种情况下,都前进至步骤35,在超级表架构中添加新列,将列Cj填充到新行中与所添加的新列对应的位置。并且,将列Cj的数据类型作为该新列的数据类型。
在步骤34或步骤35之后,在步骤36,判断列Cj是否为表Ti的最后一列。如果Cj不是Ti的最后一列,那么在步骤37,使得j增加1,也就是,前进至下一列。然后,返回到步骤32,重复执行步骤32-36,逐个处理Ti中的各个列,直到处理完Ti的最后一列。此时,前进至步骤38,判断当前数据表Ti是否为有待处理的多个数据表中的最后一个。如果不是,那么在步骤39,使得i增加1,也就是,前进至下一个数据表。然后,返回到步骤31,为该下一个数据表创建新行,并分别处理其各个列,直到处理完所述多个数据表中的所有表的所有列。通过逐个添加多个数据表中各个数据表的各个列,形成的超级表架构就能够包含上述多个数据表。并且,在这样的超级表架构中,来自不同数据表但具有兼容的数据类型的列在超级表架构中共享同一列。
在一个实施例中,形成超级表架构的过程还包括,确定超级表架构的各个列的数据类型。如前所述,超级表架构的同一列可以具有多种兼容的数据类型。可以将兼容的数据类型中具有最大字节长度的数据类型作为超级表架构的列的数据类型。
下面结合一个具体例子描述图3的步骤的执行。在该具体例子中,假定要基于10个数据表T1,T2,…,T10形成超级表架构,其中T1具有12列,100个数据行,因此可以表示为T1=12*100;T2具有5列,200个数据行,表示为T2=5*200。类似地,T3=5*50,T4=2*300,T5=4*150,T6=6*100,T7=6*300,T8=3*200,T9=3*150,T10=4*400。为了基于以上10个数据表形成超级表架构,如图3所示地逐一添加各个表的各个列。
在一个例子中,首先添加数据表T1。在添加T1之前,超级表架构为空的表架构。基于该空的表架构,在步骤31为T1创建新行,然后,针对T1的各个列执行步骤32-37。这样执行的结果为,形成了一个与T1的列排布相同的表作为超级表架构。图4A示出此时的超级表架构。如图4A所示,此时的超级表架构仅包含一行,该行对应于数据表T1,可以代表T1的所有数据行。并且,该超级表架构包含12个列,分别对应于T1的12个列,其中T1Ci表示T1中的第i列。
可以理解,创建一个新行来代表一个数据表的表示方式更有利于图示的简单和清楚,因此在下面的例子中,均采用这样的表示方式。并且,在下文中需要强调的地方,将超级表架构中用于代表一个数据表的单个行称为超级行。但是,超级行的表示方式仅仅是出于示例的目的。实际上,也可以根据数据表的实际数据行的数目在超级表架构中为该数据表创建对应的行。
接着,如步骤38-39所示,前进至下一数据表T2。为此,在步骤31为数据表T2创建一个新的超级行,即第2行,于是超级表架构变为2行12列的表架构。然后,逐一添加数据表T2的各个列。假定通过比对,T2的第一列C1的数据类型与超级表架构中第2列(即T1C2所对应的列)的数据类型最兼容,则在步骤34,将T2C1填充在第2行中与第2列对应的位置。接着,判断数据表T2的下一列C2。假定T2C2的数据类型与超级表架构中的第2列、第5列、第7列的数据类型均兼容。然而,第2列已经被T2中的其他列(C1)占据,因此,从空余的第5列和第7列中选择兼容度较高的列,由此,将T2C2填充在第2行中与第5列对应的位置。接下来类似地处理C3,C4列,分别将其填充到超级表架构的第3列和第6列。接着判断T2的最后一列C5。假定在当前的超级表架构中,不存在与C5的数据类型相兼容的已有列,那么,在步骤35,在超级表架构中添加新列,即第13列,将T2C5填充到新行中与该新列对应的位置。并且,将列T2C5的数据类型作为该新列的数据类型。图4B示出此时的超级表架构。如图4B所示,此时的超级表架构包含2个超级行,第2行对应于数据表T2。并且,通过添加新列,该超级表架构包含13个列。数据表T2的各个列C1-C5分别填充在第2行中与第2列、第5列、第3列、第6列以及新添加的第13列对应的位置。
接着,类似地添加数据表T3,T4,…T10的各个列,直到完成所有10个数据表的处理。由此形成的超级表架构必然可以包含所有10个数据表T1-T10。
在一个实施例中,以随机的顺序逐一地处理和添加各个数据表。在另一实施例中,首先根据列的数目对有待处理的多个数据表进行排序。例如,对于上述的10个表T1-T10,按照列的数目从大到小的顺序,可以将其排列为T1,T6,T7,T2,T3,T5,T10,T8,T9,T4。然后,按照以上顺序,逐一添加数据表。图5示出根据一个实施例所形成的超级表架构。更具体而言,图5的超级表架构是将上述10个数据表T1-T10按照以上所排的顺序逐一添加所形成的超级表架构。如图5所示,所形成的超级表架构能够包含所有10个数据表。并且,在该超级表架构中,来自不同数据表但具有兼容的数据类型的列在超级表架构中共享同一列。
由于构成超级表架构的多个数据表(例如以上的表T1-T10)具有不同的列数目以及不同的数据类型,因此,所形成的超级表架构中必然存在一些未被任何数据表的列占据的空穴。例如,如图5所示的超级表架构共包含16列。在与数据表T1相对应的第一行中,仅仅前12列被T1的各个列填充,后面的第13到第16列未被任何数据表的列占据,因而形成4个空穴。由于图5的超级表架构是根据列的数目从大到小的顺序来添加数据表而形成,因此,该超级表架构的各个行中被填充的列的数目从第一行到最后一行,即从上到下,越来越少;换而言之,该超级表架构的各个行中的空穴数目从上到下越来越多。例如,对应于数据表T1的第1行中存在4个空穴,对应于数据表T6的第2行中存在10个空穴,而对应于数据表T4的最后一行中存在14个空穴。这些空穴是由于将多个具有不同列数、不同数据类型的数据表综合在一起形成超级表架构而产生的。由于空穴的位置未被任何数据表占据,这意味着,不会有任何来自数据表的数据被存储到空穴所对应的位置,因此,空穴对应于超级表架构中空余的存储位置。因此,可以基于这些产生的空穴来估计超级表架构的空余存储量,也就是执行图2的步骤240。
具体地,在一个实施例中,在步骤240,将超级表架构的空余存储量评估为正比于该超级表架构中包含的所有空穴的数目。例如,对于图5所示的超级表架构,可以确定其中包含的全部空穴的数目,将该数目作为该超级表架构的空余存储量。
在另一实施例中,在步骤240,考虑空穴对应的数据表的实际行数,将超级表架构的空余存储量估计为,所有空穴所对应的数据表单元的总数目。实际上,在超级表架构用一个超级行代表一个数据表的所有m个数据行的情况下,该超级行中的一个单元,称为超级单元,实际上代表了m个数据表单元。在上述超级单元未被填充的情况下,形成的空穴同样地对应于m个数据表单元。具体地,图5的超级表架构包含10个超级行,分别对应于10个数据表。第一超级行代表了数据表T1。由于数据表T1实际上具有100个数据行,因此,超级表架构的第一超级行中的一个超级单元,包括空穴,实际上代表了100个T1的数据表单元。因此,第一超级行中所形成的4个空穴对应于4*100个数据表单元。类似地,第三超级行对应于数据表T7,其具有300个数据行。因此,第三超级行中所形成的10个空穴对应于10*300个数据表单元。通过这样的方式,可以将图5的超级表架构的空余存储量C(h)计算为:C(h)=4*100+10*100+10*300+11*200+11*50+12*150+12*400+13*200+13*150+14*300=22500
另一方面,在超级表架构用m个行分别代表一个数据表的所有m个数据行的情况下,空穴的总数目直接对应于数据表单元的总数目。因此,在这样的情况下,可以通过确定空穴的数目而获得对应的数据表单元的数目,进而评估确定超级表架构的空余存储量。
在另一实施例中,进一步考虑空穴位置对应的列的数据类型,将超级表架构的空余存储量估计为,所有空穴所对应的总数据存储量。具体地,可以首先确定超级表架构中空穴所在的列,然后确定该列的数据类型。如前所述,超级表架构的列的数据类型被确定为该列所兼容的数据类型中具有最大字节长度的数据类型。在确定了空穴对应的列的数据类型的基础上,基于该数据类型的字节长度,就可以确定对应空穴的数据存储量。例如,在图5的超级表架构中,假定第一列所兼容的数据类型包括整型、大整型、小整型等,其中最大字节长度的数据类型例如是具有16字节的大整型。由此,可以将第一列中的空穴的数据存储量确定为16字节。通过分别确定各个列的数据类型,可以确定各个列中的空穴的数据存储量,进而计算获得整个超级表架构中的所有空穴所对应的总数据存储量。
在一个实施例中,同时考虑空穴对应的数据表的实际行数和空穴对应的列的数据类型来确定所有空穴对应的总数据存储量。对于某个空穴来说,该空穴所在的超级行决定了所对应的数据表,进而决定了该空穴对应的数据表单元数目;该空穴所在的列决定了所对应的数据类型。可以认为该数据类型适用于该空穴所对应的多个数据表单元。因此,可以将该空穴的数据存储量确定为,该空穴对应的数据表单元数目乘以该空穴对应的数据类型的字节长度。通过针对各个空穴进行上述计算,可以确定超级表架构中全部空穴的总数据存储量。例如,在图5的例子中,如前所述,第三超级行对应于具有300个数据行的数据表T7,因此,第三超级行中的每个空穴对应于300个数据表单元。另一方面,假定第一列的数据类型为大整型,具有16个字节。于是,可以将第三行第一列的空穴的数据存储量确定为300*16字节。类似地,可以确定其他空穴的数据存储量,进而计算获得所有空穴对应的总数据存储量。
以上列举了几种基于超级表架构中的空穴来确定该超级表架构的空余存储量的执行方式。本领域技术人员在阅读本说明书的情况下,还可以对上述执行方式进行修改或组合,例如引入一些参数,考虑更多因素等,从而产生变体执行方式。这样的变体执行方式也应包含在本发明的构思范围之内。
在确定了所形成的超级表架构的空余存储量的基础上,在步骤260,根据所确定的超级表架构的空余存储量,确定构成该超级表架构的多个数据表的共享关系。图6示出根据一个实施例管理数据表的共享关系的流程图。该流程图中的步骤220和240与图2所示的相同,不过更详细地示出了上述步骤260。
具体地,步骤260包括,首先,在步骤261,基于所确定的超级表架构的空余存储量判断与空余存储量有关的预定条件是否得到满足。如果已满足上述预定条件,则在步骤262,确定上述多个数据表共享该超级表架构。另一方面,如果上述预定条件没有满足,那么在步骤263,拆分上述超级表架构,并用拆分得到的超级表架构替换原超级表架构,然后返回步骤240。于是,再次执行步骤240,此时对当前新的超级表架构,也就是拆分得到的超级表架构,进行空余存储量评估。在预定条件不满足的情况下,反复执行超级表架构的拆分和空余存储量评估,直到预定条件得到满足。
在一个实施例中,上述与空余存储量有关的预定条件为,超级表架构的空余存储量小于一预定阈值。更具体地,在超级表架构的空余存储量被估计为空穴数目的情况下,上述预定阈值例如可以是特定空穴数目;在超级表架构的空余存储量被估计为空穴所对应的数据表单元的总数目的情况下,上述预定阈值例如可以是特定单元数目;在超级表架构的空余存储量被估计为空穴所对应的总数据存储量的情况下,上述预定阈值例如可以是特定存储量。在其他情况下,可以对应地设置预定阈值,来判断超级表架构的空余存储量是否过高。
在一个实施例中,上述与空余存储量有关的预定条件为,超级表架构的空余存储量相对于构成超级表架构的多个数据表的原始存储量的比例小于一预定比例。更具体地,在超级表架构的空余存储量被估计为空穴数目的情况下,可以将构成超级表架构的多个数据表的原始存储量确定为该超级表架构的总单元数目,从而将上述预定条件设置为,超级表架构的空穴数目相对于总单元数目的比例小于一预定比例。在超级表架构的空余存储量被估计为空穴所对应的数据表单元的总数目的情况下,可以将构成超级表架构的多个数据表的原始存储量确定为,上述多个数据表的数据表单元的总数目,从而将上述预定条件设置为,空穴对应的数据表单元的总数目相对于多个数据表的数据表单元的总数目的比例小于一预定比例。在超级表架构的空余存储量被估计为空穴所对应的总数据存储量的情况下,可以将构成超级表架构的多个数据表的原始存储量确定为,上述多个数据表的总数据存储量,从而将上述预定条件设置为,空穴对应的总数据存储量相对于多个数据表的总数据存储量的比例小于一预定比例。在其他情况下,可以对应地确定上述原始存储量和预定比例,来判断超级表架构的空余存储量是否过高。
在一个实施例中,如前所述,通过拆分原始超级表架构而形成多个超级表架构。对于拆分获得的多个超级表架构,可以分别判断各个超级表架构的空余存储量是否满足上述预定条件。在一种实施方式中,也可以综合考虑该多个超级表架构的空余存储量来设置预定条件。在一个例子中,可以将上述与空余存储量有关的预定条件设置为,拆分获得的多个超级表架构的空余存储量之和小于一预定阈值。在另一例子中,可以将上述与空余存储量有关的预定条件设置为,拆分获得的多个超级表架构的空余存储量之和相对于构成原始超级表架构的多个数据表的原始存储量的比例小于一预定比例。预定阈值、原始存储量等参数的计算和确定方式可以参照之前的例子。
可以理解,上述与空余存储量有关的预定条件用于衡量超级表架构的空余存储量是否过高。尽管以上描述了该预定条件的若干具体例子,然而,本领域技术人员在阅读本说明书的情况下,根据空余存储量的评估方式,可以对上述预定条件的设置方式进行修改或组合,从而产生变体执行方式。
如图6所示,如果上述预定条件没有得到满足(对应于超级表架构的空余存储量过高),则在步骤263拆分上述超级表架构,并用拆分得到的超级表架构替换原超级表架构。在步骤263拆分原超级表架构的过程中,应确保任一个数据表完全位于拆分后的某一个超级表架构中而不被拆分。如果通过拆分过程在某个生成的超级表架构中存在空列,可以删除该空列。对于以上拆分过程,可以采用多种执行方式。
在一个实施例中,在步骤263,随机地或者平均地拆分超级表架构的行,从而拆分获得多个超级表架构。例如,对于图5所示的具有10行(对应于10个数据表)的超级表架构,可以通过平均拆分这10行,而得到2个各自具有5行的超级表架构。
在一个实施例中,在步骤263,以超级表架构中的某个特定行作为标准,在超级表架构中挑选出能够被该特定行所覆盖的缩减行,所述缩减行中每一个被填充的单元都与所述特定行中某一个被填充单元共享同一列。接着,将超级表架构拆分为由上述特定行及其缩减行构成的超级表架构,和由剩余行构成的超级表架构。在一个例子中,将列数目最多的数据表所对应的行选择为上述特定行,以此为标准进行超级表架构的拆分。
在一个实施例中,在步骤263,以消除超级表架构中由连续空穴构成的空穴矩阵的方式拆分超级表架构。具体地,在一个例子中,在超级表架构中确定最大空穴矩阵,以消除该最大空穴矩阵的方式拆分超级表架构。在确定上述最大空穴矩阵的过程中,可以调整超级表架构的列的排列顺序,以获得更多数目的连续空穴,从而形成最大空穴矩阵。在一个例子中,在超级表架构中确定空穴数目之和最大的多个空穴矩阵的排布,以同时消除该多个空穴矩阵的方式拆分超级表架构。进一步地,还可以考虑空穴矩阵所对应的数据表单元数目,使得超级表架构的拆分能够消除具有最大数据表单元数目的空穴矩阵。
以上列举了几种拆分超级表架构的执行方式。本领域技术人员在阅读本说明书的情况下,还可以对上述执行方式进行修改或组合,从而产生变体执行方式。这样的变体执行方式也应包含在本发明的构思范围之内。
下面结合一个具体例子描述图6的各个步骤的执行过程。假定在步骤220,基于上述10个数据表T1-T10形成了如图5所示的超级表架构。接着,在步骤240,估计该超级表架构的空余存储量。在本例子中,将超级表架构的空余存储量估计为所有空穴所对应的数据表单元的总数目。如前所述,在此情况下,图5的超级表架构的空余存储量C(h)可以估计为22500(个单元)。然后,在步骤260,基于该空余存储量来确定T1-T10的共享关系。具体地,首先在步骤261,判断与空余存储量有关的预定条件是否得到满足。在本例子中,假定上述预定条件为,各个超级表架构的空余存储量之和相对于构成原始超级表架构的多个数据表的原始存储量的比例小于一预定比例。上述构成原始超级表架构的多个数据表的原始存储量可以计算为T1-T10的数据表单元的总数目。根据之前对T1-T10的行数和列数的说明,可以计算获得该原始存储量C(t)=12*100+5*200+5*50+2*300+4*150+6*100+6*300+3*200+3*150+4*400=8700。假定上述预定比例被设定为90%。那么可以确定,在仅形成图5所示的超级表架构的情况下,超级表架构的空余存储量相对于原始存储量的比例为C(h)/C(t)=258%。因此,预定条件没有得到满足,于是在步骤263,对图5所示的超级表架构进行拆分。
为了拆分图5所示的超级表架构,在一个例子中,以T1所对应的第一行作为标准,确定能够被第一行所覆盖的缩减行。根据图5的超级表架构的排布可以容易地确定出,T6,T10和T9所对应的行均能够被第一行覆盖,可以作为第一行的缩减行。因此,可以将该超级表架构拆分为由第一行及其缩减行构成的超级表架构,和由剩余行构成的超级表架构。于是,可以得到图7所示的两个超级表架构。超级表架构ST1由数据表T1,T6,T10和T9构成,超级表架构ST2由其他数据表构成。用这两个超级表架构替换图5所示的原超级表架构。
接着返回到步骤240,估计各个超级表架构的空余存储量。按照与之前相同的估计方法,可以将超级表架构ST1的空余存储量估计为C1(h)=6*100+8*100+8*400+9*150=59500,将超级表架构ST2的空余存储量估计为C2(h)=6*300+7*200+7*50+8*150+9*200+10*300=95500。然后在步骤261,再次判断预定条件是否得到满足。此时,各个超级表架构的空余存储量之和为C(h)=C1(h)+C2(h)=15500,相对于原始存储量的比例为C(h)/C(t)=15500/8700=178%,仍然高于预定比例90%,因此,前进至步骤263进行再次拆分。
为了继续拆分图7所示的两个超级表架构ST1和ST2,在一个例子中,以最多地消除空穴矩阵的方式拆分超级表架构。图8A和8B示出超级表架构ST2中的空穴矩阵的排布。具体地,图8A的排布包括右上角的一个2*3的空穴矩阵和下方的一个5*3的空穴矩阵。图8B的排布包括上方的一个3*2的空穴矩阵和下方的一个3*4的空穴矩阵。图中空穴矩阵用灰色示出。可以看到,空穴矩阵中的空列不必连续(例如图8A下方的空穴矩阵和图8B上方的空穴矩阵),因为这可以通过改变列的顺序而克服。显然,图8A的排布方式中空穴矩阵的空穴总数目更多。更具体地,还可以考虑空穴矩阵所对应的数据表单元数目。具体地,图8A中的两个空穴矩阵所对应的数据表单元数目之和为2*(300+200+50)+5*(150+200+300)=4350,而图8B中的两个空穴矩阵对应的数据表单元数目之和为3*(300+200)+3*(50+150+200+300)=3600。这意味着,消除图8A所示的两个空穴矩阵可以消除更多与数据表单元相关的空余存储量。因此,选择图8A所示的空穴矩阵排布进行消除。类似地,可以考虑超级表架构ST1中的空穴排布,以消除更多空穴或更多数据表单元的方式来拆分超级表架构ST1。
图9示出根据一个实施例拆分得到的四个超级表架构,其中超级表架构ST11和ST12是拆分图7所示的超级表架构ST1得到的两个超级表架构,超级表架构ST21和ST22是按照图8A所示的拆分方案拆分图7所示的超级表架构ST2得到的两个超级表架构。在进行拆分之后,再次返回到步骤240估计各个超级表架构的空余存储量。可以看到,ST11与数据表T1对应,没有空穴,因此其空余存储量为0。通过计算可以确定,其他三个超级表架构的空余存储量依次为2550,2450和2750。此时,各个超级表架构的空余存储量之和为C(h)=7750,相对于原始存储量的比例为C(h)/C(t)=7750/8700=89%。因此,步骤261中的预定条件得到满足。于是,在步骤262,确定数据表T1-T10按照形成的超级表架构进行数据表共享。
以上结合具体例子描述了图2和图6的方法的执行过程。通过上述方法,可以确定已有的多个数据表(例如T1-T10)的共享关系。另一方面,在管理数据库中的数据表的共享关系的过程中,所面临的另一典型场景是,在针对一租户创建一新的数据表时,为该新创建的数据表设计共享方案。因此,在一个实施例中,管理数据表的共享关系的方法还包括,响应于创建新数据表的请求,确定用于存储该新数据表的表架构。
图10示出根据一个实施例确定用于存储新数据表的表架构的流程图。如图10所示,首先在步骤101,确定上述新数据表的列数n以及各个列的数据类型。可以理解,为了创建新的数据表,在创建请求中需要指定该新数据表的列数、各个列的存储内容、数据类型等信息。因此,可以通过获取创建请求来获得有关列数n和数据类型的信息。接着,在步骤102,从数据库的已有表架构中获取列数大于或等于上述新数据表的列数n的备选表架构。上述已有表架构可以是数据库中单个已有数据表的表架构,也可以是由多个已有数据表共同形成的超级表架构。简单起见,将前述数据表T1-T10作为数据库中的已有数据表。在一个实施例中,各个数据表分别单独存储,各自形成对应的表架构。在另一实施例中,通过共享关系的组织和确定,部分数据表作为共享组形成超级表架构。例如,如图9所示,数据表T1单独存储,具有其独有的表架构;而数据表T6,T10和T9共同形成超级表架构ST12。这些表架构都可以作为已有表架构与新创建的数据表进行比对。
接着,对获取的备选表架构进行进一步的分析和判断。具体地,在步骤103,从备选表架构中获取这样的兼容表架构,所述兼容表架构中所包含的n个列的数据类型分别覆盖所述新数据表的n个列的数据类型。上述数据类型的覆盖不仅要求数据类型之间相互兼容,还要求前一数据类型的字节长度大于或等于后一数据类型。例如,大整型(big int)可以覆盖整型和小整型,字节长度为1000字节的字符可以覆盖字节长度在1000字节以内的字符,等等。在一个实施例中,在数据类型对比过程中,如果对于新数据表的特定列的特定数据类型T,在备选表架构中存在多个列的多个数据类型都可以覆盖该数据类型T,则从中选择与该特定数据类型T最为接近的数据类型。本领域技术人员能够根据现有技术中的标准,利用各种已有算法,通过对比备选表架构和新数据表的各个列的数据类型来确定出兼容表架构。
在获取到兼容表架构的情况下,在步骤104,选择一兼容表架构作为用于存储该新数据表的表架构。可以理解,在仅获得一个兼容表架构的情况下,就可以直接将该仅有的兼容表架构用于存储该新数据表。在获得了多个兼容表架构的情况下,在一个实施例中,从中选择列数最少的兼容表架构用于存储该新数据表。在另一实施例中,从多个兼容表架构中选择与新数据表的数据类型兼容度更高的表架构用于存储该新数据表。如前所述,对于数据类型的兼容度,本领域技术人员能够根据已有标准进行判断。例如可以认为字段长度相差较小的数据类型之间具有较高的兼容度。
另一方面,如果在步骤102未能从已有表架构中获取到备选表架构,或者在步骤103未能从备选表架构中获取到兼容表架构,那么就无法利用已有表架构与新数据表进行共享。在一个实施例中,在这样的情况下,在步骤105,针对该新数据表创建新的表架构,用于存储该新数据表。
下面结合一个具体例子描述以上各个步骤的执行。图11A和11B示出在一个例子中确定用于新数据表的表架构的示意图。具体地,图11A示出已有表架构和新数据表的例子。在图11A的例子中,存在3个已有表架构S1,S2和S3,其中S1具有8个列,S2具有6个列,S3具有4个列,各个已有表架构的各个列的数据类型如最上面的附加说明行所示。假定当前需要创建的新数据表T具有5个列,这5个列的数据类型分别为整型(integer)、50字节字符(varchar 50),整型(integer)、1000字节字符(var char 1000)以及时间戳(timestamp)。在图10的步骤101获得新数据表的上述信息的基础上,在步骤102,基于已有表架构的列数获取备选表架构。具体地,已有表架构S1和S2的列数均大于新数据表的列数,因此,获取这两个已有表架构作为备选表架构。在步骤103,比对备选表架构的数据类型和新数据表的各个列的数据类型,从而获得兼容表架构。具体地,通过数据类型的对比可以确定,S1和S2均可以作为兼容表架构。由于S2具有更少的列数,因此在步骤104,选择S2作为用于存储新数据表T的表架构。图11B示出了兼容表架构S2与新数据表之间的数据类型覆盖对应关系。具体地,新数据表的第一列的数据类型为整型,可被S2第4列的数据类型覆盖,第二列的数据类型var char 50,可被S2第3列的数据类型,var char 100所覆盖。基于这样的覆盖对应关系,可以将新数据表T的数据分别存储在S2中具有对应覆盖关系的各个列中。由此,使得新数据表与已有的表架构实现共享,节约表架构的维护成本。
基于同样的发明构思,本发明还提供一种管理数据表的共享关系的装置。图12示出根据本发明一个实施例的管理数据表的共享关系的装置的框图。如图所示,用于管理数据表的共享关系的装置总体上标注为120。具体地,装置120包括:形成单元122,配置为,根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构;估计单元124,配置为根据超级表架构中未被任何数据表占据的空穴,评估所述超级表架构的空余存储量;以及确定单元126,配置为根据所述超级表架构的空余存储量,确定所述多个数据表的共享关系。
根据一个实施例,上述形成单元122包括(未示出):行创建模块,配置为,对于所述多个数据表中的某个数据表Ti,在超级表架构中创建代表该数据表Ti的新行;列填充模块,配置为,对于该数据表Ti中的某列Cj,在超级表架构中存在与该列Cj具有兼容的数据类型的已有列且该已有列未被占据的情况下,将该列Cj填充在上述新行中与所述已有列对应的位置;否则,在超级表架构中添加新列,将该列Cj填充到上述新行中与所添加的新列对应的位置。
根据一个实施例,上述评估单元124配置为:确定所述超级表架构中所有空穴所对应的数据表单元的总数目作为该超级表架构的空余存储量。
根据另一实施例,上述评估单元124配置为:确定所述超级表架构中所有空穴所对应的总数据存储量作为该数据表架构的空余存储量。
在一个实施例中,上述确定单元126包括(未示出):条件判断模块,配置为基于所述超级表架构的空余存储量判断与空余存储量有关的预定条件是否得到满足;拆分模块,配置为在上述预定条件没有得到满足的情况下,拆分上述超级表架构,并用拆分得到的超级表架构替换原超级表架构;以及共享确定模块,配置为在上述预定条件得到满足的情况下,确定所述多个数据表共享使用所述超级表架构。
根据一个实施例,上述预定条件包括以下之一:所述超级表架构的空余存储量小于一预定阈值;所述超级表架构的空余存储量相对于构成该超级表架构的所述多个数据表的原始存储量的比例小于一预定比例;以及所述拆分得到的超级表架构的空余存储量之和相对于构成原超级表架构的多个数据表的原始存储量的比例小于一预定比例。
在一个实施例中,上述拆分模块配置为:以消除超级表架构中由连续空穴构成的空穴矩阵的方式拆分超级表架构。
在另一实施例中,上述拆分模块配置为:以所述超级表架构中的某个特定行作为标准,在超级表架构中挑选出能够被该特定行所覆盖的缩减行;将超级表架构拆分为由上述特定行及其缩减行构成的超级表架构,和由剩余行构成的超级表架构。
在一个实施例中,装置120还包括新数据表处理单元128(虚线示出),配置为:响应于创建新数据表的请求,确定用于存储该新数据表的表架构。
根据一个实施例,所述新数据表处理单元128包括(未示出):信息确定模块,配置为确定所述新数据表的列数n以及各个列的数据类型;备选表架构获取模块,配置为从数据库的已有表架构中获取列数大于或等于上述新数据表的列数n的备选表架构;兼容表架构获取模块,配置为从备选表架构中获取这样的兼容表架构,所述兼容表架构所包含的n个列的数据类型分别覆盖所述新数据表的n个列的数据类型;以及选择模块,配置为选择一兼容表架构作为用于存储该新数据表的表架构。
根据一个实施例,上述新数据表处理单元128还包括(未示出)创建模块,配置为:在未能获取所述备选表架构,或者未能获取所述兼容表架构的情况下,针对该新数据表创建新的表架构,用于存储该新数据表。
可以理解,图12中的各个单元是以功能进行划分的,因此各个单元可以位于相同或者不同的物理平台上。并且图12中各个单元的具体执行方式对应于结合具体例子对各个步骤的描述,在此不再赘述。
利用以上描述的实施例的方法和装置,可以管理数据库中的大量数据表之间的共享关系,从而设计或者优化数据表之间的共享方案。
附图中的流程图和框图显示了根据本发明的多个实施例的系统、方法和计算机程序产品的可能实现的体系架构、功能和操作。在这点上,流程图或框图中的每个方框可以代表一个模块、程序段或代码的一部分,所述模块、程序段或代码的一部分包含一个或多个用于实现规定的逻辑功能的可执行指令。也应当注意,在有些作为替换的实现中,方框中所标注的功能也可以以不同于附图中所标注的顺序发生。例如,两个连续的方框实际上可以基本并行地执行,它们有时也可以按相反的顺序执行,这依所涉及的功能而定。也要注意的是,框图和/或流程图中的每个方框、以及框图和/或流程图中的方框的组合,可以用执行规定的功能或操作的专用的基于硬件的系统来实现,或者可以用专用硬件与计算机指令的组合来实现。
以上已经描述了本发明的各实施例,上述说明是示例性的,并非穷尽性的,并且也不限于所披露的各实施例。在不偏离所说明的各实施例的范围和精神的情况下,对于本技术领域的普通技术人员来说许多修改和变更都是显而易见的。本文中所用术语的选择,旨在最好地解释各实施例的原理、实际应用或对市场中的技术的技术改进,或者使本技术领域的其它普通技术人员能理解本文披露的各实施例。
Claims (14)
1.一种管理数据表的共享关系的方法,包括:
根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构;
根据超级表架构中未被任何数据表占据的空穴,评估所述超级表架构的空余存储量;
根据所述超级表架构的空余存储量,确定所述多个数据表的共享关系,所述共享关系指示所述多个数据表是否共享所述超级表架构,所述确定包括:基于所述超级表架构的空余存储量判断与空余存储量有关的预定条件是否得到满足;在上述预定条件得到满足的情况下,确定所述多个数据表共享使用所述超级表架构;在上述预定条件没有得到满足的情况下,拆分上述超级表架构,并用拆分得到的超级表架构替换原超级表架构。
2.根据权利要求1的方法,其中形成包含所述多个数据表的超级表架构包括:
对于所述多个数据表中的某个数据表Ti,在超级表架构中创建代表该数据表Ti的新行;
对于该数据表Ti中的某列Cj,在超级表架构中存在与该列Cj具有兼容的数据类型的已有列且该已有列未被占据的情况下,将该列Cj填充在上述新行中与所述已有列对应的位置;否则,在超级表架构中添加新列,将该列Cj填充到上述新行中与所添加的新列对应的位置。
3.根据权利要求1的方法,其中评估所述超级表架构的空余存储量包括以下之一:确定所述超级表架构中所有空穴所对应的数据表单元的总数目作为该超级表架构的空余存储量;确定所述超级表架构中所有空穴所对应的总数据存储量作为该数据表架构的空余存储量。
4.根据权利要求1的方法,其中所述预定条件包括以下之一:
所述超级表架构的空余存储量小于一预定阈值;
所述超级表架构的空余存储量相对于构成该超级表架构的所述多个数据表的原始存储量的比例小于一预定比例;以及
所述拆分得到的超级表架构的空余存储量之和相对于构成原超级表架构的多个数据表的原始存储量的比例小于一预定比例。
5.根据权利要求1的方法,其中所述拆分超级表架构包括:以消除超级表架构中由连续空穴构成的空穴矩阵的方式拆分超级表架构。
6.根据权利要求1的方法,其中所述拆分超级表架构包括:
以所述超级表架构中的某个特定行作为标准,在超级表架构中挑选出能够被该特定行所覆盖的缩减行;
将超级表架构拆分为由上述特定行及其缩减行构成的超级表架构,和由剩余行构成的超级表架构。
7.根据权利要求1的方法,还包括:响应于创建新数据表的请求,确定用于存储该新数据表的表架构,其包括:
确定所述新数据表的列数n以及各个列的数据类型;
从数据库的已有表架构中获取列数大于或等于上述新数据表的列数n的备选表架构;
从备选表架构中获取这样的兼容表架构,所述兼容表架构所包含的n个列的数据类型分别覆盖所述新数据表的n个列的数据类型;
选择一兼容表架构作为用于存储该新数据表的表架构;
在未能获取所述备选表架构,或者未能获取所述兼容表架构的情况下,针对该新数据表创建新的表架构,用于存储该新数据表。
8.一种管理数据表的共享关系的装置,包括:
形成单元,配置为,根据数据库中多个数据表的各个列的数据类型,形成包含所述多个数据表的超级表架构;
估计单元,配置为根据超级表架构中未被任何数据表占据的空穴,评估所述超级表架构的空余存储量;
确定单元,配置为根据所述超级表架构的空余存储量,确定所述多个数据表的共享关系,所述共享关系指示所述多个数据表是否共享所述超级表架构,
所述确定单元包括:
条件判断模块,配置为基于所述超级表架构的空余存储量判断与空余存储量有关的预定条件是否得到满足;
共享确定模块,配置为在上述预定条件得到满足的情况下,确定所述多个数据表共享使用所述超级表架构;以及
拆分模块,配置为在上述预定条件没有得到满足的情况下,拆分上述超级表架构,并用拆分得到的超级表架构替换原超级表架构。
9.根据权利要求8的装置,其中所述形成单元包括:
行创建模块,配置为,对于所述多个数据表中的某个数据表Ti,在超级表架构中创建代表该数据表Ti的新行;
列填充模块,配置为,对于该数据表Ti中的某列Cj,在超级表架构中存在与该列Cj具有兼容的数据类型的已有列且该已有列未被占据的情况下,将该列Cj填充在上述新行中与所述已有列对应的位置;否则,在超级表架构中添加新列,将该列Cj填充到上述新行中与所添加的新列对应的位置。
10.根据权利要求8的装置,其中所述评估单元配置为执行以下之一:确定所述超级表架构中所有空穴所对应的数据表单元的总数目作为该超级表架构的空余存储量;确定所述超级表架构中所有空穴所对应的总数据存储量作为该数据表架构的空余存储量。
11.根据权利要求8的装置,其中所述预定条件包括以下之一:
所述超级表架构的空余存储量小于一预定阈值;
所述超级表架构的空余存储量相对于构成该超级表架构的所述多个数据表的原始存储量的比例小于一预定比例;以及
所述拆分得到的超级表架构的空余存储量之和相对于构成原超级表架构的多个数据表的原始存储量的比例小于一预定比例。
12.根据权利要求8的装置,其中所述拆分模块配置为:以消除超级表架构中由连续空穴构成的空穴矩阵的方式拆分超级表架构。
13.根据权利要求8的装置,其中所述拆分模块配置为:
以所述超级表架构中的某个特定行作为标准,在超级表架构中挑选出能够被该特定行所覆盖的缩减行;
将超级表架构拆分为由上述特定行及其缩减行构成的超级表架构,和由剩余行构成的超级表架构。
14.根据权利要求8的装置,还包括新数据表处理单元,配置为:响应于创建新数据表的请求,确定用于存储该新数据表的表架构,所述新数据表处理单元包括:
信息确定模块,配置为确定所述新数据表的列数n以及各个列的数据类型;
备选表架构获取模块,配置为从数据库的已有表架构中获取列数大于或等于上述新数据表的列数n的备选表架构;
兼容表架构获取模块,配置为从备选表架构中获取这样的兼容表架构,所述兼容表架构所包含的n个列的数据类型分别覆盖所述新数据表的n个列的数据类型;
选择模块,配置为选择一兼容表架构作为用于存储该新数据表的表架构,以及
创建模块,配置为:在未能获取所述备选表架构,或者未能获取所述兼容表架构的情况下,针对该新数据表创建新的表架构,用于存储该新数据表。
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310379149.0A CN104424245B (zh) | 2013-08-27 | 2013-08-27 | 一种管理数据表的共享关系的方法和装置 |
US14/458,313 US9569470B2 (en) | 2013-08-27 | 2014-08-13 | Managing sharing relationship of tables |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201310379149.0A CN104424245B (zh) | 2013-08-27 | 2013-08-27 | 一种管理数据表的共享关系的方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN104424245A CN104424245A (zh) | 2015-03-18 |
CN104424245B true CN104424245B (zh) | 2017-11-24 |
Family
ID=52584753
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201310379149.0A Expired - Fee Related CN104424245B (zh) | 2013-08-27 | 2013-08-27 | 一种管理数据表的共享关系的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US9569470B2 (zh) |
CN (1) | CN104424245B (zh) |
Families Citing this family (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US12111810B2 (en) | 2022-03-30 | 2024-10-08 | International Business Machines Corporation | Database query management using a new column type |
CN115866062B (zh) * | 2023-02-07 | 2023-06-02 | 长沙市中智信息技术开发有限公司 | 用于多租户架构中大数据实时汇集存储方法及装置 |
Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102457480A (zh) * | 2010-10-22 | 2012-05-16 | 江苏真云计算科技有限公司 | 云计算安全架构 |
Family Cites Families (21)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20040117408A1 (en) * | 2002-12-17 | 2004-06-17 | Capital One Financial Corporation | Systems, methods and articles of manufacture for determining available space in a database |
US7428546B2 (en) * | 2003-08-21 | 2008-09-23 | Microsoft Corporation | Systems and methods for data modeling in an item-based storage platform |
US7779039B2 (en) | 2004-04-02 | 2010-08-17 | Salesforce.Com, Inc. | Custom entities and fields in a multi-tenant database system |
US7529728B2 (en) | 2003-09-23 | 2009-05-05 | Salesforce.Com, Inc. | Query optimization in a multi-tenant database system |
US8122055B2 (en) | 2007-04-26 | 2012-02-21 | Microsoft Corporation | Hosted multi-tenant application with per-tenant unshared private databases |
US7792798B2 (en) * | 2007-08-31 | 2010-09-07 | International Business Machines Corporation | Dynamic data compaction for data redistribution |
US8392382B2 (en) * | 2007-10-19 | 2013-03-05 | Oracle International Corporation | On-line transaction processing (OLTP) compression and re-compression of database data |
US8645423B2 (en) | 2008-05-02 | 2014-02-04 | Oracle International Corporation | Method of partitioning a database |
CN101620609B (zh) | 2008-06-30 | 2012-03-21 | 国际商业机器公司 | 多租户数据存储和访问方法和装置 |
CN101639835A (zh) | 2008-07-30 | 2010-02-03 | 国际商业机器公司 | 多租户场景中应用数据库分区的方法和装置 |
US8037108B1 (en) * | 2009-07-22 | 2011-10-11 | Adobe Systems Incorporated | Conversion of relational databases into triplestores |
US10229157B2 (en) | 2009-10-05 | 2019-03-12 | Salesforce.Com, Inc. | Implementing composite custom indices in a multi-tenant database |
US8386471B2 (en) | 2010-05-27 | 2013-02-26 | Salesforce.Com, Inc. | Optimizing queries in a multi-tenant database system environment |
US8380667B2 (en) | 2010-08-11 | 2013-02-19 | Sap Ag | Selectively upgrading clients in a multi-tenant computing system |
US8380557B2 (en) | 2010-08-27 | 2013-02-19 | Nec Laboratories America, Inc. | Multi-tenant database management for service level agreement (SLA) profit maximization |
CN102737020B (zh) | 2011-03-31 | 2014-08-27 | 国际商业机器公司 | 一种初始化多租户数据库的方法和装置 |
US8914422B2 (en) | 2011-08-19 | 2014-12-16 | Salesforce.Com, Inc. | Methods and systems for designing and building a schema in an on-demand services environment |
CN107451225B (zh) * | 2011-12-23 | 2021-02-05 | 亚马逊科技公司 | 用于半结构化数据的可缩放分析平台 |
US8832159B2 (en) * | 2012-05-22 | 2014-09-09 | Google Inc. | Systems and methods for asynchronous schema changes |
US10268645B2 (en) * | 2013-04-04 | 2019-04-23 | Sap Se | In-database provisioning of data |
US20140325163A1 (en) * | 2013-04-25 | 2014-10-30 | International Business Machines Corporation | Cross-Partition Shared Memory Attach for Data Processing Environment |
-
2013
- 2013-08-27 CN CN201310379149.0A patent/CN104424245B/zh not_active Expired - Fee Related
-
2014
- 2014-08-13 US US14/458,313 patent/US9569470B2/en not_active Expired - Fee Related
Patent Citations (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102457480A (zh) * | 2010-10-22 | 2012-05-16 | 江苏真云计算科技有限公司 | 云计算安全架构 |
Non-Patent Citations (2)
Title |
---|
"SaaS应用交付平台中多租户云数据管理关键技术研究";孔兰菊;《中国博士学位论文全文数据库 信息科技辑》;20111215;第14-16、43-55页 * |
"基于宽表的SaaS多租户数据存储机制研究";陈维良;《基于宽表的SaaS多租户数据存储机制研究》;20120415;第2-26页 * |
Also Published As
Publication number | Publication date |
---|---|
CN104424245A (zh) | 2015-03-18 |
US20150066994A1 (en) | 2015-03-05 |
US9569470B2 (en) | 2017-02-14 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN105354255B (zh) | 数据查询方法和装置 | |
CN102855294B (zh) | 一种智能哈希数据布局方法、集群存储系统及其方法 | |
CN102262626B (zh) | 一种数据库存储数据的方法及装置 | |
CN101405728B (zh) | 具有动态加载能力的关系数据库架构 | |
US20070162506A1 (en) | Method and system for performing a redistribute transparently in a multi-node system | |
US20130019087A1 (en) | System structure management device, system structure management method, and program | |
US9854037B2 (en) | Identifying workload and sizing of buffers for the purpose of volume replication | |
CN103095687A (zh) | 元数据处理方法及装置 | |
US8463840B2 (en) | Method for selecting node in network system and system thereof | |
CN105264488B (zh) | 用于使用数组对来合并有序列表的方法和系统 | |
CN109800336A (zh) | 基于键值对存储系统的表格实现方法、装置、设备和介质 | |
CN105426373A (zh) | 一种数据库同步方法与设备 | |
CN107070645A (zh) | 比较数据表的数据的方法和系统 | |
CN106547870A (zh) | 数据库的分表方法及装置 | |
CN109683828A (zh) | 一种存储系统的落盘方法、系统、装置及可读存储介质 | |
CN109460409A (zh) | 数据访问方法和装置 | |
CN104182295B (zh) | 一种数据备份方法及装置 | |
CN103069396A (zh) | 对象布置设备及其方法,计算机程序 | |
CN104424245B (zh) | 一种管理数据表的共享关系的方法和装置 | |
CN104054076A (zh) | 数据存储方法、数据库存储节点故障处理方法及装置 | |
CN106598548A (zh) | 存储单元读写冲突的解决方法及装置 | |
CN103823641B (zh) | 一种在线扩容的虚拟卷系统及其实现方法 | |
CN107301249A (zh) | 一种文件访问信息记录方法、系统及分布式集群系统 | |
CN104281529B (zh) | 大容量rfid电子标签动态分区方法及电子标签和应用 | |
US7331020B2 (en) | Method of representing a tree database and storage medium for same |
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 | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20171124 |