CN114661721A - 数据库表的处理方法和系统 - Google Patents
数据库表的处理方法和系统 Download PDFInfo
- Publication number
- CN114661721A CN114661721A CN202210314941.7A CN202210314941A CN114661721A CN 114661721 A CN114661721 A CN 114661721A CN 202210314941 A CN202210314941 A CN 202210314941A CN 114661721 A CN114661721 A CN 114661721A
- Authority
- CN
- China
- Prior art keywords
- column
- splitting
- candidate
- split
- database
- 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.)
- Pending
Links
Images
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/22—Indexing; Data structures therefor; Storage structures
- G06F16/2282—Tablespace storage structures; Management thereof
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/23—Updating
-
- 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/242—Query formulation
- G06F16/2433—Query languages
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/245—Query processing
- G06F16/2455—Query execution
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/27—Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
-
- 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/28—Databases characterised by their database models, e.g. relational or object models
- G06F16/284—Relational databases
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Databases & Information Systems (AREA)
- Physics & Mathematics (AREA)
- Data Mining & Analysis (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Computational Linguistics (AREA)
- Software Systems (AREA)
- Computing Systems (AREA)
- Mathematical Physics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请实施例提供了一种数据库表的处理方法和系统,该方法中,通过采集单机数据库的数据库审计日志和统计信息,且根据数据库审计日志得到的表的语句执行信息,存储节点的个数,以及统计信息,获取表的拆分信息,其中可以基于表的语句执行信息,准确得到拆分建议,进而提高表后续的查询效率。另外可以输出表的拆分建议,用户基于该拆分建议可以自行拆分表,以实现单机数据库向分布式数据库的演进,难度低,无技术壁垒。
Description
技术领域
本申请涉及数据库技术领域,尤其涉及一种数据库表的处理方法和系统。
背景技术
关系型数据库,是指采用了关系模型来组织数据的数据库,其以行和列的形式存储数据。关系型数据库中的行和列被称为表。随着关系数据库中表的数据量的增加,单机数据库难以支撑对数据的存储和查询,因此亟需实现单机数据库向分布式数据库的演进。
在单机数据库向分布式数据库演进的过程中,需要将单机数据库中存储的表进行拆分,以存储在分布式数据库中。但对于无数据库专业知识的用户来说,不能合理地甚至无法拆分表。因此,亟需一种引导用户进行数据库表拆分的方法。
发明内容
本申请实施例提供一种数据库表的处理方法和系统,可以获取表的拆分建议,以引导用户进行数据库表拆分。
第一方面,本申请实施例提供一种数据库表的处理方法,包括:采集单机数据库的数据库审计日志和统计信息;接收存储节点的个数,所述存储节点为:分布式数据库中用于存储所述单机数据库中表的存储节点;根据所述数据库审计日志,得到所述表的语句执行信息;根据所述语句执行信息、所述统计信息,以及所述存储节点的个数,获取所述表的拆分信息;根据所述表的拆分信息,输出所述表的拆分建议。
第二方面,本申请实施例提供一种数据库表的处理系统,包括:采集组件,用于采集单机数据库的数据库审计日志和统计信息;收发组件,用于接收存储节点的个数,所述存储节点为:分布式数据库中用于存储所述单机数据库中表的存储节点;处理组件,用于根据所述数据库审计日志,得到所述表的语句执行信息,以及根据所述语句执行信息、所述统计信息,以及所述存储节点的个数,获取所述表的拆分信息;输出组件,根据所述表的拆分信息,输出所述表的拆分建议。
第三方面,本申请实施例提供一种电子设备,该电子设备可以包括:处理器、存储器。存储器用于存储计算机可执行程序代码,程序代码包括指令;当处理器执行指令时,指令使所述电子设备执行如第一方面中的方法。
第四方面,本申请实施例提供一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面中的方法。
第五方面,本申请实施例提供一种计算机可读存储介质,所述计算机可读存储介质中存储有指令,当其在计算机上运行时,使得计算机执行上述第一方面中的方法。
本申请实施例提供一种数据库表的处理方法和系统,通过采集单机数据库的数据库审计日志和统计信息,且根据数据库审计日志得到的表的语句执行信息,存储节点的个数,以及统计信息,获取表的拆分信息,其中可以基于表关联的语句涉及到的列,准确得到拆分建议,进而提高表后续的查询效率。另外可以输出表的拆分建议,用户基于该拆分建议可以自行拆分表,以实现单机数据库向分布式数据库的演进,难度低,无技术壁垒。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为本申请实施例适用的一种场景示意图;
图2为本申请实施例提供的数据库表的处理方法的一种实施例的流程示意图;
图3为本申请实施例提供的数据库表的处理方法的另一种实施例的流程示意图;
图4为本申请实施例提供的拆分表的一种示意图;
图5为本申请实施例提供的数据库表的处理方法的另一种实施例的流程示意图;
图6为本申请实施例提供的数据库表的处理方法的另一种实施例的流程示意图;
图7为本申请实施例提供的数据库表的处理方法的另一种实施例的流程示意图;
图8为本申请实施例提供的数据库表的处理系统的一种结构示意图;
图9为本申请实施例提供的电子设备的一种结构示意图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合本申请具体实施例及相应的附图对本申请技术方案进行清楚、完整地描述。显然,所描述的实施例仅是本申请一部分实施例,而不是全部的实施例。基于本申请中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本申请保护的范围。
本申请实施例中的术语释义:
PolarDB-X数据库:分布式数据库,可以高度兼容MySQL语法体系。
cardinality:基数或统计信息(下述实施例中称为统计信息)。其中,关系型数据库优化器在计算成本的时候,需要从统计信息中取得数据,然后去估计每一步操作所涉及的行数。
sql_text:在数据库审计日志中的语句执行记录(如SQL语句的执行记录)中,语句的模板信息(如SQL模板信息)。应理解,SQL模板信息为未包含有真实数据的SQL语句的格式。
ft_col:表关联的SQL模板信息(SQL语句)涉及到的一列,也可以理解为表的SQL数据筛选、关联条件归一后涉及到的一列。
ft_col_group:表关联的SQL模板信息涉及到的至少一列,该至少一列可以为一列或多列。
avg_exec_time:每个sql_text(如SQL模板信息)的SQL语句的平均执行时间。
DDL:关系型数据库的结构定义语句,执行该语句可以创建数据库的对象,对象如表结构Table,索引index等。
DN:存储节点,提供数据的存储引擎,本申请实施例中用于存储单机数据库中拆分后的表。
Percent:执行次数比例。指的是表中指定ft_col或ft_col_group关联的sql_text执行次数占该表关联的sql_text执行次数的百分比。其中,表关联的sql_text指的是表关联的所有的sql_text。
数据库是按照数据结构来组织、存储和管理数据的仓库,数据库中的数据以表的形式存储。例如,单位常常要把职工的基本情况(如职工号、姓名、简历等)存放在表中,进而单位可以根据需要随时查询某职工的基本情况,也可以查询某个职工号范围内的职工人数等。其中,由关系数据结构组成的数据库被称为关系数据库,关系数据库中对数据的操作几乎全部建立在一个或多个关系表上,通过对这些关系表的分类、合并、连接或选取等运算来实现数据的管理。
随着数据库中表的数据量的增加,单机数据库难以支撑对数据的存储和查询。现有技术中可以采用增加单机数据库中的磁盘的方式,使得单机数据库可以保存更多的数据,但大量的数据仍会造成查询速度慢的问题,因此亟需实现单机数据库向分布式数据库演进。在单机数据库向分布式数据库演进的过程中,需要将单机数据库中存储的表进行拆分,以分布地存储在分布式数据库中。现有技术中可以简单地根据基于表的数据量进行平均拆分,但表中的数据之间有关联,如将表中具有关联的数据拆分在不同的数据库中,也会造成查询时效率低的问题。
而使用数据库的用户(如电商用户、电网用户等),大多不具备数据库专业知识,因此在单机数据库向分布式数据库演进的过程中,不能合理地拆分表甚至无法拆分表。因此,本申请实施例中提供一种数据库表的处理方法,针对单机数据库中的表,为用户生成合理的拆分建议,以便于用户可以根据拆分建议,对表进行有效且合理的拆分,以提高用户体验。
应理解,本申请实施例中,单机数据库包括但不限于为:PostgreSQL数据库等。分布式数据库可以包括但不限于:MySQL数据库。其中,MySQL数据库可以包括但不限于为PolarDB-X架构数据库。
应理解的是,用户不同,单机数据库中表的内容不同,示例性的,如用户为电网用户,则单机数据库中存储的表可以包括:每个省市各季度每个用户的用电量等。如用户为电商用户,则单机数据库中存储的表可以包括:每单交易对应的卖家、买家,以及交易信息等。下述实施例中以用户为电网用户为例介绍本申请实施例中的数据库表的处理方法。本申请实施例对单机数据库中存储的表的内容不作限制。
图1为本申请实施例适用的一种场景示意图。参照图1,该场景中可以包括:单机数据库和数据库表的处理设备。其中,数据库表的处理设备可以采集单机数据库中的信息,以根据单机数据库中的信息,生成表的拆分建议,具体参照下述实施例中的描述。在一种实施例中,数据库表的处理设备可以为服务器、计算机等具有处理能力的电子设备,本申请实施例对数据库表的处理设备的形态不做限制,图1中以数据库表的处理设备为计算机为例进行说明。
下面结合具体的实施例对本申请实施例提供的数据库表的处理方法进行说明。下面这几个实施例可以相互结合,对于相同或相似的概念或过程可能在某些实施例不再赘述。应理解,执行本申请实施例的数据库表的处理方法的执行主体可以为数据库表的处理设备或数据库表的处理设备中的处理器、芯片等,下述以执行主体是数据库表的处理设备为例进行说明。
图2为本申请实施例提供的数据库表的处理方法的一种实施例的流程示意图。参照图2,本申请实施例提供的数据库表的处理方法可以包括:
S201,采集单机数据库的数据库审计日志和统计信息。
在一种实施例中,可以在单机数据库中设置采集组件或脚本,以用于采集单机数据库的数据库审计日志和统计信息,相应的,组件或脚本在采集单机数据库的数据库审计日志和统计信息后,可以发送至数据库表的处理设备,即数据库表的处理设备可以采集单机数据库的数据库审计日志和统计信息。其中,用于采集统计信息的采集组件如agent组件,用于采集数据库审计日志的采集组件如adam组件。在一种实施例中,agent组件和adam组件可以包含于数据库表的处理设备中。
其中,数据库审计日志中记录有表的语句执行记录,如表的SQL语句的记录。示例性的,表的SQL语句的记录可以包括:SQL语句、语句执行时间等信息。SQL语句可以包括但不限于为:选择语句、查找语句、求和语句、平均语句等。应理解,表的SQL语句的记录可以理解为:使用相应的SQL语句操作表的记录,如选择语句指的是在该表中进行查询。
示例性的,选择语句如“Select*from table_A where col_1=’XXX’”,即在表A的第一列选择“xxx”。col_1表征column1。示例性的,如表A为记载省市中各月份各用户(采用电表段表征)的用电量,第一列的字段类型可以为“城市”,“xxx”可以为“a市,如南京市”。各电表段包括处于不同范围的电表编号,如电表段1包括电表编号1-99,电表段2包括电表编号100-199。
其中,统计信息(cardinality)可以包括但不限于:表的行宽、行数、表中各列的区分度等。在一种实施例中,可以将表的行宽、行数称为表的行信息。
在一种实施例中,可以采集单机数据库统计信息,以及预设时长内的单机数据库的数据库审计日志,以减少对数据库审计日志的处理量。相应的,在该实施例中,下述实施例中使用的单机数据库的数据库审计日志为预设时长内的单机数据库的数据库审计日志。示例性的,预设时长如当前时刻之前的某个预设时间段。
S202,接收存储节点的个数,存储节点为:分布式数据库中用于存储单机数据库中表的存储节点。
存储节点用于存储单机数据库中拆分后的表,存储节点包含于分布式数据库中。存储节点的个数可以为用户提供的期望的个数,或者是由工作人员基于数据库的数据量得到的经验值,或者可以为固定值。示例性的,如存储节点的个数为N,N为大于或等于2的整数。
在一种实施例中,存储节点的个数可以为工作人员输入至数据库表的处理设备中的,相应的,数据库表的处理设备可以接收到用户输入的存储节点的个数。
S203,根据数据库审计日志,得到表的语句执行信息。
因为数据库审计日志中记录有表的语句执行记录,因此可以根据数据库审计日志,得到表的语句执行信息。在一种实施例中,表的语句执行信息中可以包括但不限于:表关联的语句(如sql_text)、每个类型的语句的执行次数、每个类型的语句的执行时间,以及每个语句关联的表中的列等。
在一种实施例中,可以从表的语句执行记录中得到表关联的语句,以及语句的类型。如表的语句执行记录中可以包含选择语句和查询语句。另,本申请实施例中可以归并每个类型的语句,进而得到每个类型的语句的执行次数,以及每个类型的语句的执行时间。在一种实施例中,每个类型的语句的执行时间可以为每个类型的语句的执行时间的平均值。
其中,每个语句关联的表中的列可以理解为:每个语句中涉及到的表中的列。示例性的,如语句“Select*from table_A where col_1=’XXX’”,该语句为选择语句,该语句关联的表中的列为column 1(第一列),即该语句涉及到的列为column 1。
在一种实施例中,语句关联的列可以包括至少一列,如语句“Select*from table_A where col_1=’XXX’”关联的列为一列,如语句“Select*from table_A where col_1=’南京市’京市ectcol_2=‘1月’”,该语句表征在table A的第一列选择南京市,以及在tableA的第二列选择1月,即该语句的语义是查询表A中南京市一月份的各用户的用电量。进而,该语句涉及到的列为column 1和column 2(第二列),即语句关联的列为两列。应理解,col_2表征column 2。
在一种实施例中,可以将表关联的语句涉及到的列称为候选列(如候选列包括:“column 1”,以及“column 1和column 2”)。其中,候选列中仅包括一列的可以称为第一候选列,如候选列“column 1”仅包含有一列,则可以将候选列“column 1”称为第一候选列。候选列中包括多列的可以称为组合列,如候选列“column 1和column 2”包含有两列,则可以将候选列“column 1和column 2”称为组合列。
S204,根据语句执行信息、统计信息,以及存储节点的个数,获取表的拆分信息。
目前,表的拆分可以包括垂直拆分和水平拆分。水平拆分是按照不同的维度(如字段,即列)拆分同一个表中的数据,拆分后的表中包含一部分数据,拆分后的表可以保存在分布式数据库的不同的存储节点上,这样在查询时可以并发查询表中的数据,以有效提高查询效率,提高高并发的性能。
本申请实施例中,表的拆分信息可以包括:对单机数据库中的表进行水平拆分的拆分维度。
在一种实施例中,表的拆分信息可以包括至少一个拆分键。拆分键可以理解为表中的列的字段类型。示例性的,如column 1中包含的字段均为城市,则拆分键可以为column1的字段类型“城市”,示例性的,拆分键还可以为月份、电表段等。示例性的,当拆分键为城市时,可以将表A按照不同的城市进行拆分,以拆分成多个表。
表关联的语句中,每个语句涉及表中的列。表中的每个列具有字段类型,如column1的字段类型为“城市”,column 2的字段类型为“月份”。语句关联的同一个列越多,则表明语句执行时涉及到该列的次数越多,则该列的查询、选择等需求较多,若将该列存储在一个表格中,则执行涉及到该列的查询、选择等语句时,花费的时间长,因此,可以将该列的字段类型作为拆分键,对表进行拆分,进而减少查询、选择等执行时间,以提高效率。
另外,列的区分度用于表征列中字段不重复的比例。区分度大,表征该列中具有更多不同的字段,进而能够实现拆分。
基于该思路,在一种实施例中,可以根据表中候选列关联的语句,以及候选列的区分度,确定拆分键。其中,如可以将关联语句数量最多的、且区分度足够大(如区分度大于预设区分度)的候选列的字段类型作为拆分键。示例性的,如在表关联的语句中,涉及到最多的列为column 1,且column 1的区分度足够大,则可以将column 1的字段类型“城市”作为拆分键。拆分键用于引导拆分表,如拆分键为“城市”,即用户可以按照不同的城市对该表A进行拆分,得到多个子表B。
在一种实施例中,表的拆分信息可以包括至少一个拆分键。示例性的,还可以将关联语句数量第二多的(即关联语句数量排序第二的)、且区分度足够大(即区分度大于预设区分度)的候选列的字段类型也作为拆分键。示例性的,如在表关联的语句中,涉及到第二多的列为column 2,则可以将“月份”作为拆分键,即在按照可以按照不同的城市对该表A进行拆分后,还可以按照“月份”将子表B进行拆分。示例性的,还可以在包含有column 1的ft_col_group中,将关联语句数量最多的、且区分度足够大(即区分度大于预设区分度)的候选列的字段类型也作为拆分键。
在如上示例中,讲述了如何得到拆分键的方式,在一种实施例中,按照拆分键可以将表进行拆分,但是将表拆分成几个子表,则需要基于存储节点的个数获取。示例性的,如一个存储节点默认包括8个物理分库,如存储节点的个数为4,则分布式数据库总共包含有32个分库,每个分库中可以存储子表。在一种实施例中,可以按照在每个分库中平均存储子表的方式,确定表拆分后的数量,如按照拆分键将表拆分成32个子表,进而在每个存储节点的每个分库中存储一个子表,这样可以平衡每个存储节点的负载均衡。在该实施例中,拆分信息中还可以包括拆分后的表的数量。
S205,根据表的拆分信息,输出表的拆分建议。
拆分建议用于引导拆分单机数据库中的表,示例性的,如用户可以根据表的拆分建议,自行实现表的拆分。
在一种实施例中,表的拆分建议可以为建表数据定义语言(data definitionlanguages,DDL)(语句),执行建表DDL可以实现表的拆分。其中,建表DDL中可以包括拆分函数和拆分字段。在一种实施例中,拆分字段可以为拆分键所属列中不同的字段。示例性的,拆分键为城市,则拆分字段可以为城市所属列“column 1”中的不同的字段,如a城市、b城市、c城市等。
在一种实施例中,拆分键和拆分函数具有映射关系,该映射关系可以预先存储在数据库表的处理设备中。因此在数据库表的处理设备获取表的拆分键后,可以根据该映射关系,得到表的拆分键对应的拆分函数,进而数据库表的处理设备可以输出拆分函数、拆分字段,以及表拆分后的数量,以便于用户可以根据该拆分函数,实现表的拆分。
在一种实施例中,数据库表的处理设备输出拆分函数的方式可以为:数据库表的处理设备在界面上显示拆分函数,或者数据库表的处理设备将拆分函数发送至用户的终端,以便用户可以及时获取拆分建议。
示例性的,如图1所示,数据库表的处理设备可以在界面上显示如下所示的拆分建议,应理解,图1中以“dbpartition by hash(userId)tbpartition by DD(actionDate)tbpartitions 31”表征拆分建议:
CREATE TABLE user_log3(
userId int,
name varchar(30),
operation varchar(30),
actionDate DATE
)dbpartition by hash(userId)tbpartition by DD(actionDate)tbpartitions31;
其中,哈希hash、日期DD为拆分函数,hash对应的拆分字段为userId(用户标识),DD对应的拆分字段为actionDate(日期)。应理解,哈希hash、DD拆分函数为预设的拆分函数。本申请实施例中并不限制拆分函数的类型。31表征表拆分后的数量。其中,用户可以在单机数据库上,或者在预先部署好的分布式数据库上,或者单机数据库和分布式数据库的中间设备上运行“拆分建议”,可以实现表的拆分。
本申请实施例中,一方面可以输出表的拆分建议,用户基于该拆分建议可以自行拆分表,以实现单机数据库向分布式数据库的演进,难度低,无技术壁垒。另一方面,通过采集单机数据库的数据库审计日志和统计信息,且根据数据库审计日志得到的表的语句执行信息,存储节点的个数,以及统计信息,获取表的拆分信息,其中可以基于表关联的语句涉及到的列,准确得到拆分信息,进而提高表后续的查询效率。
在一种实施例中,用户需求从单机数据库演进至分布式数据库,进而数据库表的处理设备在采集单机数据库的数据库审计日志和统计信息后,可以执行如上图2中的步骤,以输出表的拆分建议。在一种实施例中,数据库表的处理设备还可以提供检测单机数据库是否需要拆分表,进而在需要拆分表时,执行上述图2中的步骤。
在该实施例中,参照图3,本申请实施例提供的数据库表的处理方法可以包括:
S301,采集单机数据库的数据库审计日志、统计信息、表结构,以及表的信息。
在一种实施例中,数据库表的处理设备响应于启动指令,可以采集单机数据库的数据库审计日志、统计信息、表结构,以及表的信息。示例性的,工作人员(或用户)可以在数据库表的处理设备的界面上点击“开始生成拆分建议”的按钮或控件,以触发数据库表的处理设备接收到启动指令,本申请实施例对用户如何触发数据库表的处理设备开始执行S301的方式不做限制。在一种实施例中,统计信息、表结构,以及表的信息可以称为结构信息。
单机数据库的数据库审计日志、统计信息可以参照S201中的相关描述。
在一种实施例中,表的信息中可以包括:表占用的磁盘空间大小、索引index等。本申请实施例中提到的表的信息中包含的内容为本申请实施例中能够使用到的信息,在其他一些实施例中,表的信息还可以包括其他内容。
在一种实施例中,行信息也可以间接表征表占用的磁盘空间大小,其中,固定行宽下,行数越大,则表占用的磁盘空间越大。因此,在该实施例中,“行宽和行数”,与表占用的磁盘空间大小具有映射关系,二者可以相互转换。下述实施例中以表占用的磁盘空间大小为例进行说明。
数据库中的数据的存储是有一定的规则的,否则查询的效率会很低。表结构就是定义一个表的字段、字段类型(为了与表中列的字段类型进行区分,下述将表结构中的字段类型称为预设字段类型)、主键、外键等。
在一种实施例中,若单机数据库与分布式数据库的类型(如数据库使用的语法)不同,则在采集单机数据库的数据库审计日志、统计信息、表结构,以及表的信息之后,可以将采集到的单机数据库的数据库审计日志、统计信息、表结构,以及表的信息进行语法转关,转换成分布式数据库识别(支持)的语法。在一种实施例中,数据库表的处理设备中可以包含有转换模块,该转换模块用于将采集到的单机数据库的数据库审计日志、统计信息、表结构,以及表的信息进行语法转换。
示例性的,如分布式数据库为MySQL数据库,且单机数据库为非MySQL数据库时,数据库表的处理设备可以将单机数据库的数据库审计日志、统计信息、表结构,以及表的信息,转换成MySQL语法的信息。
可以理解的是,当单机数据库与分布式数据库的类型相同时,则无需对采集到的单机数据库的数据库审计日志、统计信息、表结构,以及表的信息进行语法转换。
S302,接收存储节点的个数。
S303,根据表的行信息和/或表的数据量,检测表是否需要一级拆分。若是,执行S304,若否,执行S313。
以表占用的磁盘空间大小为例,本申请实施例中预先设置拆分后的表可容忍的预设磁盘空间,若表占用的磁盘空间大于该预设磁盘空间,则确定表需要一级拆分,即第一次拆分。若表占用的磁盘空间小于该预设磁盘空间,则确定表不需要一级拆分。示例性的,预设磁盘空间为50G,表占用的磁盘空间为1T,则可以确定表需要一级拆分。
表的行信息包括行宽和行数,因为“行宽和行数”与表占用的磁盘空间具有映射关系,因此可以将表行宽和行数转换成表占用的磁盘空间,进而基于表占用的磁盘空间,检测表是否需要一级拆分。在一种实施例中,也可以预先设置预设行宽、预设行数,在表的行数大于预设行数,以及表的行宽大于预设行宽时,可以确定表需要一级拆分。
在一种实施例中,在根据表的行信息和/或表的数据量,检测表是否需要一级拆分的情况下,还可以在表占用的磁盘空间大于该预设磁盘空间、表的行数大于预设行数,以及表的行宽大于预设行宽时,确定表需要一级拆分。
S304,根据数据库审计日志,得到表的语句执行信息。
在一种实施例中,语句执行信息包括:表中每个候选列关联的语句的执行次数比例。
基于S202中的描述,语句执行记录可以包括:在sql_text上填充具体参数值的语句,因此可以先将数据库审计日志进行脱敏处理,得到表关联的所有语句(模板)sql_text,语句模板sql_text中未包含具体参数值。在脱敏处理过程中,也可以得到每个语句使用的数据筛选条件(如sql_text中填充的字段,字段可以关联表中的列,即候选列),因此可以得到每个语句关联(涉及到)的候选列。
对于每个候选列来说,可以归并得到每个候选列关联的语句的执行次数,进而根据每个候选列关联的语句的执行次数,以及表关联的所有语句的执行次数,得到每个候选列关联的语句的执行次数比例。其中,将候选列关联的语句的执行次数称为第二执行次数,将表关联的所有语句的执行次数称为第一执行次数,则候选列关联的语句的执行次数比例表征:第二执行次数在第一执行次数中的占比。
示例性的,如候选列为column 1,候选列关联的语句的第二执行次数为60次,表关联的所有语句的第一执行次数为100次,则column 1关联的语句的执行次数比例为60%。如候选列为“column 1+column 2”,候选列关联的语句的第二执行次数为30次,则“column 1+column 2”关联的语句的执行次数比例为30%。
其中,候选列中包括第一候选列,第一候选列仅包括表中的一列。示例性的,第一候选列如column 1。根据如上描述,可以获取候选列中每个第一候选列关联的语句的执行次数比例,如column 1关联的语句的执行次数比例为60%、column 2关联的语句的执行次数比例等。
S305,根据每个第一候选列关联的语句的执行次数比例,以及每个第一候选列的区分度,在至少一个第一候选列中确定第一目标列。
候选列中包括至少一个(或多个)第一候选列。示例性的,至少一个第一候选列包括column 1“城市”、column 2“月份”等。如上S304中可以获取每个候选列的执行次数比例,因此也可以获取每个第一候选列关联的语句的执行次数比例。
在一种实施例中,可以根据每个第一候选列关联的语句的执行次数比例,以及每个第一候选列的区分度,在至少一个第一候选列中确定第一目标列,进而基于第一目标列,得到第一拆分键。示例性的,可以将大于预设比例,且大于预设区分度的第一候选列作为第一目标列。其中,若大于预设比例且大于预设区分度的第一候选列有多个,可以将最大执行次数比例对应的第一候选列作为第一目标列。
示例性的,在column 1和column 2的区分度均大于预设区分度的情况下,若column 1关联的语句的执行次数比例为60%,column 2关联的语句的执行次数比例为10%,则可以将column 1作为第一目标列。
在一种实施例中,本申请实施例中的“大于预设比例”可以替换为“大于或等于预设比例”,以及“大于预设区分度”可以替换为“大于或等于预设区分度”。
S306,将第一目标列的字段类型作为第一拆分键。
因为第一目标列关联的语句的执行次数比例最多,即在数据库审计日志中的语句执行记录中,记录的对该目标列查询、选择等操作的次数多,且第一目标列的区分度足够大适用于拆分,因此可以将第一目标列的字段类型作为第一拆分键。示例性的,如可以将第一目标列column 1的字段类型“城市”作为第一拆分键。
在一种实施例中,表结构信息中包括预设字段类型,在确定第一拆分键后,若第一拆分键包含于预设字段类型中,则可以确定该第一拆分键有效(可用)。若第一拆分键未包含于字段类型中,则可以确定该拆分键不可用,需要重新确定第一拆分键。示例性的,可以将大于预设区分度,且大于预设比例中排序第二的执行次数比例的第一候选列作为新的第一目标列,进而将该新的第一候选列的字段类型作为第一拆分键。因为一些列的字段类型不适用于拆分表,因此“根据预设字段类型(表结构中的字段类型),检测第一拆分键是否可用”的目的在于:保证拆分键可用,以实现表的拆分。
示例性的,表A中包含有a城市、b城市,以及c城市在各月份各电表段的用电量数据,第一拆分键为“城市”,则可以按照“城市”对表进行第一次拆分,进而可以得到多个子表B,每个子表B中包含一个城市在各月份各电表段的用电量数据。
在一种实施例中,还可以根据表的行信息和/或数据量,以及存储节点的个数,确定第一次拆分后的表的数量。在一种实施例中,第一次拆分后的表的数量可以与存储节点的个数相同,如以表A的数据量以表占用的磁盘空间为例,可以按照城市对表A进行拆分,且每个存储节点中存储的拆分后的表A的数据量可以相同。
S307,根据第一次拆分后表的行信息和/或数据量,检测第一次拆分后的表是否需要二级拆分。若是,执行S308,若否,执行S314。
应理解,本申请实施例提供的方法中,不对表进行拆分,而是计算(或预测)基于第一拆分键拆分后的每个子表的行信息和/或表的数据量。
假设在基于第一拆分键对表进行拆分后,得到多个子表(即第一次拆分后的表),则可以根据子表的行信息和/或表的数据量,检测第一次拆分后的表是否需要二级拆分(即第二次拆分),即子表是否需要继续拆分。其中,检测第一次拆分后的表(子表)是否需要二级拆分可以参照S303中检测表是否需要一级拆分的相关描述。应理解,每个子表的处理方式相同,本申请实施例中以子表为例进行说明。
示例性的,以磁盘空间大小为例,若子表占用的磁盘空间仍大于预设磁盘空间,则确定第一次拆分后的表需要二级拆分,若子表占用的磁盘空间小于预设磁盘空间,则确定第一次拆分后的表不需要二级拆分。或者,以行宽和行数为例,若子表的行数仍大于预设行数,且子表的行宽仍大于预设行宽时,可以确定子表需要二级拆分。
S308,根据每个第二候选例关联的语句的执行次数比例,以及每个第二候选例的区分度,在第二候选列中确定第二目标列。
第二候选例为候选列中包含有第一目标列的候选列,第二候选列中包含有表中的至少一列。其中,第二候选列具备两个特征,一是包含表中至少一列,而是至少一列中包含有第一目标列。示例性的,第一目标列为column 1,则第二候选列可以为column 1,以及包含有column 1的候选列“column 1和column 2”、“column 1和column 3”等。
因为第二候选列包含于候选列中,因此在S304中获取每个候选列关联的语句的执行次数后,可以获取每个第二候选列关联的语句的第三执行次数,进而将每个第二候选列关联的语句的第三执行次数在第一执行次数中的占比,作为每个第二候选列关联的语句的执行次数比例。示例性的,如可以分别计算得到column 1、“column 1和column 2”、“column1和column 3”关联的语句的执行次数比例。
在一种实施例中,可以根据每个第二候选列关联的语句的执行次数比例,以及每个第二候选列的区分度,在第二候选列中确定第二目标列,进而基于第二目标列,得到第二拆分键。其中,本申请实施例中之所以要基于第二候选列得到第二拆分键,目的在于:第一目标列的“查询、选择”等操作执行语句次数较多,而基于第一拆分键将表拆分后,而包含有第一目标列的第二候选列中,若存在“查询、选择”等操作执行语句次数仍较多的候选列,则可以继续基于该候选列字段类型对第一次拆分后的表进行继续拆分,以提高在将拆分后的表存储在分布式数据库后,并行查询的效率(因为若将该候选列存储在一个表中,则查询的树高太高,查询时间长,效率低)。
示例性的,在一种实施例中,可以将大于预设比例,且大于预设区分度的第二候选列作为第二目标列。其中,若大于预设比例且大于预设区分度的第二候选列有多个,可以将最大执行次数比例对应的第二候选列作为第二目标列。示例性的,在“column 1和column2”、“column 1和column 3”的区分度均大于预设区分度的情况下,若“column 1和column2”关联的语句的执行次数比例为60%,“column 1和column 3”关联的语句的执行次数比例为30%,则可以将“column 1和column 2”作为第二目标列,如将“城市和月份”作为第二目标列。
在一种实施例中,用于确定第二目标列的预设比例、预设区分度,可以与用于确定第一目标列的预设比例、预设区分度不同。即S308中“大于预设比例,且大于预设区分度的第二候选列作为第二目标列”中的预设比例、预设区分度,可以与S304中“大于预设比例,且大于预设区分度的第一候选列作为第一目标列”中的预设比例、预设区分度分别不同。
S309,在第二目标列的字段类型中,将除了第一拆分键的剩余字段类型作为第二拆分键。
第二拆分键用于对第一次拆分后的表进行第二次拆分。
因为第二目标列包含有第一目标列,还可以包括表中的其他列,因此第二目标列对应字段类型中包含有第一拆分键,还可以包括其他列字段类型。在第一次拆分表时是基于第一拆分键进行拆分的,因此本申请实施例中可以在第二目标列对应字段类型中,将除了第一拆分键的剩余字段类型作为第二拆分键。示例性的,如第二目标列为“column 1和column 2”,第二目标列字段类型为“城市和月份”,则可以将除了第一拆分键“城市”之外的字段类型“月份”作为第二拆分键,即第二拆分键为“月份”。
在一种实施例中,在确定第二拆分键后,若第二拆分键包含于预设字段类型中,则可以确定该第二拆分键有效(可用)。若第二拆分键未包含于预设字段类型中,则可以确定该拆分键不可用,需要重新确定第二拆分键。示例性的,可以将大于预设区分度,且大于预设比例中排序第二的执行次数比例的第二候选列作为新的第二目标列,进而将该新的第二候选列字段类型中除了第一拆分键的剩余字段类型作为第二拆分键。
在一种实施例中,第一拆分键和第二拆分键可以相同或不同。
S310,根据第一次拆分后的表的行信息和/或表的数据量,以及存储节点的个数,确定每个第一次拆分后的表进行第二次拆分后的表的数量。
应理解,S310和“S308-S309”没有先后顺序的区分,二者可以同时执行。
其中,在确定第一次拆分后的表需要二级拆分时,可以第一次拆分后的表的行信息和/或表的数据量,以及存储节点的个数,确定每个第一次拆分后的表进行第二次拆分后的表的数量M。
以子表占用的磁盘空间为例,当子表占用的磁盘空间仍大于预设磁盘空间,则确定第一次拆分后的表需要二级拆分,此时根据子表占用的磁盘空间,以及存储节点的个数,确定第二次拆分后的表的数量M。其中,若子表占用的磁盘空间为128G,预设磁盘空间为50G,子表的数据量仍很大,则可以确定每个子表拆分后的数量为(128G/50G)=2.56,即需要将每个子表拆分成3个表,即M为3,才能保证第二次拆分后的表占用的磁盘空间满足预设条件(即小于预设磁盘空间)。
示例性的,对于需要进行第二次拆分的子表B(图4中以表A第一次按照城市拆分成2个子表B,且每个子表B均需第二次拆分为例),第二拆分键为“月份”,且每个子表B拆分的数量M为3,则可以按照月份将每个子表B拆分成3个子表C。应理解,图4中以子表C分别对应城市在包含1-4月、5-8月,以及9-12月各电表段的用电量数据为例进行说明。
在一种实施例中,应理解的是,若第二次拆分后的表占用的磁盘空间仍大于预设磁盘空间,则可以按照如上S308-S310中的拆分方式,继续对表进行拆分,直至拆分后的表占用的磁盘空间满足预设条件。其中,第三次拆分的拆分键可以为:区分度大于预设区分度,且大于预设比例中排序第二的执行次数比例的第二候选列字段类型中,除了第一拆分键的剩余字段类型。
也就是说,如上实施例中以将表进行两次拆分为例,在一种实施例中,表可以实现多次(大于2次)的拆分,在该实施例中,可以执行如下步骤A-C:
A,在第i次循环中,根据第i-1次拆分后的表的行信息和/或第i-1次拆分后的表的数据量,检测是否对第i-1次拆分后的表进行第i次拆分,若是,执行步骤B、步骤C。其中,i为大于或等于1的整数,当i为1时,第i-1(0)次拆分后的表为:未经拆分的表,即单机数据库中的表。其中,第i次循环,可以理解为第i次检测是否对表或拆分后的表进行继续拆分。
B,根据多个候选列中的部分候选列的执行次数比例,以及部分候选列的区分度,确定第i次拆分的拆分键。其中,当i为1时,部分候选列为候选列中的第一候选列,当i为2时,部分候选列为候选列中的第二候选列。步骤B可以参照S305-S309中的相关描述。
C,根据第i-1次拆分后的表的行信息和/或第i-1次拆分后的表的数据量,以及存储节点的个数,确定每个i-1次拆分后的表经第i次拆分后的数量。步骤C可以参照S306、S310中的相关描述。
S311,根据拆分键和拆分函数的映射关系,获取第一拆分键对应的第一拆分函数,以及第二拆分函数对应的第二拆分函数。
在一种实施例中,在获取第一拆分键、第二拆分键后,可以对第一拆分键、第二拆分键、数量M等进行数模转换处理,以得到建表DDL。其中,拆分键和拆分函数具有映射关系,因此基于该映射关系,可以确定第一拆分键对应的第一拆分函数,以及第二拆分函数对应的第二拆分函数。
S312,输出第一拆分函数、第二拆分函数,以及数量。
在一种实施例中,数据库表的处理设备可以输出第一拆分函数、第一拆分字段、第二拆分函数,第二拆分字段,以及数量M。其中,输出第一拆分函数、第一拆分字段、第二拆分函数,第一拆分字段的目的在于:采用对应的拆分字段(如第一拆分字段、第一拆分字段)执行对应的拆分函数(第一拆分函数、第二拆分函数)实现对表的拆分。其中,输出数量M的目的在于:防止过度对表进行拆分,消耗资源,且M能够满足用户需求的查询效率,即便于对表进行合理拆分。
示例性的,在如下拆分建议中,哈希hash为第一拆分函数、userId为第一拆分字段、DD为第二拆分函数,actionDate为第二拆分字段,M为31。
CREATE TABLE user_log3(
userId int,
name varchar(30),
operation varchar(30),
actionDate DATE
)dbpartition by hash(userId)tbpartition by DD(actionDate)tbpartitions31;
S313,输出表的建表DDL。
其中表的建表DDL为数据库表原本的建表DDL,即复用数据库表的建表DDL。
在一种实施例中,目前表可以分为广播表,普通表(单表),以及拆分表。当表不需要拆分时,可以基于表关联的SQL语句,基于对表的插入、删除和更新等操作的频率,选择表为广播表(低频)或普通表(高频)。示例性的,如对表的插入、删除和更新等操作的频率小于预设频率,则可以将表作为广播表,如对表的插入、删除和更新等操作的频率大于或等于预设频率,则可以将表作为普通表。应理解,未进行拆分的表可以存储至分布式数据库中的0号存储节点中。
S314,根据第一拆分键得到第一拆分函数,且输出第一拆分函数。
第一拆分函数的获取方式可以参照S311中的相关描述。
示例性的,如数据库表的处理设备输出的为:
CREATE TABLE user_log3(
userId int,
name varchar(30),
operation varchar(30),
actionDate DATE
)dbpartition by hash(userId);
其中,hash为第一拆分函数,userId为第一拆分字段。
在一种实施例中,图3所示的步骤可以简化为图5所示,本申请实施例对图5不做赘述,可以参照图3中的相关描述。应理解,图5中以“非MySQL(体系)的单机数据库向MySQL(体系)数据库演进”为例进行说明。
本申请实施例中,可以根据表的行信息和/或数据量,检测表是否需要拆分,进而在表需要拆分时,基于第一候选列的关联的语句的执行次数比例,以及每个第一候选列的区分度,获取表的拆分键,以用于对表的拆分。在得到表的拆分键后,可以进行数模转换,得到拆分函数,以便于用户基于该拆分函数和拆分键实现对表的拆分。其中,拆分键为关联的语句的执行次数比例最大,且区分度足够大的列字段类型,因此基于该拆分键拆分表可以有效提高查询效率。另外,本申请实施例中还可以实现对表的多次拆分,在拆分过程中,还可以基于用户期望的存储节点的个数,确定拆分后的表的数量M,即可以防止过度对表进行拆分,消耗资源,且M能够满足用户需求的查询效率,即实现对表进行合理拆分。
如上对表进行一级拆分、二级拆分等后,若查询的维度与表的拆分维度不同,会产生跨分片查询。跨分片查询的增加也会导致查询卡慢、连接池耗尽等性能问题。而全局二级索引(global secondary index,GSI)能够通过增加拆分维度来减少跨分片查询,提高查询效率。因此本申请实施例在对表进行拆分的过程中,可以创建全局二级索引,以进一步提高拆分后的表的查询效率。
参照图6,在S306之后可以执行S305A、S3061A-S3069A,以及S307A:
S305A,根据第三候选列关联的语句的执行次数比例,以及第三候选列的区分度,检测是否创建全局二级索引。若是,执行S3061A-S3069A,若否,执行S307A。
其中,第三候选列为候选例中未包含第二目标列和第一目标列之外的候选列,如第一目标列为column 1,第二目标列为column 2,则第三候选列可以为column 3,且包含有column3的多列,以及column 4,且包含有column 4的多列等。示例性的,column 3的字段类型可以为用户操作,column 4的字段类型为小区的位置。
在一种实施例中,可以根据第三候选列关联的语句的执行次数比例,以及第三候选列的区分度,检测是否创建全局二级索引。其中,若在第三候选列中,存在执行次数比例大于预设比例且区分度大于预设区分度的候选列,则确定创建全局二级索引。若在第三候选列中,不存在执行次数比例大于预设比例且区分度大于预设区分度的候选列,则确定不创建全局二级索引。
示例性的,若包含有column 3的候选列关联的语句的执行次数比例大于预设比例,以及包含有column 3的候选列的区分度大于预设区分度,则可以确定也有一定量的查询、选择等操作是基于col_3维度展开,此时应选择col_3作为GSI的一级拆分键,即第三拆分键。
在一种实施例中,同时由于GSI可以创建多个,可能另外包含有column 4的候选列关联的语句的执行次数比例大于预设比例,以及包含有column 4的候选列的区分度大于预设区分度,则可以确定也有一定量的查询、选择等操作是基于col_4维度展开,则也应当以col_4作为一级拆分键创建一个独立的GSI,下述以GSI为一个为例进行示例说明,多个GSI的创建过程可以参照下述实施例中的描述。
S3061A,根据每个第三候选列关联的语句的执行次数比例,以及每个第三候选列的区分度,在至少一个第三候选列中确定第三目标列,第三目标列的区分度大于预设区分度,执行次数比例大于预设比例。
应理解,第三目标列包含表中的一列。第三目标列与第一目标列类似,可以参照第一目标列的相关描述。
其中,每个第三候选列关联的语句的执行次数比例,以及每个第三候选列的区分度可以参照上述实施例中候选列的相关描述。本申请实施例中,可以将区分度大于预设区分度,且执行次数比例大于预设比例的第三候选列(包含表中的一列),作为第三目标列。示例性的,表A的第一目标列为城市,但基于数据库审计日志中的语句执行记录,发现“用户操作”的关联的语句执行次数也很多,则可以将用户操作作为全局二级索引的一级拆分键,即第三拆分键。
S3062A,将第三目标列的类型作为第三拆分键。
本申请实施例中,可以将第三目标列的类型(字段类型)作为第三拆分键。示例性的,第三拆分键为第三目标列为column 3的字段类型“用户操作”。
S3063A,检测全局二级索引是否需要二级拆分。若是,执行S3064A,若否,执行S3064B。
全局二级索引是否需要二级拆分依赖于第一次拆分后的表是否需要二级拆分,示例性的,如第一次拆分后的表需要二级拆分,则全局二级索引需要二级拆分,若第一次拆分后的表不需要二级拆分,则全局二级索引不需要二级拆分,具体可以参照S306中的相关描述。
S3064A,根据每个第四候选例的关联的语句的执行次数比例,以及每个第四候选例的区分度,确定第四拆分键。
其中,第四候选列中包括表中的至少一列,且每个第四候选列中包括的至少一列中包含有第三目标列,且未包含第一目标列和第二目标列。示例性的,如第三目标列为column 3,则第四候选列为包含有column 3的候选列,如column 3、“column 3和column4”、“column 3和column 5”等,进而可以在column 3、“column 3和column 4”、“column 3和column 5”中确定第四目标列。
示例性的,在一种实施例中,可以将大于预设比例,且大于预设区分度的第四候选列作为第四目标列。其中,若大于预设比例且大于预设区分度的第四候选列有多个,可以将最大执行次数比例对应的第四候选列作为第四目标列。示例性的,在“column 3和column4”、“column 3和column 5”的区分度均大于预设区分度的情况下,若“column 3和column4”关联的语句的执行次数比例,大于“column 3和column 5”关联的语句的执行次数比例,则可以将“column 3和column 4”作为第四目标列。
在一种实施例中,可以在第四目标列的字段类型中,将除了第三拆分键的剩余字段类型作为第四拆分键。如,第四目标列“column 3和column 4”的字段类型为“用户操作”和“小区的位置”,则可以将除了第三拆分键“用户操作”剩余的字段类型“小区的位置”作为第四拆分键。
S3065A,复用数量M。
S3066A,确定预设覆盖列的类型。
在一种实施例中,覆盖列为预设的,因此称为预设覆盖列。预设覆盖列可以为工作人员在输入存储节点的个数时一起输入的,在一种实施例中,工作人员在输入存储节点的个数时,可以输入预设覆盖列对应的字段类型,以表征预设覆盖列。预设覆盖列的类型可以理解为:预设覆盖列的字段类型。
S3067A,在预设覆盖列的类型、第三拆分键,以及第四拆分键中,删除与索引重复的类型。
本申请实施例中,创建全局二级索引,为了更快进行查询,因此可以在预设覆盖列的类型、第三拆分键,以及第四拆分键中,删除与索引重复的类型,以避免索引重叠。示例性的,第三拆分键为用户操作,索引中也包括用户操作,因为全局二级索引可以基于用户操作进行拆分创建,因此可以删除索引中的“用户操作”。
S3068A,根据删除后的索引、预设覆盖列的类型、第三拆分键,以及第四拆分键,得到全局二级索引的拆分函数。
在一种实施例中,拆分键与拆分函数具有映射关系,因为拆分键即为字段类型,与索引、预设覆盖列的类型属于同一种信息,因此可以根据删除后的索引、预设覆盖列的类型、第三拆分键,以及第四拆分键,分别得到“删除后的索引、预设覆盖列的类型、第三拆分键,以及第四拆分键”对应的拆分函数,即为全局二级索引的拆分函数。
相应的,上述实施例中的S312可以替换为S3069A:
S3069A,输出第一拆分函数、第二拆分函数、数量,以及全局二级索引的拆分函数。
在如上图3所示的实施例中,因为未创建全局二级索引,因此输出的为第一拆分函数、第二拆分函数,以及数量M。而在本申请实施例中,因为需要创建全局二级索引,因此,可以在输出第一拆分函数、第二拆分函数,以及数量M时,也输出全局二级索引的拆分函数,以便于用户基于该全局二级索引的拆分函数,创建全局二级索引。
示例性的,数据库表的处理设备输出的拆分建议如下所示:
CREATE TABLE user_log3(
userId int,
name varchar(30),
operation varchar(30),
actionDate DATE
)dbpartition by hash(userId)tbpartition by DD(actionDate)tbpartitions31;
ALTER TABLE t_order ADD UNIQUE GLOBAL INDEX“op_n_act_date”(operation)COVERING(actionDate)dbpartition by hash(operation);
其中,hash可以看做全局二级索引的拆分函数,该拆分建议以全局二级索引的一级拆分键为例进行说明,第三拆分键可以为用户操作。
S3064B,在预设覆盖列的类型、第三拆分键中,删除与索引重复的类型,且根据删除后的索引、预设覆盖列的类型,以及第三拆分键,得到全局二级索引的拆分函数,且返回执行S3069A。
应理解,在全局二级索引对应一个拆分键(第三拆分键)的情况下,可以在预设覆盖列的类型、第三拆分键中,删除与索引重复的类型,且根据删除后的索引、预设覆盖列的类型,以及第三拆分键,得到全局二级索引的拆分函数,该过程可以参照S3067A-S3068A中的描述。
S307A,输出单机数据库的索引。
其中,可以在输出第一拆分函数、第二拆分函数、数量时,同步输出单机数据库的索引。单机数据库的索引可以称为普通索引(或全局索引),在一种实施例中,单机数据库的索引可以以索引DDL的形式输出。
在一种实施例中,图6所示的步骤可以简化为图7所示,本申请实施例对图7不做赘述,可以参照图6中的相关描述。
本申请实施例中,还可以基于第三候选列的关联的语句的执行次数比例,以及每个第三候选列的区分度,检测是否需要创建全局二级索引,进而在需要创建全局二级索引的情况下,基于候选列的关联的语句的执行次数比例,以及候选列的区分度获取拆分键,以保证准确创建全局二级索引。此外,创建全局二级索引可以使得查询维度和表的拆分维度相同,进而可以进一步提高拆分后的表的查询效率。
在一种实施例中,还可以提供一种数据库表的处理系统,参照图8,该数据库表的处理系统800可以包括:采集组件801、收发组件802、处理组件803、输出组件804,以及转换组件805。
采集组件801,用于采集单机数据库的数据库审计日志和统计信息。
收发组件802,用于接收存储节点的个数,存储节点为:分布式数据库中用于存储单机数据库中表的存储节点。
处理组件803,用于根据数据库审计日志,得到表的语句执行信息,以及根据语句执行信息、统计信息,以及存储节点的个数,获取表的拆分信息;
输出组件,根据表的拆分信息,输出表的拆分建议。
在一可选实施例中,语句执行信息包括:每个候选列关联的语句的执行次数比例,候选列为:表关联的语句涉及到的列。
处理组件803,具体用于将数据库审计日志进行脱敏处理,得到表关联的语句的第一执行次数,以及表关联的每个语句涉及到的列,以得到候选列;根据每个候选列关联的语句的第二执行次数,以及第一执行次数,获取每个候选列关联的语句的执行次数比例。
在一可选实施例中,拆分信息包括:拆分键,拆分键用于对表进行拆分,统计信息包括:表中每个列的区分度。
处理组件803,具体用于:
A,在第i次循环中,根据第i-1次拆分后的表的行信息和/或第i-1次拆分后的表的数据量,检测是否对第i-1次拆分后的表进行第i次拆分,若是,执行步骤B、步骤C,i为大于或等于1的整数,当i为1时,第i-1次拆分后的表为:未经拆分的表。
B,根据多个候选列中的部分候选列的执行次数比例,以及部分候选列的区分度,确定第i次拆分的拆分键。
C,根据第i-1次拆分后的表的行信息和/或第i-1次拆分后的表的数据量,以及存储节点的个数,确定每个i-1次拆分后的表经第i次拆分后的数量。
在一可选实施例中,当i为1时,部分候选列为多个候选列中的至少一个第一候选列,每个第一候选列中包括表中的一列。
处理组件803,具体用于根据每个第一候选列关联的语句的执行次数比例,以及每个第一候选列的区分度,在至少一个第一候选列中确定第一目标列;将第一目标列的类型作为第一拆分键。
在一可选实施例中,处理组件803,具体用于将区分度大于预设区分度,且大于预设比例中最大执行次数比例的第一候选列作为第一目标列。
在一可选实施例中,当i为2时,部分候选列为多个候选列中的至少一个第二候选列,每个第二候选列中包括表中的至少一列,且至少一列中包括第一目标列。
处理组件803,具体用于根据每个第二候选例关联的语句的执行次数比例,以及每个第二候选例的区分度,在至少一个第二候选列中确定第二目标列;在第二目标列的类型中,将除了第一拆分键的剩余类型作为第二拆分键。
在一可选实施例中,采集组件801,还用于采集表结构,表结构中包括字段类型。
处理组件803,还用于根据字段类型,检测第一拆分键是否可用。
在一可选实施例中,处理组件803,具体用于根据拆分键和拆分函数的映射关系,获取第一拆分键对应的第一拆分函数,以及第二拆分键对应的第二拆分函数。
输出组件804,具体用于输出第一拆分函数、第二拆分函数,以及数量。
在一可选实施例中,第三候选列为第二候选例中除了第二目标列之外的候选列。
若在第三候选列中,存在执行次数比例大于预设比例且区分度大于预设区分度的候选列,则处理组件803,还用于创建全局二级索引。
在一可选实施例中,处理组件803,具体用于根据每个第一候选列关联的语句的执行次数比例,以及每个第一候选列的区分度,在至少一个第一候选列中确定第三目标列,第三目标列的区分度大于预设区分度,且执行次数比例大于预设比例且小于最大执行次数比例;将第三目标列的类型作为第三拆分键。
在一可选实施例中,处理组件803,具体用于若确定对第一次拆分后的表进行第二次拆分,则根据每个第四候选例的关联的语句的执行次数比例,以及每个第四候选例的区分度,确定第四拆分键,每个第四候选列中包括表中的至少一列,且每个第四候选列中包括的至少一列中包含有第三目标列。
在一可选实施例中,采集组件801,还用于采集单机数据库的索引。
处理组件803,还用于确定预设覆盖列的类型;在预设覆盖列的类型、第三拆分键,以及第四拆分键中,删除与索引重复的类型;根据删除后的索引、预设覆盖列的类型、第三拆分键,以及第四拆分键,得到全局二级索引的拆分函数;
输出组件804,具体用于输出第一拆分函数、第二拆分函数、数量,以及全局二级索引的拆分函数。
在一可选实施例中,若单机数据库与分布式数据库的类型不同,则语法转换组件805,用于将采集到的数据库审计日志和统计信息进行语法转换,以转换成分布式数据库识别的语法。
在一种实施例中,语法转换组件805可以为上述实施例中的转换模块。
本申请实施例提供的数据库表的处理系统,可以执行上述方法实施例中数据库表的处理设备的动作,以实现上述实施例中的数据库表的处理方法,其实现原理和技术效果类似,在此不再赘述。
在一种实施例中,本申请实施例还提供一种电子设备,该电子设备可以为上述实施例中所述的数据库表的处理设备,参照图9,该电子设备中可以包括:处理器901(例如CPU)、存储器902。存储器902可能包含高速随机存取存储器(random-access memory,RAM),也可能还包括非易失性存储器(non-volatile memory,NVM),例如至少一个磁盘存储器,存储器902中可以存储各种指令,以用于完成各种处理功能以及实现本申请实施例中的方法步骤。
可选的,本申请涉及的电子设备还可以包括:电源903、通信总线904以及通信端口905。上述通信端口905用于实现电子设备与其他外设之间进行连接通信。在本申请实施例中,存储器902用于存储计算机可执行程序代码,程序代码包括指令;当处理器901执行指令时,指令使电子设备的处理器901执行上述方法实施例中的动作,其实现原理和技术效果类似,在此不再赘述。
可选的,本申请涉及的电子设备还可以包括:显示器906,显示器906用于输出表的拆分建议。
需要说明的是,上述实施例中所述的组件或部件可以是被配置成实施以上方法的一个或多个集成电路,例如:一个或多个专用集成电路(application specificintegrated circuit,ASIC),或,一个或多个微处理器(digital signal processor,DSP),或,一个或者多个现场可编程门阵列(field programmable gate array,FPGA)等。再如,当以上某个组件通过处理元件调度程序代码的形式实现时,该处理元件可以是通用处理器,例如处理器CPU或其它可以调用程序代码的处理器如控制器。再如,这些组件可以集成在一起,以片上系统(system-on-a-chip,SOC)的形式实现。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行计算机程序指令时,全部或部分地产生按照本申请实施例的流程或功能。计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
本文中的术语“多个”是指两个或两个以上。本文中术语“和/或”,仅仅是一种描述关联对象的关联关系,表示可以存在三种关系,例如,A和/或B,可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。另外,本文中字符“/”,一般表示前后关联对象是一种“或”的关系;在公式中,字符“/”,表示前后关联对象是一种“相除”的关系。另外,需要理解的是,在本申请的描述中,“第一”、“第二”等词汇,仅用于区分描述的目的,而不能理解为指示或暗示相对重要性,也不能理解为指示或暗示顺序。
可以理解的是,在本申请的实施例中涉及的各种数字编号仅为描述方便进行的区分,并不用来限制本申请的实施例的范围。
可以理解的是,在本申请的实施例中,上述各过程的序号的大小并不意味着执行顺序的先后,各过程的执行顺序应以其功能和内在逻辑确定,而不应对本申请的实施例的实施过程构成任何限定。
Claims (14)
1.一种数据库表的处理方法,其特征在于,包括:
采集单机数据库的数据库审计日志和统计信息;
接收存储节点的个数,所述存储节点为:分布式数据库中用于存储所述单机数据库中表的存储节点;
根据所述数据库审计日志,得到所述表的语句执行信息;
根据所述语句执行信息、所述统计信息,以及所述存储节点的个数,获取所述表的拆分信息;
根据所述表的拆分信息,输出所述表的拆分建议。
2.根据权利要求1所述的方法,其特征在于,所述语句执行信息包括:每个候选列关联的语句的执行次数比例,候选列为:所述表关联的语句涉及到的列;
所述根据所述数据库审计日志,得到所述表的语句执行信息,包括:
将所述数据库审计日志进行脱敏处理,得到所述表关联的语句的第一执行次数,以及所述表关联的每个语句涉及到的列,以得到所述候选列;
根据所述每个候选列关联的语句的第二执行次数,以及所述第一执行次数,获取所述每个候选列关联的语句的执行次数比例。
3.根据权利要求2所述的方法,其特征在于,所述拆分信息包括:拆分键,所述拆分键用于对所述表进行拆分,所述统计信息包括:所述表中每个列的区分度;
所述根据所述语句执行信息、所述统计信息,以及所述存储节点的个数,获取所述表的拆分信息,包括:
A,在第i次循环中,根据第i-1次拆分后的表的行信息和/或所述第i-1次拆分后的表的数据量,检测是否对所述第i-1次拆分后的表进行第i次拆分,若是,执行步骤B、步骤C,所述i为大于或等于1的整数,当所述i为1时,所述第i-1次拆分后的表为:未经拆分的表;
B,根据多个候选列中的部分候选列的执行次数比例,以及所述部分候选列的区分度,确定第i次拆分的拆分键;
C,根据第i-1次拆分后的表的行信息和/或所述第i-1次拆分后的表的数据量,以及所述存储节点的个数,确定每个所述i-1次拆分后的表经第i次拆分后的数量。
4.根据权利要求3所述的方法,其特征在于,当所述i为1时,所述部分候选列为所述多个候选列中的至少一个第一候选列,每个第一候选列中包括表中的一列;
所述根据多个候选列中的部分候选列的执行次数比例,以及所述部分候选列的区分度,确定第i次拆分的拆分键,包括:
根据所述每个第一候选列关联的语句的执行次数比例,以及所述每个第一候选列的区分度,在所述至少一个第一候选列中确定第一目标列;
将所述第一目标列的类型作为第一拆分键。
5.根据权利要求4所述的方法,其特征在于,所述在所述至少一个第一候选列中确定第一目标列,包括:
将区分度大于预设区分度,且大于预设比例中最大执行次数比例的第一候选列作为所述第一目标列。
6.根据权利要求5所述的方法,其特征在于,当所述i为2时,所述部分候选列为所述多个候选列中的至少一个第二候选列,每个第二候选列中包括表中的至少一列,且所述至少一列中包括所述第一目标列;
所述根据多个候选列中的部分候选列的执行次数比例,以及所述部分候选列的区分度,确定第i次拆分的拆分键,包括:
根据所述每个第二候选例关联的语句的执行次数比例,以及所述每个第二候选例的区分度,在所述至少一个第二候选列中确定第二目标列;
在所述第二目标列的类型中,将除了所述第一拆分键的剩余类型作为第二拆分键。
7.根据权利要求4或5所述的方法,其特征在于,所述根据所述数据库审计日志,得到所述表的语句执行信息之前,还包括:
采集表结构,所述表结构中包括字段类型;
所述将所述第一目标列的类型作为第一拆分键之后,包括;
根据所述字段类型,检测所述第一拆分键是否可用。
8.根据权利要求6所述的方法,其特征在于,所述根据所述表的拆分信息,输出所述表的拆分建议,包括:
根据拆分键和拆分函数的映射关系,获取所述第一拆分键对应的第一拆分函数,以及所述第二拆分键对应的第二拆分函数;
输出所述第一拆分函数、所述第二拆分函数,以及所述数量。
9.根据权利要求6所述的方法,其特征在于,第三候选列为:所述候选列中不包含所述第一目标列、所述第二目标列的候选列,所述方法还包括:
若在第三候选列中,存在执行次数比例大于所述预设比例且区分度大于所述预设区分度的候选列,则创建全局二级索引。
10.根据权利要求9所述的方法,其特征在于,所述创建全局二级索引,包括:
根据所述每个第三候选列关联的语句的执行次数比例,以及所述每个第三候选列的区分度,在所述至少一个第三候选列中确定第三目标列,所述第三目标列的区分度大于所述预设区分度,且执行次数比例大于所述预设比例;
将所述第三目标列的类型作为第三拆分键。
11.根据权利要求10所述的方法,其特征在于,所述将所述第三目标列的类型作为第三拆分键之后,包括:
若确定对第一次拆分后的表进行第二次拆分,则根据每个第四候选例的关联的语句的执行次数比例,以及所述每个第四候选例的区分度,确定第四拆分键,所述每个第四候选列中包括表中的至少一列,且所述每个第四候选列中包括的至少一列中包含有所述第三目标列。
12.根据权利要求11所述的方法,其特征在于,所述根据所述数据库审计日志,得到所述表的语句执行信息之前,还包括:
采集所述单机数据库的索引;
所述确定第四拆分键之后,还包括:
确定预设覆盖列的类型;
在所述预设覆盖列的类型、所述第三拆分键,以及所述第四拆分键中,删除与所述索引重复的类型;
根据删除后的索引、所述预设覆盖列的类型、所述第三拆分键,以及所述第四拆分键,得到所述全局二级索引的拆分函数;
所述输出所述第一拆分函数、所述第二拆分函数,以及所述数量,包括:
输出所述第一拆分函数、所述第二拆分函数、所述数量,以及所述全局二级索引的拆分函数。
13.根据权利要求1所述的方法,其特征在于,所述采集单机数据库的数据库审计日志和统计信息之后,还包括:
若所述单机数据库与所述分布式数据库的类型不同,则将采集到的所述数据库审计日志和所述统计信息进行语法转换,以转换成所述分布式数据库识别的语法。
14.一种数据库表的处理系统,其特征在于,包括:
采集组件,用于采集单机数据库的数据库审计日志和统计信息;
收发组件,用于接收存储节点的个数,所述存储节点为:分布式数据库中用于存储所述单机数据库中表的存储节点;
处理组件,用于根据所述数据库审计日志,得到所述表的语句执行信息,以及根据所述语句执行信息、所述统计信息,以及所述存储节点的个数,获取所述表的拆分信息;
输出组件,根据所述表的拆分信息,输出所述表的拆分建议。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210314941.7A CN114661721A (zh) | 2022-03-28 | 2022-03-28 | 数据库表的处理方法和系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202210314941.7A CN114661721A (zh) | 2022-03-28 | 2022-03-28 | 数据库表的处理方法和系统 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114661721A true CN114661721A (zh) | 2022-06-24 |
Family
ID=82033553
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202210314941.7A Pending CN114661721A (zh) | 2022-03-28 | 2022-03-28 | 数据库表的处理方法和系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114661721A (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115964444A (zh) * | 2023-02-07 | 2023-04-14 | 敏博科技(武汉)有限公司 | 一种云原生分布式多租户数据库实现方法及系统 |
CN116644103A (zh) * | 2023-05-17 | 2023-08-25 | 本原数据(北京)信息技术有限公司 | 数据排序方法和数据排序装置、计算机设备、存储介质 |
-
2022
- 2022-03-28 CN CN202210314941.7A patent/CN114661721A/zh active Pending
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN115964444A (zh) * | 2023-02-07 | 2023-04-14 | 敏博科技(武汉)有限公司 | 一种云原生分布式多租户数据库实现方法及系统 |
CN116644103A (zh) * | 2023-05-17 | 2023-08-25 | 本原数据(北京)信息技术有限公司 | 数据排序方法和数据排序装置、计算机设备、存储介质 |
CN116644103B (zh) * | 2023-05-17 | 2023-11-24 | 本原数据(北京)信息技术有限公司 | 基于数据库的数据排序方法和装置、设备、存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN110795455B (zh) | 依赖关系解析方法、电子装置、计算机设备及可读存储介质 | |
CN110633292B (zh) | 一种异构数据库的查询方法、装置、介质、设备及系统 | |
CN109766497B (zh) | 排行榜生成方法及装置、存储介质、电子设备 | |
CN107480198B (zh) | 一种分布式NewSQL数据库系统和全文检索方法 | |
JP2020522790A (ja) | 異種にプログラムされたデータ処理システムの自動依存性アナライザ | |
CN114661721A (zh) | 数据库表的处理方法和系统 | |
US20230073666A1 (en) | Data query method and apparatus, device, and computer-readable storage medium | |
CN111722839B (zh) | 一种代码生成方法、装置、电子设备及存储介质 | |
US20100094843A1 (en) | Association of semantic objects with linguistic entity categories | |
TWI643076B (zh) | 金融非結構化文本分析系統及其方法 | |
Li et al. | An integration approach of hybrid databases based on SQL in cloud computing environment | |
CN110928903B (zh) | 数据提取方法及装置、设备和存储介质 | |
CN110795478A (zh) | 一种应用于金融业务的数据仓库更新方法、装置和电子设备 | |
CN115237920A (zh) | 面向负载的数据索引推荐方法及其装置、存储介质 | |
CN116049193A (zh) | 数据存储方法及装置 | |
US10810196B2 (en) | Materialized view generation | |
CN112783758B (zh) | 测试案例库与特征库生成方法、设备及存储介质 | |
US11636421B1 (en) | Model driven reporting | |
CN114860759A (zh) | 一种数据处理方法、装置、设备及可读存储介质 | |
CN112835932A (zh) | 业务表的批量处理方法及装置、非易失性存储介质 | |
CN114218935B (zh) | 数据分析中的实体展示方法和装置 | |
CN111221846B (zh) | 一种sql语句的自动翻译方法及装置 | |
Ha et al. | An Approach to Translating a Database from MySQL to Cassandra | |
CN117094530B (zh) | 电网供应链指标体系管控方法及系统 | |
US7831630B2 (en) | Automation tool for providing access to an electronic database for business intelligence |
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 |