CN111125114A - 数据库横向扩展、数据表访问方法及装置 - Google Patents

数据库横向扩展、数据表访问方法及装置 Download PDF

Info

Publication number
CN111125114A
CN111125114A CN201911360402.1A CN201911360402A CN111125114A CN 111125114 A CN111125114 A CN 111125114A CN 201911360402 A CN201911360402 A CN 201911360402A CN 111125114 A CN111125114 A CN 111125114A
Authority
CN
China
Prior art keywords
data
key
dividing
sub
library
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.)
Granted
Application number
CN201911360402.1A
Other languages
English (en)
Other versions
CN111125114B (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.)
China Construction Bank Corp
Original Assignee
China Construction Bank Corp
CCB Finetech 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 China Construction Bank Corp, CCB Finetech Co Ltd filed Critical China Construction Bank Corp
Priority to CN201911360402.1A priority Critical patent/CN111125114B/zh
Publication of CN111125114A publication Critical patent/CN111125114A/zh
Application granted granted Critical
Publication of CN111125114B publication Critical patent/CN111125114B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

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
    • 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
    • G06F16/278Data partitioning, e.g. horizontal or vertical partitioning
    • YGENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
    • Y02TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
    • Y02DCLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
    • Y02D10/00Energy efficient computing, e.g. low power processors, power management or thermal 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)
  • Computing Systems (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本发明提供一种数据库横向扩展、数据表访问方法及装置,通过将数据表分表,并生成每个分表的路由地址,进而可以在截获到获取数据表请求中的路由地址后该些原数据表的路由地址,从而不需要对程序应用层进行改写,只需要设置执行本发明步骤的中间件即可实现数据库的扩展,不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低,能提高数据处理效率,同时支持数据库的水平扩展,提高了数据处理效率。

Description

数据库横向扩展、数据表访问方法及装置
技术领域
本发明涉及数据处理领域,更具体的,涉及一种数据库横向扩展方法、数据表访问方法及装置。
背景技术
随着行业业务的发展,出现很多大表,表的记录行数几亿,甚至达到几十亿,数据库处理能力达到了极限,如基金确认表、纪念币的预约兑换表。单一服务器的处理能力是有限的,不管如何优化,总会达到上限,限制了单位时间内事务处理能力。在并发量达到一定程度后,无法极限增长,严重影响用户体验,并且所有业务数据存放到一个库中,存在单点故障风险。本专利提供了一种关系型数据库横向扩展能力,将我们的数据分布到多个库中,从而解决单一数据库所性能瓶颈,更好的满足客户体验提升和缓解业务增长给系统处理带来的压力。
发明内容
为了解决上述问题的至少一个,本发明一个方面实施例提供一种数据库横向扩展方法,包括:
获取待切分数据表;
对数据表进行切分,得到多个数据分表;
将所述多个数据分表存储在至少一个数据库中,并生成每个数据分表的分表路由地址;其中,所述分表路由地址被用于在截获到所述待切分数据表的请求指令时,改写所述请求指令中所述待切分数据表的总路由地址为对应多个数据分表的分表路由地址。
在某些实施例中,所述对数据表进行切分,包括:
根据设定的分表键对数据表进行数据切分。
本发明另一个方面实施例提供一种数据表访问方法,包括:
截获数据表访问的请求指令;
改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址;所述多个数据分表通过对所述数据表进行切分得到。
在某些实施例中,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址,包括:
解析所述请求指令,得到数据表的表名;
根据所述表名查找分表策略,并获取对应的分表键和分表数量;
判断所述数据表中是否包含所述分表键;
若包含,根据设定分表对应关系获取所述分表键的键值,结合所述分表数量生成表序号;
根据设定的表序号和库序号的对应关系,依据所述表序号对应查找所述库序号;
用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
在某些实施例中,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址,包括:
解析所述请求指令,得到数据表的表名;
根据所述表名查找分表策略,并获取对应的分表键、分库键、分表数量以及分库数量;
判断所述数据表中是否包含所述分表键和分库键;
若包含所述分表键和分库键,根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,结合所述分表数量和分库数量生成表序号和库序号;
用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
在某些实施例中,所述请求指令是SQL语句,所述解析所述请求指令,得到数据表的表名,包括:
解析SQL语句,建立语法树,得到所述表名;
所述根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,包括:
根据SQL语法树找到对应键值。
在某些实施例中,所述结合所述分表数量生成表序号,包括:
根据所述分表键键值计算对应键值的哈希值;
根据所述哈希值以及分表的数量,得到所述表序号。
在某些实施例中,所述结合所述分表数量和分库数量生成表序号和库序号,包括:
根据所述分表键键值计算对应分表键的哈希值,根据所述分库键键值计算对应分库键的哈希值;
根据分表键的哈希值以及分表的数量,得到所述表序号,根据分库键的哈希值以及分库的数量,得到所述库序号。
本发明又一方面实施例提供一种数据库横向扩展装置,包括:
待切分数据表获取模块,获取待切分数据表;
数据表切分模块,对数据表进行切分,得到多个数据分表;
数据分表存储模块,将所述多个数据分表存储在至少一个数据库中,并生成每个数据分表的分表路由地址;其中,所述分表路由地址被用于在截获到所述待切分数据表的请求指令时,改写所述请求指令中所述待切分数据表的总路由地址为对应多个数据分表的分表路由地址。
在某些实施例中,所述数据表切分模块根据设定的分表键对数据表进行数据切分。
本发明又一方面实施例提供一种数据表访问装置,包括:
截获模块,截获数据表访问的请求指令;
地址改写模块,改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址;所述多个数据分表通过对所述数据表进行切分得到。
在某些实施例中,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述地址改写模块,包括:
解析单元,解析所述请求指令,得到数据表的表名;
分表键获取单元,根据所述表名查找分表策略,并获取对应的分表键和分表数量;
判断单元,判断所述数据表中是否包含所述分表键;
表序号生成单元,若包含,根据设定分表对应关系获取所述分表键的键值,结合所述分表数量生成表序号;
库序号生成单元,根据设定的表序号和库序号的对应关系,依据所述表序号对应查找所述库序号;
改写单元,用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
在某些实施例中,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述地址改写模块,包括:
解析单元,解析所述请求指令,得到数据表的表名;
分表键及分库键获取单元,根据所述表名查找分表策略,并获取对应的分表键、分库键、分表数量以及分库数量;
判断单元,判断所述数据表中是否包含所述分表键和分库键;
表序号及库序号生成单元,若包含所述分表键和分库键,根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,结合所述分表数量和分库数量生成表序号和库序号;
改写单元,用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
在某些实施例中,所述请求指令是SQL语句,所述解析单元解析SQL语句,建立语法树,得到所述表名;所述分表键获取单元根据SQL语法树找到对应键值。
在某些实施例中,所述表序号生成单元,包括:
分表键哈希值计算单元,根据所述分表键键值计算对应键值的哈希值;
表序号计算单元,根据所述哈希值以及分表的数量,得到所述表序号。
在某些实施例中,所述表序号及库序号生成单元,包括:
分表键及分库键哈希值计算单元,根据所述分表键键值计算对应分表键的哈希值,根据所述分库键键值计算对应分库键的哈希值;
表序号及库序号计算单元,根据分表键的哈希值以及分表的数量,得到所述表序号,根据分库键的哈希值以及分库的数量,得到所述库序号。
本发明又一方面实施例提供一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述的方法的步骤。
本发明又一方面实施例提供一种计算机可读存储介质,其上存储有计算机程序,该计算机程序被处理器执行时实现上述的方法的步骤。
本发明的有益效果如下:
本发明提供一种数据库横向扩展、数据表访问方法及装置,通过将数据表分表,并生成每个分表的路由地址,进而可以在截获到获取数据表请求中的路由地址后该些原数据表的路由地址,从而不需要对程序应用层进行改写,只需要设置执行本发明步骤的中间件即可实现数据库的扩展,不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低,能提高数据处理效率,同时支持数据库的水平扩展,提高了数据处理效率。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本发明实施例中一种数据表访问方法流程示意图。
图2示出本发明实施例中一种数据库横向扩展方法流程示意图。
图3示出本发明实施例中关系型数据库横向扩展中间件架构图。
图4示出本发明实施例中分库分表示意图。
图5示出本发明实施例中一种数据表访问装置结构示意图。
图6示出本发明实施例中一种数据库横向扩展装置结构示意图。
图7示出适于用来实现本发明实施例的计算机设备的结构示意图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现运行的系统中,较多的使用jdk1.6,数据库使用oracle。本方案是基于新一代JAVA框架的数据访问层进行扩展,实现一个分布式数据访问层,实现对分库分表的支持,能够尽量保持现在大家的开发习惯,不改变数据库的访问方式,尽量屏蔽分库分表的底层细节,能够支持关系型数据库的水平扩展。
关系型数据库本身比较容易成为系统瓶颈,单机存储容量、连接数、处理能力都有限。当单表的数据量达到1000W或100G以后,由于查询维度较多,即使添加从库、优化索引,做很多操作时性能仍下降严重。另外,由于无法进行分布式式部署,而一台服务器的资源(CPU、磁盘、内存、IO等)是有限的,最终数据库所能承载的数据量、数据处理能力都将遭遇瓶颈。此时就要考虑对其进行分库分表了,分库分表的目的就在于减少数据库的负担,缩短查询时间。现有技术对应用层侵入较大,只能适用于mysql数据库,存在不足。
有鉴于此,本发明的核心构思在于构建于数据访问层,对应用层透明,尽量屏蔽分布分表的细节,对现有代码改造少,使用方便,大大提高数据访问效率。
图1示出了本发明一个方面实施例中一种数据表访问方法,其具体包括:
S11:截获数据表访问的请求指令。
具体的,请求指令可以是SQL语句,SQL拦截是指应用层调用数据访问层服务时,由SQL拦截器拦截执行的SQL语句,获取到执行的SQL语句和参数。
S12:改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址;所述多个数据分表通过对所述数据表进行切分得到。
一些实施例中,路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,这些都可以通过SQL语句实现,可以依据一个字段或者两个字段来执行步骤S12。
具体而言,以一个字段为例,该步骤包括:
S211:解析所述请求指令,得到数据表的表名;
S212:根据所述表名查找分表策略,并获取对应的分表键和分表数量;
S213:判断所述数据表中是否包含所述分表键;
S214:若包含,根据设定分表对应关系获取所述分表键的键值,结合所述分表数量生成表序号;
S215:根据设定的表序号和库序号的对应关系,依据所述表序号对应查找所述库序号;
S216:用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
对于两个字段的实施例,步骤S21具体包括:
S221:解析所述请求指令,得到数据表的表名;
S222:根据所述表名查找分表策略,并获取对应的分表键、分库键、分表数量以及分库数量;
S223:判断所述数据表中是否包含所述分表键和分库键;
S224:若包含所述分表键和分库键,根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,结合所述分表数量和分库数量生成表序号和库序号;
S225:用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
垂直切分即根据业务耦合性,将关联度低的不同表存储在不同的数据库。做法与大系统拆分为多个小系统类似,按业务分类进行独立划分,每个小系统使用单独的数据库,垂直切分优点:解决业务系统层面的耦合,业务清晰;与微服务的治理类似,也能对不同业务的数据进行分级管理、维护、监控、扩展等;高并发场景下,垂直切分一定程度的提升IO、数据库连接数、单机硬件资源的瓶颈;缺点:依然存在单表数据量过大的问题,需要水平切分。
水平切分分为库内分表和分库分表,是根据表内数据内在的逻辑关系,将同一个表按不同的条件分散到多个数据库或多个表中,每个表中只包含一部分数据,从而使得单个表的数据量变小,达到分布式的效果。水平切分的优点:不存在单库数据量过大、高并发的性能瓶颈,提升系统稳定性和负载能力;不需要拆分业务模块表太多。
在软件实现层面,通过设置分布式的数据访问中间件,实现对分库分表的支持,对关系型数据库的横向扩展,如图3所示,该中间件在软件层面包括IBATIS拦截器、SQL缓存组件、SQL路由层、SQL执行层及结果集合并层、数据源管理、线程池管理层、SQL解析组件、分库分表策略库,SQL路由层收到SQL语句和参数,启动SQL解析引擎对SQL建模,生成SQL语法树,根据分库分表规则,把SQL改写并路由SQL到不同的数据源,采用LRU策略缓存本次SQL解析结果;最后在不同的数据源上执行SQL,并对执行结果进行归并后,返回给请求客户端。
进一步的,上述实施例中,所述请求指令是SQL语句,所述解析所述请求指令,得到数据表的表名,包括:
解析SQL语句,建立语法树,得到所述表名;
所述根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,包括:
根据SQL语法树找到对应键值。
更进一步的,对于一个字段的实施例,所述结合所述分表数量生成表序号,包括:
根据所述分表键键值计算对应键值的哈希值;
根据所述哈希值以及分表的数量,得到所述表序号。
对于两个字段的实施例,所述结合所述分表数量和分库数量生成表序号和库序号,包括:
根据所述分表键键值计算对应分表键的哈希值,根据所述分库键键值计算对应分库键的哈希值;
根据分表键的哈希值以及分表的数量,得到所述表序号,根据分库键的哈希值以及分库的数量,得到所述库序号。
举例而言,把一张逻辑表T以id字段作为分库分表键分成8个表,分布在4个DB中。图4为分库分表示意图。
(1)提取分库分表键的取值集合,分库键的取值集合为{0,1,2,3},分表键的取值集合为{0,1,2,3,4,5,6,7},表序号和库序号对应关系为{表序号:库序号}{0:0,:1:0,2:1,3:1,4:2,5:2,6:3,7:3}。
(2)在T表插入数据时insert into T(id,name)values(‘8’,‘hello’),数据访问层拦截sql语句,解析sql,建立语法树,得到表名T,在分库分表策略配置列表中查找表名T适用的名为“test”schema分库分表策略。
(3)test分库分表策略分库分表键为id,因此需在insert sql语法树中查找是否有id字段。有,则该sql语句适用改条分库分表策略
(4)根据sql语法树找到insert语句id的值为8,因此分表键哈希值=一致性hash算法(8),表序号=分表键哈希值%分表数量
(5)库序号=表序号和库序号对应关系中表序号对应的库序号
(6)用得到的表序号和库序号改写INSERT语句insert into T_表序号_库序号(id,name)values(‘8’,‘hello’)
SQL路由由SQL解析引擎,SQL解析结果缓存,SQL路由,SQL改写组成;SQL解析引擎是根据拦截到的SQL语句,对SQL建模,生成SQL语法树。SQL缓存指通过LRU策略缓存每次SQL解析引擎解析的SQL语法树,每次收到需解析的SQL语句时,先在SQL缓存中查找,如缓存未命中,才进行SQL解析,大大提高了SQL解析效率。SQL改写是遍历SQL语法树,根据分库分表策略中分库分表键,将逻辑表改写成物理表;SQL路由是根据分库分表策略,把SQL路由到指定的数据源。
SQL执行是指把改写后的SQL数据在解析后的指定数据源上执行,并且把多数据源上执行的多个结果集进行排序合并,得到最终的执行结果,返回给应用层数据请求方。
可以理解,本发明具有以下优势:
1、应用层透明,在具体应用中,应用层不进行任何改造,应用层发出的数据访问指令(请求指令)包括了数据表的总路由地址,与现有技术中一致,然后通过中间件改写路由地址,进而不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低。
2、支持数据库的水平扩展,提高了数据处理效率。
图2示出了本发明一个方面实施例提供的一种数据库横向扩展方法,如图2所示,包括:
S21:获取待切分数据表。
具体的,在数据存储时,通过网络获取到待切分数据表。
S22:对数据表进行切分,得到多个数据分表。
S23:将所述多个数据分表存储在至少一个数据库中,并生成每个数据分表的分表路由地址;其中,所述分表路由地址被用于在截获到所述待切分数据表的请求指令时,改写所述请求指令中所述待切分数据表的总路由地址为对应多个数据分表的分表路由地址。
本发明提供一种数据库横向扩展方法,通过将数据表分表,并生成每个分表的路由地址,进而可以在截获到获取数据表请求中的路由地址后该些原数据表的路由地址,从而不需要对程序应用层进行改写,只需要设置执行本发明步骤的中间件即可实现数据库的扩展,不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低,能提高数据处理效率,同时支持数据库的水平扩展,提高了数据处理效率。
具体的,数据切分是水平切分和垂直切分,切分的分表可以存储于一个数据库,也可以分别存储在多个数据库,本发明不限于此。
在优选实施例中,所述对数据表进行切分,包括:
根据设定的分表键对数据表进行数据切分。
根据数据切分结果,把数据库表由逻辑表拆分成物理表,通过分库键和分表键,绑定到不同的数据源上。目前提供两种分库分表策略,一种是分库分表键为表中的同一个字段,一种是分库分表键为表中不同的两个字段。
本实施例创造性地生成了每个分表的分表路由地址,并且每个分表路由地址被用于在截获到所述待切分数据表的请求指令时,改写所述请求指令中所述待切分数据表的总路由地址为对应多个数据分表的分表路由地址。
其具体改写过程如上述的数据访问方法步骤中所描述的一致,此处不做赘述。
基于相同的发明构思,如图5,本发明实施例还提供一种数据表访问装置,包括:
截获模块11,截获数据表访问的请求指令;
地址改写模块12,改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址;所述多个数据分表通过对所述数据表进行切分得到。
在优选实施例中,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述地址改写模块,包括:
解析单元,解析所述请求指令,得到数据表的表名;
分表键获取单元,根据所述表名查找分表策略,并获取对应的分表键和分表数量;
判断单元,判断所述数据表中是否包含所述分表键;
表序号生成单元,若包含,根据设定分表对应关系获取所述分表键的键值,结合所述分表数量生成表序号;
库序号生成单元,根据设定的表序号和库序号的对应关系,依据所述表序号对应查找所述库序号;
改写单元,用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
在优选实施例中,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述地址改写模块,包括:
解析单元,解析所述请求指令,得到数据表的表名;
分表键及分库键获取单元,根据所述表名查找分表策略,并获取对应的分表键、分库键、分表数量以及分库数量;
判断单元,判断所述数据表中是否包含所述分表键和分库键;
表序号及库序号生成单元,若包含所述分表键和分库键,根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,结合所述分表数量和分库数量生成表序号和库序号;
改写单元,用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
在优选实施例中,所述请求指令是SQL语句,所述解析单元解析SQL语句,建立语法树,得到所述表名;所述分表键获取单元根据SQL语法树找到对应键值。
在优选实施例中,所述表序号生成单元,包括:
分表键哈希值计算单元,根据所述分表键键值计算对应键值的哈希值;
表序号计算单元,根据所述哈希值以及分表的数量,得到所述表序号。
在优选实施例中,所述表序号及库序号生成单元,包括:
分表键及分库键哈希值计算单元,根据所述分表键键值计算对应分表键的哈希值,根据所述分库键键值计算对应分库键的哈希值;
表序号及库序号计算单元,根据分表键的哈希值以及分表的数量,得到所述表序号,根据分库键的哈希值以及分库的数量,得到所述库序号。
可以理解,基于相同的发明构思,本发明提供一种数据表访问装置,通过将数据表分表,并生成每个分表的路由地址,进而可以在截获到获取数据表请求中的路由地址后该些原数据表的路由地址,从而不需要对程序应用层进行改写,只需要设置执行本发明步骤的中间件即可实现数据库的扩展,不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低,能提高数据处理效率,同时支持数据库的水平扩展,提高了数据处理效率。
基于相同发明构思,如图6所示,本发明实施例还提供一种数据库横向扩展装置,包括:
待切分数据表获取模块21,获取待切分数据表;
数据表切分模块22,对数据表进行切分,得到多个数据分表;
数据分表存储模块23,将所述多个数据分表存储在至少一个数据库中,并生成每个数据分表的分表路由地址;其中,所述分表路由地址被用于在截获到所述待切分数据表的请求指令时,改写所述请求指令中所述待切分数据表的总路由地址为对应多个数据分表的分表路由地址。
一些实施例中,所述数据表切分模块根据设定的分表键对数据表进行数据切分。
可以理解,基于相同的发明构思,本发明提供一种数据库横向扩展装置,通过将数据表分表,并生成每个分表的路由地址,进而可以在截获到获取数据表请求中的路由地址后该些原数据表的路由地址,从而不需要对程序应用层进行改写,只需要设置执行本发明步骤的中间件即可实现数据库的扩展,不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低,能提高数据处理效率,同时支持数据库的水平扩展,提高了数据处理效率。
本发明的实施例还提供能够实现上述实施例中的数据库横向扩展方法中全部步骤的一种电子设备的具体实施方式,参见图7,所述电子设备具体包括如下内容:
处理器(processor)601、存储器(memory)602、通信接口(CommunicationsInterface)603和总线604;
其中,所述处理器601、存储器602、通信接口603通过所述总线604完成相互间的通信;所述通信接口603用于实现数据库横向扩展装置以及用户终端等相关设备之间的信息传输;
所述处理器601用于调用所述存储器602中的计算机程序,所述处理器执行所述计算机程序时实现上述实施例中的数据库横向扩展方法中的全部步骤。
从上述描述可知,本发明的实施例提供的电子设备,通过将数据表分表,并生成每个分表的路由地址,进而可以在截获到获取数据表请求中的路由地址后该些原数据表的路由地址,从而不需要对程序应用层进行改写,只需要设置执行本发明步骤的中间件即可实现数据库的扩展,不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低,能提高数据处理效率,同时支持数据库的水平扩展,提高了数据处理效率。
本发明的实施例还提供能够实现上述实施例中的数据库横向扩展方法中全部步骤的一种计算机可读存储介质,所述计算机可读存储介质上存储有计算机程序,该计算机程序被处理器执行时实现上述实施例中的数据库横向扩展方法的全部步骤。
从上述描述可知,本发明的实施例提供的计算机可读存储介质,通过将数据表分表,并生成每个分表的路由地址,进而可以在截获到获取数据表请求中的路由地址后该些原数据表的路由地址,从而不需要对程序应用层进行改写,只需要设置执行本发明步骤的中间件即可实现数据库的扩展,不改变访问数据库的方式,尽量屏蔽分布分表的细节,使用成本低,能提高数据处理效率,同时支持数据库的水平扩展,提高了数据处理效率。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于硬件+程序类实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
上述对本说明书特定实施例进行了描述。其它实施例在所附权利要求书的范围内。在一些情况下,在权利要求书中记载的动作或步骤可以按照不同于实施例中的顺序来执行并且仍然可以实现期望的结果。另外,在附图中描绘的过程不一定要求示出的特定顺序或者连续顺序才能实现期望的结果。在某些实施方式中,多任务处理和并行处理也是可以的或者可能是有利的。
虽然本发明提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或客户端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境)。
上述实施例阐明的装置、装置、模块或单元,具体可以由计算机芯片或实体实现,或者由具有某种功能的产品来实现。一种典型的实现设备为计算机。具体的,计算机例如可以为个人计算机、膝上型计算机、车载人机交互设备、蜂窝电话、相机电话、智能电话、个人数字助理、媒体播放器、导航设备、电子邮件设备、游戏控制台、平板计算机、可穿戴设备或者这些设备中的任何设备的组合。
虽然本说明书实施例提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的手段可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的装置或终端产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行(例如并行处理器或者多线程处理的环境,甚至为分布式数据处理环境)。术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、产品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、产品或者设备所固有的要素。在没有更多限制的情况下,并不排除在包括所述要素的过程、方法、产品或者设备中还存在另外的相同或等同要素。
为了描述的方便,描述以上装置时以功能分为各种模块分别描述。当然,在实施本说明书实施例时可以把各模块的功能在同一个或多个软件和/或硬件中实现,也可以将实现同一功能的模块由多个子模块或子单元的组合实现等。以上所描述的装置实施例仅仅是示意性的,例如,所述单元的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式,例如多个单元或组件可以结合或者可以集成到另一个装置,或一些特征可以忽略,或不执行。另一点,所显示或讨论的相互之间的耦合或直接耦合或通信连接可以是通过一些接口,装置或单元的间接耦合或通信连接,可以是电性,机械或其它的形式。
本领域技术人员也知道,除了以纯计算机可读程序代码方式实现控制器以外,完全可以通过将方法步骤进行逻辑编程来使得控制器以逻辑门、开关、专用集成电路、可编程逻辑控制器和嵌入微控制器等的形式来实现相同功能。因此这种控制器可以被认为是一种硬件部件,而对其内部包括的用于实现各种功能的装置也可以视为硬件部件内的结构。或者甚至,可以将用于实现各种功能的装置视为既可以是实现方法的软件模块又可以是硬件部件内的结构。
本发明是参照根据本发明实施例的方法、设备(装置)、和计算机程序产品的流程图和/或方框图来描述的。应理解可由计算机程序指令实现流程图和/或方框图中的每一流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可装载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
在一个典型的配置中,计算设备包括一个或多个处理器(CPU)、输入/输出接口、网络接口和内存。
内存可能包括计算机可读介质中的非永久性存储器,随机存取存储器(RAM)和/或非易失性内存等形式,如只读存储器(ROM)或闪存(flash RAM)。内存是计算机可读介质的示例。
计算机可读介质包括永久性和非永久性、可移动和非可移动媒体可以由任何方法或技术来实现信息存储。信息可以是计算机可读指令、数据结构、程序的模块或其他数据。计算机的存储介质的例子包括,但不限于相变内存(PRAM)、静态随机存取存储器(SRAM)、动态随机存取存储器(DRAM)、其他类型的随机存取存储器(RAM)、只读存储器(ROM)、电可擦除可编程只读存储器(EEPROM)、快闪记忆体或其他内存技术、只读光盘只读存储器(CD-ROM)、数字多功能光盘(DVD)或其他光学存储、磁盒式磁带,磁带磁磁盘存储或其他磁性存储设备或任何其他非传输介质,可用于存储可以被计算设备访问的信息。按照本文中的界定,计算机可读介质不包括暂存电脑可读媒体(transitory media),如调制的数据信号和载波。
本领域技术人员应明白,本说明书的实施例可提供为方法、装置或计算机程序产品。因此,本说明书实施例可采用完全硬件实施例、完全软件实施例或结合软件和硬件方面的实施例的形式。而且,本说明书实施例可采用在一个或多个其中包含有计算机可用程序代码的计算机可用存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本说明书实施例可以在由计算机执行的计算机可执行指令的一般上下文中描述,例如程序模块。一般地,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。也可以在分布式计算环境中实践本说明书实施例,在这些分布式计算环境中,由通过通信网络而被连接的远程处理设备来执行任务。在分布式计算环境中,程序模块可以位于包括存储设备在内的本地和远程计算机存储介质中。
本说明书中的各个实施例均采用递进的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本说明书实施例的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。
以上所述仅为本说明书实施例的实施例而已,并不用于限制本说明书实施例。对于本领域技术人员来说,本说明书实施例可以有各种更改和变化。凡在本说明书实施例的精神和原理之内所作的任何修改、等同替换、改进等,均应包含在本说明书实施例的权利要求范围之内。

Claims (18)

1.一种数据库横向扩展方法,其特征在于,包括:
获取待切分数据表;
对数据表进行切分,得到多个数据分表;
将所述多个数据分表存储在至少一个数据库中,并生成每个数据分表的分表路由地址;其中,所述分表路由地址被用于在截获到所述待切分数据表的请求指令时,改写所述请求指令中所述待切分数据表的总路由地址为对应多个数据分表的分表路由地址。
2.根据权利要求1所述的数据库横向扩展方法,其特征在于,所述对数据表进行切分,包括:
根据设定的分表键对数据表进行数据切分。
3.一种数据表访问方法,其特征在于,包括:
截获数据表访问的请求指令;
改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址;所述多个数据分表通过对所述数据表进行切分得到。
4.根据权利要求3所述的数据表访问方法,其特征在于,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址,包括:
解析所述请求指令,得到数据表的表名;
根据所述表名查找分表策略,并获取对应的分表键和分表数量;
判断所述数据表中是否包含所述分表键;
若包含,根据设定分表对应关系获取所述分表键的键值,结合所述分表数量生成表序号;
根据设定的表序号和库序号的对应关系,依据所述表序号对应查找所述库序号;
用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
5.根据权利要求3所述的数据表访问方法,其特征在于,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址,包括:
解析所述请求指令,得到数据表的表名;
根据所述表名查找分表策略,并获取对应的分表键、分库键、分表数量以及分库数量;
判断所述数据表中是否包含所述分表键和分库键;
若包含所述分表键和分库键,根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,结合所述分表数量和分库数量生成表序号和库序号;
用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
6.根据权利要求4或5所述的数据表访问方法,其特征在于,所述请求指令是SQL语句,所述解析所述请求指令,得到数据表的表名,包括:
解析SQL语句,建立语法树,得到所述表名;
所述根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,包括:
根据SQL语法树找到对应键值。
7.根据权利要求4所述的数据表访问方法,其特征在于,所述结合所述分表数量生成表序号,包括:
根据所述分表键键值计算对应键值的哈希值;
根据所述哈希值以及分表的数量,得到所述表序号。
8.根据权利要求5所述的数据表访问方法,其特征在于,所述结合所述分表数量和分库数量生成表序号和库序号,包括:
根据所述分表键键值计算对应分表键的哈希值,根据所述分库键键值计算对应分库键的哈希值;
根据分表键的哈希值以及分表的数量,得到所述表序号,根据分库键的哈希值以及分库的数量,得到所述库序号。
9.一种数据库横向扩展装置,其特征在于,包括:
待切分数据表获取模块,获取待切分数据表;
数据表切分模块,对数据表进行切分,得到多个数据分表;
数据分表存储模块,将所述多个数据分表存储在至少一个数据库中,并生成每个数据分表的分表路由地址;其中,所述分表路由地址被用于在截获到所述待切分数据表的请求指令时,改写所述请求指令中所述待切分数据表的总路由地址为对应多个数据分表的分表路由地址。
10.根据权利要求9所述的数据库横向扩展装置,其特征在于,所述数据表切分模块根据设定的分表键对数据表进行数据切分。
11.一种数据表访问装置,其特征在于,包括:
截获模块,截获数据表访问的请求指令;
地址改写模块,改写所述请求指令中所述数据表的总路由地址为对应多个数据分表的分表路由地址;所述多个数据分表通过对所述数据表进行切分得到。
12.根据权利要求11所述的数据表访问装置,其特征在于,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述地址改写模块,包括:
解析单元,解析所述请求指令,得到数据表的表名;
分表键获取单元,根据所述表名查找分表策略,并获取对应的分表键和分表数量;
判断单元,判断所述数据表中是否包含所述分表键;
表序号生成单元,若包含,根据设定分表对应关系获取所述分表键的键值,结合所述分表数量生成表序号;
库序号生成单元,根据设定的表序号和库序号的对应关系,依据所述表序号对应查找所述库序号;
改写单元,用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
13.根据权利要求11所述的数据表访问装置,其特征在于,所述路由地址包括用于锚定数据库的库序号和用于锚定数据表的表序号,所述地址改写模块,包括:
解析单元,解析所述请求指令,得到数据表的表名;
分表键及分库键获取单元,根据所述表名查找分表策略,并获取对应的分表键、分库键、分表数量以及分库数量;
判断单元,判断所述数据表中是否包含所述分表键和分库键;
表序号及库序号生成单元,若包含所述分表键和分库键,根据设定分表对应关系和设定分库对应关系获取所述分表键的键值以及分库键的键值,结合所述分表数量和分库数量生成表序号和库序号;
改写单元,用所述表序号和库序号改写所述总路由地址中的表序号和库序号。
14.根据权利要求12或13所述的数据表访问装置,其特征在于,所述请求指令是SQL语句,所述解析单元解析SQL语句,建立语法树,得到所述表名;所述分表键获取单元根据SQL语法树找到对应键值。
15.根据权利要求12所述的数据表访问装置,其特征在于,所述表序号生成单元,包括:
分表键哈希值计算单元,根据所述分表键键值计算对应键值的哈希值;
表序号计算单元,根据所述哈希值以及分表的数量,得到所述表序号。
16.根据权利要求13所述的数据表访问装置,其特征在于,所述表序号及库序号生成单元,包括:
分表键及分库键哈希值计算单元,根据所述分表键键值计算对应分表键的哈希值,根据所述分库键键值计算对应分库键的哈希值;
表序号及库序号计算单元,根据分表键的哈希值以及分表的数量,得到所述表序号,根据分库键的哈希值以及分库的数量,得到所述库序号。
17.一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述程序时实现权利要求1至8任一项所述的方法的步骤。
18.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,该计算机程序被处理器执行时实现权利要求1至8任一项所述的方法的步骤。
CN201911360402.1A 2019-12-25 2019-12-25 数据库横向扩展、数据表访问方法及装置 Active CN111125114B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201911360402.1A CN111125114B (zh) 2019-12-25 2019-12-25 数据库横向扩展、数据表访问方法及装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201911360402.1A CN111125114B (zh) 2019-12-25 2019-12-25 数据库横向扩展、数据表访问方法及装置

Publications (2)

Publication Number Publication Date
CN111125114A true CN111125114A (zh) 2020-05-08
CN111125114B CN111125114B (zh) 2023-06-16

Family

ID=70502505

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201911360402.1A Active CN111125114B (zh) 2019-12-25 2019-12-25 数据库横向扩展、数据表访问方法及装置

Country Status (1)

Country Link
CN (1) CN111125114B (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148710A (zh) * 2020-09-21 2020-12-29 珠海市卓轩科技有限公司 微服务分库方法、系统和介质
CN112434037A (zh) * 2020-11-24 2021-03-02 京东方科技集团股份有限公司 数据处理方法、处理装置、数据处理设备和存储介质
CN113407547A (zh) * 2021-07-17 2021-09-17 广州汇思信息科技股份有限公司 一种数据库的适配装置、装置、计算机设备和存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102930062A (zh) * 2012-11-30 2013-02-13 南京富士通南大软件技术有限公司 一种数据库快速水平扩展的方法
CN104714972A (zh) * 2013-12-17 2015-06-17 中国银联股份有限公司 数据库分表建立及查询方法
CN106294565A (zh) * 2016-07-27 2017-01-04 中国农业银行股份有限公司 一种数据库访问方法及系统
CN108763381A (zh) * 2018-05-18 2018-11-06 深圳市彬讯科技有限公司 基于一致性哈希算法的分表方法及设备
CN110046181A (zh) * 2019-03-13 2019-07-23 平安科技(深圳)有限公司 基于数据库分布式存储的数据路由的方法和装置

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN102930062A (zh) * 2012-11-30 2013-02-13 南京富士通南大软件技术有限公司 一种数据库快速水平扩展的方法
CN104714972A (zh) * 2013-12-17 2015-06-17 中国银联股份有限公司 数据库分表建立及查询方法
CN106294565A (zh) * 2016-07-27 2017-01-04 中国农业银行股份有限公司 一种数据库访问方法及系统
CN108763381A (zh) * 2018-05-18 2018-11-06 深圳市彬讯科技有限公司 基于一致性哈希算法的分表方法及设备
CN110046181A (zh) * 2019-03-13 2019-07-23 平安科技(深圳)有限公司 基于数据库分布式存储的数据路由的方法和装置

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN112148710A (zh) * 2020-09-21 2020-12-29 珠海市卓轩科技有限公司 微服务分库方法、系统和介质
CN112148710B (zh) * 2020-09-21 2023-11-14 珠海市卓轩科技有限公司 微服务分库方法、系统和介质
CN112434037A (zh) * 2020-11-24 2021-03-02 京东方科技集团股份有限公司 数据处理方法、处理装置、数据处理设备和存储介质
CN113407547A (zh) * 2021-07-17 2021-09-17 广州汇思信息科技股份有限公司 一种数据库的适配装置、装置、计算机设备和存储介质

Also Published As

Publication number Publication date
CN111125114B (zh) 2023-06-16

Similar Documents

Publication Publication Date Title
US20230084389A1 (en) System and method for providing bottom-up aggregation in a multidimensional database environment
US20190286638A1 (en) System and method for improved performance in a multidimensional database environment
CN111125114B (zh) 数据库横向扩展、数据表访问方法及装置
CN107943952B (zh) 一种基于Spark框架进行全文检索的实现方法
US11768825B2 (en) System and method for dependency analysis in a multidimensional database environment
US11698893B2 (en) System and method for use of lock-less techniques with a multidimensional database
CN104239377A (zh) 跨平台的数据检索方法及装置
US10685031B2 (en) Dynamic hash partitioning for large-scale database management systems
WO2014166446A1 (zh) 文件访问处理方法、系统及计算机存储介质
CN114329096A (zh) 一种原生图数据库处理方法及系统
CN104423982A (zh) 请求的处理方法和处理设备
CN109710220A (zh) 关系型数据库查询方法、装置、设备及存储介质
Al-Sayeh et al. A gray-box modeling methodology for runtime prediction of apache spark jobs
US20100332501A1 (en) System and method for on-demand indexing
CN112506432A (zh) 一种动静分离的电力自动化系统实时数据存储和管理方法及装置
US11847121B2 (en) Compound predicate query statement transformation
CN110110034A (zh) 一种基于图的rdf数据管理方法、装置及存储介质
CN114428776A (zh) 一种面向时序数据的索引分区管理方法和系统
US20220365905A1 (en) Metadata processing method and apparatus, and a computer-readable storage medium
US20180232416A1 (en) Distribute execution of user-defined function
CN111858616A (zh) 流式数据存储方法及装置
US11943296B2 (en) Workload-based cache compression in a distributed storage system
Firmli et al. Graph Processing Systems: A Comprehensive Review with Emphasis on Graph Mutations
CN116414840A (zh) 基于MySQL数据库分库分表策略中间件的处理方法和装置
Ali et al. Enhanced Best Fit Algorithm for Merging Small Files.

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
TA01 Transfer of patent application right

Effective date of registration: 20220919

Address after: 25 Financial Street, Xicheng District, Beijing 100033

Applicant after: CHINA CONSTRUCTION BANK Corp.

Address before: 25 Financial Street, Xicheng District, Beijing 100033

Applicant before: CHINA CONSTRUCTION BANK Corp.

Applicant before: Jianxin Financial Science and Technology Co.,Ltd.

TA01 Transfer of patent application right
GR01 Patent grant
GR01 Patent grant