CN114416721A - 自动建表方法、系统、可读存储介质及计算机设备 - Google Patents
自动建表方法、系统、可读存储介质及计算机设备 Download PDFInfo
- Publication number
- CN114416721A CN114416721A CN202111524662.5A CN202111524662A CN114416721A CN 114416721 A CN114416721 A CN 114416721A CN 202111524662 A CN202111524662 A CN 202111524662A CN 114416721 A CN114416721 A CN 114416721A
- Authority
- CN
- China
- Prior art keywords
- fragment
- database
- statement
- fragmentation
- name
- 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/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/25—Integrating or interfacing systems involving database management systems
- G06F16/252—Integrating or interfacing systems involving database management systems between a Database Management System and a front-end application
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44505—Configuring for program initiating, e.g. using registry, configuration files
- G06F9/4451—User profiles; Roaming
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/44—Arrangements for executing specific programs
- G06F9/445—Program loading or initiating
- G06F9/44521—Dynamic linking or loading; Link editing at or after load time, e.g. Java class loading
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Software Systems (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- Data Mining & Analysis (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种自动建表方法、系统、可读存储介质及计算机设备,方法包括:创建数据表分片规则;根据数据表分片规则获取待处理表的配置文件,得到分片表名以及与分片表名对应的数据库地址;读取待处理表的元数据表,并根据元数据表得到对应的分片表建表语句;根据分片表建表语句在与数据库地址对应的数据库中自动创建与分片表名对应的分片表。本发明通过创建数据表分片规则去获取待处理表的配置文件,得到分片表名及对应的数据库地址,并且通过读取待处理表的元数据表得到分片表建表语句,根据分片表建表语句在数据库地址对应的数据库中自动创建分片表,使用户能根据配置的分片规则对数据表进行管理,在分库分表过程中能够自动创建表、修改表。
Description
技术领域
本申请涉及计算机技术领域,特别是涉及自动建表方法、系统、可读存储介质及计算机设备。
背景技术
随着科技的飞速发展和人们生活水平的提高,数据的量级也是呈指数的增长,从GB到TB到PB,对数据的各种操作也是愈加的困难。
分库分表就是为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库,将数据大表拆分成若干数据表,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
Sharding-JDBC分库分表中间件在配置了表的解析规则后存在表分片过多不易管理的问题。该问题带来的危害是需要每次启动项目手动创建分片表,并且分片表过多会有很多重复工作,在修改分片表字段时要同时修改其他相同分片规则下的表。Sharding-JDBC并不能管理分片后的表,需要额外付出成本管理这些分片表,比如要手动创建或者手动修改或者手动删除,人工成本高,并且手动删除存在误删的可能。
发明内容
本申请实施例提供了一种自动建表方法、系统、可读存储介质及计算机设备,以至少解决上述相关技术中的不足。
第一方面,本申请实施例提供了一种自动建表方法,包括:
创建数据表分片规则;
根据所述数据表分片规则获取待处理表的配置文件,得到分片表名以及与所述分片表名对应的数据库地址;
读取所述待处理表的元数据表,并根据所述元数据表得到对应的分片表建表语句;
根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表。
在其中一些实施例中,根据所述元数据表得到对应的分片表建表语句的步骤包括:
获取内存的SQL配置文件,解析出所述SQL配置文件的创建表语句;
通过所述分片表名替换所述SQL配置文件的创建表语句的表名,形成所述分片表建表语句。
在其中一些实施例中,根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表的步骤包括:
根据所述数据库地址、用户名以及密码查找到对应的数据库;
加载JDBC驱动程序,并与所述数据库建立连接;
创建Statement对象,并执行所述分片表建表语句;
判断所述分片表建表语句是否执行成功;
若所述分片表建表语句执行成功,则在所述数据库完成自动创建分片表。
在其中一些实施例中,所述方法还包括:
当对所述分片表进行修改时,获取修改前的分片表和新生成的分片表的信息,并获取修改前的分片表和新生成的分片表的信息对比差异,生成对应的SQL建表语句;
根据所述SQL建表语句创建新的分片表。
在其中一些实施例中,判断所述分片表建表语句是否执行成功的步骤之后,所述方法还包括:
若所述分片表建表语句执行失败,则发出警告日志。
第二方面,本申请实施例提供了一种自动建表系统,包括:
第一创建模块,用于创建数据表分片规则;
获取模块,用于根据所述数据表分片规则获取待处理表的配置文件,得到分片表名以及与所述分片表名对应的数据库地址;
处理模块,用于读取所述待处理表的元数据表,并根据所述元数据表得到对应的分片表建表语句;
第二创建模块,用于根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表。
在其中一些实施例中,所述处理模块包括:
解析单元,用于获取内存的SQL配置文件,解析出所述SQL配置文件的创建表语句;
处理单元,用于通过所述分片表名替换所述SQL配置文件的创建表语句的表名,形成所述分片表建表语句。
在其中一些实施例中,所述第二创建模块包括:
查找单元,用于根据所述数据库地址、用户名以及密码查找到对应的数据库;
加载单元,用于加载JDBC驱动程序,并与所述数据库建立连接;
第一创建单元,用于创建Statement对象,并执行所述分片表建表语句;
判断单元,用于判断所述分片表建表语句是否执行成功;
第二创建单元,用于若所述分片表建表语句执行成功,则在所述数据库完成自动创建分片表。
在其中一些实施例中,所述系统还包括:
对比模块,用于当对所述分片表进行修改时,获取修改前的分片表和新生成的分片表的信息,并获取修改前的分片表和新生成的分片表的信息对比差异,生成对应的SQL建表语句;
第三创建模块,用于根据所述SQL建表语句创建新的分片表。
在其中一些实施例中,所述第二创建模块还包括:
控制单元,用于若所述分片表建表语句执行失败,则发出警告日志。
第三方面,本申请实施例提供了一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述第一方面所述的自动建表方法。
第四方面,本申请实施例提供了一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如上述第一方面所述的自动建表方法。
相比于相关技术,本申请实施例提供的自动建表方法、系统、可读存储介质及计算机设备,通过创建数据表分片规则去获取待处理表的配置文件,得到分片表名以及对应的数据库地址,并且通过读取待处理表的元数据表去得到对应的分片表建表语句,根据分片表建表语句在数据库地址对应的数据库中自动创建分片表,使得用户能够根据配置的分片规则对数据表进行管理,在分库分表过程中能够自动创建表、修改表,避免了人为管理分库分表过程中数据表的创建、管理、删除过程成本过高、易出差错的问题。
本申请的一个或多个实施例的细节在以下附图和描述中提出,以使本申请的其他特征、目的和优点更加简明易懂。
附图说明
此处所说明的附图用来提供对本申请的进一步理解,构成本申请的一部分,本申请的示意性实施例及其说明用于解释本申请,并不构成对本申请的不当限定。在附图中:
图1为现有技术中Sharding-JDBC的工作方式示意图;
图2为现有技术的分库分表中垂直分表的示意图;
图3为现有技术的分库分表中垂直分库的示意图;
图4为现有技术的分库分表中水平分库的示意图;
图5为现有技术的分库分表中水平分库的示意图;
图6为本发明第一实施例中的自动建表方法的流程图;
图7为本发明第一实施例中配置分片规则的代码;
图8为本发明第二实施例中的自动建表方法的流程图;
图9为本发明第三实施例中的自动建表系统的结构框图;
图10为本发明第四实施例中的计算机设备的结构框图。
主要元件符号说明:
存储器 | 10 | 获取模块 | 12 |
处理器 | 20 | 处理模块 | 13 |
计算机程序 | 30 | 第二创建模块 | 14 |
第一创建模块 | 11 |
如下具体实施方式将结合上述附图进一步说明本发明。
具体实施方式
为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行描述和说明。应当理解,此处所描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。基于本申请提供的实施例,本领域普通技术人员在没有作出创造性劳动的前提下所获得的所有其他实施例,都属于本申请保护的范围。
显而易见地,下面描述中的附图仅仅是本申请的一些示例或实施例,对于本领域的普通技术人员而言,在不付出创造性劳动的前提下,还可以根据这些附图将本申请应用于其他类似情景。此外,还可以理解的是,虽然这种开发过程中所作出的努力可能是复杂并且冗长的,然而对于与本申请公开的内容相关的本领域的普通技术人员而言,在本申请揭露的技术内容的基础上进行的一些设计,制造或者生产等变更只是常规的技术手段,不应当理解为本申请公开的内容不充分。
在本申请中提及“实施例”意味着,结合实施例描述的特定特征、结构或特性可以包含在本申请的至少一个实施例中。在说明书中的各个位置出现该短语并不一定均是指相同的实施例,也不是与其它实施例互斥的独立的或备选的实施例。本领域普通技术人员显式地和隐式地理解的是,本申请所描述的实施例在不冲突的情况下,可以与其它实施例相结合。
除非另作定义,本申请所涉及的技术术语或者科学术语应当为本申请所属技术领域内具有一般技能的人士所理解的通常意义。本申请所涉及的“一”、“一个”、“一种”、“该”等类似词语并不表示数量限制,可表示单数或复数。本申请所涉及的术语“包括”、“包含”、“具有”以及它们任何变形,意图在于覆盖不排他的包含;例如包含了一系列步骤或模块(单元)的过程、方法、系统、产品或设备没有限定于已列出的步骤或单元,而是可以还包括没有列出的步骤或单元,或可以还包括对于这些过程、方法、产品或设备固有的其它步骤或单元。本申请所涉及的“连接”、“相连”、“耦接”等类似的词语并非限定于物理的或者机械的连接,而是可以包括电气的连接,不管是直接的还是间接的。本申请所涉及的“多个”是指两个或两个以上。“和/或”描述关联对象的关联关系,表示可以存在三种关系,例如,“A和/或B”可以表示:单独存在A,同时存在A和B,单独存在B这三种情况。字符“/”一般表示前后关联对象是一种“或”的关系。本申请所涉及的术语“第一”、“第二”、“第三”等仅仅是区别类似的对象,不代表针对对象的特定排序。
首先,需要说明的是:
Sharding-JDBC:一个分库分表的中间程序;Sharding-JDBC是当当网研发的开源分布式数据库中间件,从3.0开始Sharding-JDBC被包含在Sharding-Sphere中,4.0版本之后的版本为Apache版本。
ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,它由Sharding-JDBC、Sharding-Proxy和Sharding-Sidecar这三款相互独立的产品组成,他们均提供标准化的数据分片、分布式事务和数据库治理能力。
Sharding-JDBC,它定位为轻量级Java框架,在Java的JDBC层提供额外服务,它使用客户端直连数据库,以JAR包形式提供服务,无需额外部署和依赖,可理解为增强版的JDBC驱动,完全兼容JDBC和各种ORM框架。
Sharding-JDBC的核心功能为数据分片和读写分离,通过Sharding-JDBC,应用可以透明的使用JDBC访问已经分库分表、读写分离的各个数据源,而不用关心数据源的数量以及数据如何分布。
它的特性有:
适用于任何基于Java的ORM框架,如:Hibernete、MyBatis、Spring JDBC Template或直接使用JDBC
基于任何第三方的数据库连接池,如DBCP、C3P0、Druid、HikariCP等
支持任意实现JDBC规范的数据库,目前支持MySQL、Oracle、SQLServer和PostgreSQL;
请参阅图1,图1中展示了Sharding-JDBC的工作方式,使用Sharding-JDBC需要人工对数据库进行分库分表,在应用程序中加入Sharding-JDBC的JAR包,应用程序通过Sharding-JDBC操作分库分表后的数据库和数据表,由于Sharding-JDBC是对JDBC驱动的增强,使用Sharding-JDBC就像使用JDBC驱动一样,在应用程序中无需指定具体要操作的分库和分表的。
分片表:对数据库表要分片处理,例如将A表分成两个表A0,A1。那么A0,A1就称为分片表。
分库分表:为了解决由于数据量过大而导致数据库性能降低的问题,将原来独立的数据库拆分成若干数据库组成,将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。
分表分库包括分库和分表两个部分,在生产中通常包括:垂直分库、水平分库、垂直分表、水平分表四种方式:
一、垂直分表:
垂直分表:将一个表按照字段拆分成多表,每个表存储其中一部分字段。
下面通过一个商品查询的案例进行垂直分表:
通常在商品列表中不显示商品详情信息,例如,用户在浏览商品列表时,只有对某商品感兴趣才会查看该商品的详细描述。因此,商品信息中商品描述字段访问频次较低,且该字段存储占用空间较大,访问单个数据IO时间较长;商品信息中商品名称、商品图片、商品价格等字段数据访问频次较高。
通过访问频次的考虑,将商品信息表拆分如图2所示;
商品列表可以采用如下SQL:
SELECT p.*,r.[地理区域名称],s.[店铺名称],s.[信誉]
FROM[商品信息]AS p
LEFT JOIN[地理区域]AS r ON p.[产地]=r.[地区编码]
LEFT JOIN[店铺信息]AS s ON p.id=s.[所属店铺]
WHERE...ORDER BY...LIMIT...
获取商品描述时,再通过以下SQL获取:
SELECT*
FROM[商品描述]
WHERE[商品ID]=?
二、垂直分库
垂直分库:按照业务将表进行分类,分布到不同的数据库上面,每个库可以放在不同的服务器上。
通过垂直分表性能得到一定程度的提升,但是随着数据的增多,磁盘空间受到了限制,CPU、内存等资源等都存在限制。于是,可以将SELLER_DB(卖家库),分为PRODUCT_DB(商品库)和STORE_DB(店铺库),并把这两个库分散到不同的服务器,如图3所示;
由于商品信息和商品描述业务耦合度较高,因此一起被存放在PRODUCT_DB(商品库);而店铺信息相对独立,因此单独被存放在STORE_DB(店铺库)。
三、水平分库
水平分库是把同一个表的数据按一定规则拆到不同的数据库中,每个库可以放在不同的服务器上。
经过垂直分库后,数据库性能得到一定程度的解决,但是随着业务量增长,PRODUCT_DB(商品库)单库存储数据已经超出预计,同时PRODUCT_DB(商品库)属于访问非常频繁的资源,单台服务器已经无法支撑。此时,可以尝试水平分库:
将店铺ID为单数和店铺ID为双数的商品信息分别放在两个库中,如图4所示,也就是说,要操作某条数据,先分析这条数据所属的店铺ID。如果店铺ID为双数,将此操作映射至PRODUCT_DB1(商品库1);如果店铺ID为单数,将操作映射至PRODUCT_DB2(商品库2)。此操作要访问数据库名称的表达式为:
PRODUCT_DB[店铺ID%2+1]。
四、水平分表
水平分表是在同一个数据库内,把同一个表的数据按一定规则拆到多个表中。
按照水平分库的思路把PRODUCT_DB_X(商品库)内的表也可以进行水平拆分,其目的是为了解决单表数据量大的问题,如图5所示;
如果商品ID为双数,将此操作映射至商品信息1表;如果商品ID为单数,将操作映射至商品信息2表。此操作要访问表名称的表达式为:
商品信息[商品ID%2+1]。
由上述分析可以看出,分库分表能有效缓解单机和单库带来的性能瓶颈和压力,突破网络IO、硬件资源、连接数的瓶颈,同时也带来了一些问题。
1.事务一致性问题:由于分库分表把数据分布在不同库甚至不同服务器,就会存在分布式事务问题
2.跨节点关联查询:在没有分库前,可以通过以下SQL对店铺信息进行关联查询:
SELECT p.*,r.[地理区域名称],s.[店铺名称],s.[信誉]
FROM[商品信息]AS p
LEFT JOIN[地理区域]AS r ON p.[产地]=r.[地区编码]
LEFT JOIN[店铺信息]AS s ON p.id=s.[所属店铺]
WHERE...ORDER BY...LIMIT...
但垂直分库后[商品信息]和[店铺信息]不在一个数据库,甚至不在一台服务器,无法进行关联查询。
可将原关联查询分为两次查询,第一次查询的结果集中找出关联数据ID,然后根据ID发起第二次请求得到关联数据,最后将得到的数据进行拼装。
3.跨节点分页、排序函数:跨节点多库进行查询时,LIMIT分页、ORDER BY排序等问题,就变得比较复杂。需要现在不同的分片节点中将数据进行排序并返回,然后将不同分片返回的结果集进行汇总和再次排序。
4.主键避重:在分库分表环境中,由于表中数据同时存在不同数据库中,主键值平时使用的自增长将不行。某个分区数据库生成的ID无法保证全局唯一。因此需要单独设计全局主键,以避免跨主键重复问题。
5.公共表:实际的应用场景中,参数表、数据字典表等都是数据量较小,变动少,而且属于高频联合查询的依赖表,例如地址区域表。
可以将这类表在每个数据库都保存一份,所有对公共表的更新操作都同时发送到所有分库执行。
因此,在使用Sharding-JDBC过程中,我们可以清晰的看到表的初始化过程,比如:我们配置了数据表A的分片规则,例如我们要把表A分成两个分表A0和A1,在我们没有预先创建表A0和A1表时候,我们执行了查询语句,从表A中获取数据,Sharding-JDBC查找A0和A1两个分片中获取我们需要的数据,这个时候会报错。提示我们分片表A0和A1不存在。
这里我们可以清晰的看到一个缺点,Sharding-JDBC并不能管理我们分片后的表,即它不能预先创建我们需要的表A0和A1,并且在我们可能需要创建更多的分片表,需要我们额外付出成本管理这些分片表,比如要自己手动创建或者手动修改或者手动删除。
实施例一
请参阅图6,所示为本发明第一实施例中的自动建表方法的流程图,所述方法具体包括步骤S101至S104:
S101,创建数据表分片规则;
在具体实施时,需要配置分片规则,比如需要把表A分成两片,表A0和表A1,需要在shardingjdbc相关配置文件里面配置,详细请参阅图7。
在本申请中,配置参数包括数据源的配置信息和数据表的配置;
1、数据源的配置信息,即数据库需要被发现,其代码为:
spring.shardingsphere.datasource.names=ds0,ds1;
2、数据表的配置,即库里面对应表的配置,其代码为:
spring.shardingsphere.sharding.tables.t_order.actual-data-nodes=ds$->{0..1}.t_order$->{0..1}。
S102,根据所述数据表分片规则获取待处理表的配置文件,得到分片表名以及与所述分片表名对应的数据库地址;
在具体实施时,程序启动后,读取我们预先配置过的分片规则。
获取到表A要在数据库DS0和DS1都要创建表A0和A1,从配置规则的配置文件里面读取,程序中要在ShardingDataSource里面获取,相关包名:org.apache.shardingsphere.shardingjdbc.jdbc.core.datasource.ShardingDataSource。
通过解析分片规则我们能够知道A需要分成两片,分片后的表名A0,A1。并且我们需要知道A0和A1分片表要在哪个数据库中创建,因此,通过所述数据表分片规则能够获取对应的数据库地址、用户名和密码。
S103,读取所述待处理表的元数据表,并根据所述元数据表得到对应的分片表建表语句;
在具体实施时,读取我们配置的初始化表A的元数据,约定数据库表的元数据即数据库表的创建表语句,配置放在资源目录下,程序中获取到SQL配置文件,解析SQL的建表语句我们把资源文件放在程序运行的资源文件目录下,程序获取,读取SQL语句,可缓存内存中,等待接下来的使用;
我们读取的内存中的SQL建表语句,用分片表的表名替换基本表里面的表名,这样就是要创建的不同的分片表建表语句。
S104,根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表。
在具体实施时,根据分片表建表语句在数据库地址对应的数据库中自动创建与所述分片表名对应的分片表;
在本申请中,采用最原始的jdbc(连接数据库的方式)连接数据库。
其中,数据库ds0,ds1的数据库地址为:
Jdbc:mysql://localhost:3306/ds0
Jdbc:mysql://localhost:3306/ds1
在这两个数据库自动创建两个表
t_order0,t_order1。
在本申请中,如果表已经创建,要执行修改操作,则用程序读取已经生成过的分片表信息,对比差异,生成修改的SQL语句。如果表要执行删除操作,在相关表标识上delete等标识信息,这个可以自定义约定。
综上,本发明上述实施例当中的自动建表方法,通过创建数据表分片规则去获取待处理表的配置文件,得到分片表名以及对应的数据库地址,并且通过读取待处理表的元数据表去得到对应的分片表建表语句,根据分片表建表语句在数据库地址对应的数据库中自动创建分片表,使得用户能够根据配置的分片规则对数据表进行管理,在分库分表过程中能够自动创建表、修改表,避免了人为管理分库分表过程中数据表的创建、管理、删除过程成本过高、易出差错的问题。
实施例二
请参阅图8,所示为本发明第二实施例中的自动建表方法流程图,所述方法具体包括步骤S201至S212:
S201,创建数据表分片规则;
S202,根据所述数据表分片规则获取待处理表的配置文件,得到分片表名以及与所述分片表名对应的数据库地址;
S203,读取所述待处理表的元数据表,获取内存的SQL配置文件,解析出所述SQL配置文件的创建表语句;
S204,通过所述分片表名替换所述SQL配置文件的创建表语句的表名,形成所述分片表建表语句;
S205,根据所述数据库地址、用户名以及密码查找到对应的数据库;
S206,加载JDBC驱动程序,并与所述数据库建立连接;
S207,创建Statement对象,并执行所述分片表建表语句;
S208,判断所述分片表建表语句是否执行成功;
S209,若所述分片表建表语句执行成功,则在所述数据库完成自动创建分片表;
S210,若所述分片表建表语句执行失败,则发出警告日志;
S211,当对所述分片表进行修改时,获取修改前的分片表和新生成的分片表的信息,并获取修改前的分片表和新生成的分片表的信息对比差异,生成对应的SQL建表语句;
S212,根据所述SQL建表语句创建新的分片表。
上述方法按照以下方式具体实施:
A、配置数据表分片规则。
#数据源一
sharding.jdbc.datasource.ds0.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds0.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds0.url=jdbc:mysql://ip:3306/test_0?characterEncoding=utf-8
sharding.jdbc.datasource.ds0.username=root
sharding.jdbc.datasource.ds0.password=root123456
#数据源二
sharding.jdbc.datasource.ds1.type=com.alibaba.druid.pool.DruidDataSource
sharding.jdbc.datasource.ds1.driver-class-name=com.mysql.jdbc.Driver
sharding.jdbc.datasource.ds1.url=jdbc:mysql://ip:3306/test_1?characterEncoding=utf-8
sharding.jdbc.datasource.ds1.username=root
sharding.jdbc.datasource.ds1.password=root123456
sharding.jdbc.config.sharding.tables.Test.actual-data-nodes=ds$->{0..1}.Test_$->{0..1}
B、解析配置的分片规则:
ds$->{0..1}.Test_$->{0..1},从表达式里面解析,
我们要在数据源一ds0和数据源二ds1里面都创建对应的表Test0,Test1
C、读取到我们解析后的规则,在程序中进行逻辑处理:
读取到shardingjdbc配置文件shardingDataSource,里面有解析后的配置文件:
D、读取分片表的元数据:
CREATE TABLE`Test`(
`mid`int(10)unsigned NOT NULL AUTO_INCREMENT,
`name`varchar(200)CHARACTER SET utf8mb4 DEFAULT NULL,PRIMARY KEY(`mid`)
)ENGINE=InnoDB AUTO_INCREMENT=3318DEFAULT CHARSET=utf8;特别指出:要创建的数据表是`Test`。
E、元数据初始表名替换成要分片表名:
CREATE TABLE`Test_0`(
`mid`int(10)unsigned NOT NULL AUTO_INCREMENT,
`name`varchar(200)CHARACTER SET utf8mb4 DEFAULT NULL,
PRIMARY KEY(`mid`)
)ENGINE=InnoDB AUTO_INCREMENT=3318DEFAULT CHARSET=utf8;
CREATE TABLE`Test_1`(
`mid`int(10)unsigned NOT NULL AUTO_INCREMENT,
`name`varchar(200)CHARACTER SET utf8mb4 DEFAULT NULL,
PRIMARY KEY(`mid`)
)ENGINE=InnoDB AUTO_INCREMENT=3318DEFAULT CHARSET=utf8;
特别指出:最终分片表是我们要创建两张表,Test_0,Test_1。
F、连接数据库,创建表:
数据库表创建方式我们通过JDBC连接数据,执行SQL;
1.加载JDBC驱动程序;
2.创建数据库连接;
3.创建一个Statement对象;
4.执行Sql语句,处理结果;
5.关闭JDBC对象,关闭连接;
特别指出:我们在第四步处理结果时,发现执行失败可以程序打印警告日志或者抛出异常中止程序继续运行;
如果要修改表,我们要对比出两个数据库表的差异列,然后执行修改方法。
G、创建成功后查看ds0里面有Test0,Test1,ds1里面有Test0,Test1。
H、完成创建,同理修改、删除方法也可以执行。
综上,本发明上述实施例当中的自动建表方法,通过创建数据表分片规则去获取待处理表的配置文件,得到分片表名以及对应的数据库地址,并且通过读取待处理表的元数据表去得到对应的分片表建表语句,根据分片表建表语句在数据库地址对应的数据库中自动创建分片表,使得用户能够根据配置的分片规则对数据表进行管理,在分库分表过程中能够自动创建表、修改表,避免了人为管理分库分表过程中数据表的创建、管理、删除过程成本过高、易出差错的问题。
实施例三
本发明另一方面还提出一种自动建表系统,请参阅图9,所示为本发明第三实施例中的自动建表系统结构框图,包括:
第一创建模块11,用于创建数据表分片规则;
获取模块12,用于根据所述数据表分片规则获取待处理表的配置文件,得到分片表名以及与所述分片表名对应的数据库地址;
处理模块13,用于读取所述待处理表的元数据表,并根据所述元数据表得到对应的分片表建表语句;
进一步的,所述处理模块13包括:
解析单元,用于获取内存的SQL配置文件,解析出所述SQL配置文件的创建表语句;
处理单元,用于通过所述分片表名替换所述SQL配置文件的创建表语句的表名,形成所述分片表建表语句。
第二创建模块14,用于根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表。
进一步的,所述第二创建模块14包括:
查找单元,用于根据所述数据库地址、用户名以及密码查找到对应的数据库;
加载单元,用于加载JDBC驱动程序,并与所述数据库建立连接;
第一创建单元,用于创建Statement对象,并执行所述分片表建表语句;
判断单元,用于判断所述分片表建表语句是否执行成功;
第二创建单元,用于若所述分片表建表语句执行成功,则在所述数据库完成自动创建分片表。
在其中一些实施例中,所述系统还包括:
对比模块,用于当对所述分片表进行修改时,获取修改前的分片表和新生成的分片表的信息,并获取修改前的分片表和新生成的分片表的信息对比差异,生成对应的SQL建表语句;
第三创建模块,用于根据所述SQL建表语句创建新的分片表。
在其中一些实施例中,所述第二创建模块还包括:
控制单元,用于若所述分片表建表语句执行失败,则发出警告日志或抛出异常。
上述各模块被执行时所实现的功能或操作步骤与上述方法实施例大体相同,在此不再赘述。
本发明实施例所提供的自动建表系统,其实现原理及产生的技术效果和前述方法实施例相同,为简要描述,系统实施例部分未提及之处,可参考前述方法实施例中相应内容。
实施例四
本发明还提出一种计算机设备,请参阅图10,所示为本发明第四实施例中的计算机设备,包括存储器10、处理器20以及存储在所述存储器10上并可在所述处理器20上运行的计算机程序30,所述处理器20执行所述计算机程序30时实现上述的自动建表方法。
其中,存储器10至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、硬盘、多媒体卡、卡型存储器(例如,SD或DX存储器等)、磁性存储器、磁盘、光盘等。存储器10在一些实施例中可以是车辆的内部存储单元,例如该车辆的硬盘。存储器10在另一些实施例中也可以是外部存储装置,例如插接式硬盘,智能存储卡(Smart Media Card,SMC),安全数字(Secure Digital,SD)卡,闪存卡(Flash Card)等。进一步地,存储器10还可以既包括车辆的内部存储单元也包括外部存储装置。存储器10不仅可以用于存储安装于车辆的应用软件及各类数据,还可以用于暂时地存储已经输出或者将要输出的数据。
其中,处理器20在一些实施例中可以是电子控制单元(Electronic ControlUnit,简称ECU,又称行车电脑)、中央处理器(Central Processing Unit,CPU)、控制器、微控制器、微处理器或其他数据处理芯片,用于运行存储器10中存储的程序代码或处理数据,例如执行访问限制程序等。
需要指出的是,图10示出的结构并不构成对计算机设备的限定,在其它实施例当中,该计算机设备可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
本发明实施例还提出一种可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现如上述的自动建表方法。
本领域技术人员可以理解,在流程图中表示或在此以其他方式描述的逻辑和/或步骤,例如,可以被认为是用于实现逻辑功能的可执行指令的定序列表,可以具体实现在任何计算机可读介质中,以供指令执行系统、装置或设备(如基于计算机的系统、包括处理器的系统或其他可以从指令执行系统、装置或设备取指令并执行指令的系统)使用,或结合这些指令执行系统、装置或设备而使用。就本说明书而言,“计算机可读介质”可以是任何可以包含、存储、通信、传播或传输程序以供指令执行系统、装置或设备或结合这些指令执行系统、装置或设备而使用的装置。
计算机可读介质的更具体的示例(非穷尽性列表)包括以下:具有一个或多个布线的电连接部(电子装置),便携式计算机盘盒(磁装置),随机存取存储器(RAM),只读存储器(ROM),可擦除可编辑只读存储器(EPROM或闪速存储器),光纤装置,以及便携式光盘只读存储器(CDROM)。另外,计算机可读介质甚至可以是可在其上打印所述程序的纸或其他合适的介质,因为可以例如通过对纸或其他介质进行光学扫描,接着进行编辑、解译或必要时以其他合适方式进行处理来以电子方式获得所述程序,然后将其存储在计算机存储器中。
应当理解,本发明的各部分可以用硬件、软件、固件或它们的组合来实现。在上述实施方式中,多个步骤或方法可以用存储在存储器中且由合适的指令执行系统执行的软件或固件来实现。例如,如果用硬件来实现,和在另一实施方式中一样,可用本领域公知的下列技术中的任一项或它们的组合来实现:具有用于对数据信号实现逻辑功能的逻辑门电路的离散逻辑电路,具有合适的组合逻辑门电路的专用集成电路,可编程门阵列(PGA),现场可编程门阵列(FPGA)等。
以上所述实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。
Claims (10)
1.一种自动建表方法,其特征在于,包括:
创建数据表分片规则;
根据所述数据表分片规则获取待处理表的配置文件,得到分片表名以及与所述分片表名对应的数据库地址;
读取所述待处理表的元数据表,并根据所述元数据表得到对应的分片表建表语句;
根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表。
2.根据权利要求1所述的自动建表方法,其特征在于,根据所述元数据表得到对应的分片表建表语句的步骤包括:
获取内存的SQL配置文件,解析出所述SQL配置文件的创建表语句;
通过所述分片表名替换所述SQL配置文件的创建表语句的表名,形成所述分片表建表语句。
3.根据权利要求1所述的自动建表方法,其特征在于,根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表的步骤包括:
根据所述数据库地址、用户名以及密码查找到对应的数据库;
加载JDBC驱动程序,并与所述数据库建立连接;
创建Statement对象,并执行所述分片表建表语句;
判断所述分片表建表语句是否执行成功;
若所述分片表建表语句执行成功,则在所述数据库完成自动创建分片表。
4.根据权利要求1所述的自动建表方法,其特征在于,所述方法还包括:
当对所述分片表进行修改时,获取修改前的分片表和新生成的分片表的信息,并获取修改前的分片表和新生成的分片表的信息对比差异,生成对应的SQL建表语句;
根据所述SQL建表语句创建新的分片表。
5.根据权利要求3所述的自动建表方法,其特征在于,判断所述分片表建表语句是否执行成功的步骤之后,所述方法还包括:
若所述分片表建表语句执行失败,则发出警告日志。
6.一种自动建表系统,其特征在于,包括:
第一创建模块,用于创建数据表分片规则;
获取模块,用于根据所述数据表分片规则获取待处理表的配置文件,得到分片表名以及与所述分片表名对应的数据库地址;
处理模块,用于读取所述待处理表的元数据表,并根据所述元数据表得到对应的分片表建表语句;
第二创建模块,用于根据所述分片表建表语句在与所述数据库地址对应的数据库中自动创建与所述分片表名对应的分片表。
7.根据权利要求6所述的自动建表系统,其特征在于,所述处理模块包括:
解析单元,用于获取内存的SQL配置文件,解析出所述SQL配置文件的创建表语句;
处理单元,用于通过所述分片表名替换所述SQL配置文件的创建表语句的表名,形成所述分片表建表语句。
8.根据权利要求6所述的自动建表系统,其特征在于,所述第二创建模块包括:
查找单元,用于根据所述数据库地址、用户名以及密码查找到对应的数据库;
加载单元,用于加载JDBC驱动程序,并与所述数据库建立连接;
第一创建单元,用于创建Statement对象,并执行所述分片表建表语句;
判断单元,用于判断所述分片表建表语句是否执行成功;
第二创建单元,用于若所述分片表建表语句执行成功,则在所述数据库完成自动创建分片表。
9.一种可读存储介质,其上存储有计算机程序,其特征在于,该程序被处理器执行时实现如权利要求1至5中任一项所述的自动建表方法。
10.一种计算机设备,包括存储器、处理器以及存储在所述存储器上并可在所述处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现如权利要求1至5中任一项所述的自动建表方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111524662.5A CN114416721A (zh) | 2021-12-14 | 2021-12-14 | 自动建表方法、系统、可读存储介质及计算机设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202111524662.5A CN114416721A (zh) | 2021-12-14 | 2021-12-14 | 自动建表方法、系统、可读存储介质及计算机设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN114416721A true CN114416721A (zh) | 2022-04-29 |
Family
ID=81265271
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202111524662.5A Pending CN114416721A (zh) | 2021-12-14 | 2021-12-14 | 自动建表方法、系统、可读存储介质及计算机设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN114416721A (zh) |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114968748A (zh) * | 2022-07-29 | 2022-08-30 | 北京奥星贝斯科技有限公司 | 一种数据库测试方法、系统及装置 |
CN115587095A (zh) * | 2022-10-08 | 2023-01-10 | 广州市玄武无线科技股份有限公司 | 数据库分表创建方法、装置及存储介质 |
TWI819773B (zh) * | 2022-08-03 | 2023-10-21 | 大陸商鼎捷軟件股份有限公司 | 管理介面的映射表的系統及方法 |
-
2021
- 2021-12-14 CN CN202111524662.5A patent/CN114416721A/zh active Pending
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114968748A (zh) * | 2022-07-29 | 2022-08-30 | 北京奥星贝斯科技有限公司 | 一种数据库测试方法、系统及装置 |
CN114968748B (zh) * | 2022-07-29 | 2022-10-21 | 北京奥星贝斯科技有限公司 | 一种数据库测试方法、系统及装置 |
TWI819773B (zh) * | 2022-08-03 | 2023-10-21 | 大陸商鼎捷軟件股份有限公司 | 管理介面的映射表的系統及方法 |
CN115587095A (zh) * | 2022-10-08 | 2023-01-10 | 广州市玄武无线科技股份有限公司 | 数据库分表创建方法、装置及存储介质 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN114416721A (zh) | 自动建表方法、系统、可读存储介质及计算机设备 | |
WO2020233367A1 (zh) | 区块链数据存储和查询方法、装置、设备及存储介质 | |
US10572475B2 (en) | Leveraging columnar encoding for query operations | |
US8065323B2 (en) | Offline validation of data in a database system for foreign key constraints | |
US9576024B2 (en) | Hierarchy of servers for query processing of column chunks in a distributed column chunk data store | |
US7921132B2 (en) | System for query processing of column chunks in a distributed column chunk data store | |
US7921131B2 (en) | Method using a hierarchy of servers for query processing of column chunks in a distributed column chunk data store | |
US20040162822A1 (en) | Method and apparatus for converting in-line database queries to stored procedures | |
US20070143248A1 (en) | Method using query processing servers for query processing of column chunks in a distributed column chunk data store | |
US7921087B2 (en) | Method for query processing of column chunks in a distributed column chunk data store | |
KR20160124744A (ko) | 인-메모리 데이터베이스를 호스팅하는 시스템 및 방법 | |
EP2706468A1 (en) | Data storage and query method | |
CN113094387A (zh) | 一种数据查询方法、装置、电子设备及机器可读存储介质 | |
US20190362010A1 (en) | Epsilon-closure for frequent pattern analysis | |
US7925617B2 (en) | Efficiency in processing queries directed to static data sets | |
CN107357557B (zh) | 一种信息更新方法及装置 | |
US20190370382A1 (en) | Unbalanced partitioning of database for application data | |
CN115705313A (zh) | 一种数据处理方法、装置、设备及计算机可读存储介质 | |
CN112765169A (zh) | 数据处理方法、装置、设备及存储介质 | |
WO2022242635A1 (zh) | 维护用sql记录的管理装置及应用系统 | |
WO2022242634A1 (zh) | 查询用sql记录的管理装置及应用系统 | |
US11947490B2 (en) | Index generation and use with indeterminate ingestion patterns | |
CN108090095B (zh) | 批量重建数据库的方法和装置 | |
CN117009430A (zh) | 数据管理方法、装置和存储介质及电子设备 | |
CN115357606A (zh) | 数据源查询方法、系统、计算机设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination |