CN111209280A - 一种分库分表方法及设备 - Google Patents
一种分库分表方法及设备 Download PDFInfo
- Publication number
- CN111209280A CN111209280A CN201911425873.6A CN201911425873A CN111209280A CN 111209280 A CN111209280 A CN 111209280A CN 201911425873 A CN201911425873 A CN 201911425873A CN 111209280 A CN111209280 A CN 111209280A
- Authority
- CN
- China
- Prior art keywords
- database
- sub
- sql
- sql statement
- target
- 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/2228—Indexing structures
- G06F16/2255—Hash tables
-
- 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
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Data Mining & Analysis (AREA)
- Software Systems (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
- Debugging And Monitoring (AREA)
- Stored Programmes (AREA)
Abstract
本申请公开了一种分库分表方法及设备,通过创建基于计算机编程语言golang的服务作为golang中间件;启动golang中间件,拦截并解析应用程序发送的SQL语句,以获取SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,并根据目的分库分表规则改写SQL语句,得到改写后的SQL语句及对应的多个目的物理;将改写后的SQL语句发送至目的物理表所属的数据库,以使数据库根据改写后的SQL语句查找到数据库中的目的物理表中的真实数据并返回;最后将数据库返回的数据进行处理后,发送给应用程序对应的用户,使得通过构建的golang中间件,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性。
Description
技术领域
本申请涉及数据库技术领域领域,尤其涉及一种分库分表方法及设备。
背景技术
在互联网应用中,随着业务发展,数据量越来越多,很快会触及单个数据库表的处理能力的瓶颈。当并发量较高时,单台数据库单个表无法满足应用程序的性能要求。对于数据量较大且访问量较频繁的单表,我们需要通过一定的策略,将单表中的数据均匀的拆分到多个数据库的多张数据表中,通过分库分表减少单表的数据量和访问频率。但现有的分库分表策略需要改变原有业务代码及原有业务逻辑,导致原有业务系统的稳定性低。因此,本领域的技术人员致力于开发一种在不改变原有业务逻辑和不修改原有业务代码的情况下来完成分库分表的方法及设备。
发明内容
有鉴于现有技术的上述缺陷,本申请的一个目的是提供一种分库分表方法及设备,以解决现有技术中在分库分表时所导致的对原有业务逻辑的改变和对原有业务代码的修改的问题,以保证业务系统的稳定性和可扩展性。
为实现上述目的,本申请提供了一种分库分表方法,其特征在于,所述方法包括:
创建基于计算机编程语言golang的服务作为golang中间件;
启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则;
根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表;
将所述改写后的SQL语句发送至所述目的物理表所属的数据库;
将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户。
在本申请的较佳实施方式中,所述启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,包括:
启动所述golang中间件,拦截所述应用程序发送的所述SQL语句;
对所述SQL语句进行解析,得到所述SQL语句的抽象语法树;
根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则。
在本申请的较佳实施方式中,所述对所述SQL语句进行解析,得到所述SQL语句的抽象语法树,包括:
对所述SQL语句进行分片分析或路由分析,得到所述SQL语句的抽象语法树。
在本申请的较佳实施方式中,所述方法还包括:
预置用于分库分表的分库分表规则;
其中,所述根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则,包括:
根据所述抽象语法树,从预置的所述分库分表规则中,对所述目的数据库逻辑表进行分库分表规则匹配,得到所述目的数据库逻辑表对应的目的分库分表规则。
在本申请的较佳实施方式中,所述分库分表规则包括表与数据库之间的映射关系、分表的数量、所述表的拆分规则及分库分表时所采用的分库分表算法。
在本申请的较佳实施方式中,所述分库分表算法包括以下任一项:
哈希分表算法、自然月分表算法、日期分表算法及范围分表算法。
在本申请的较佳实施方式中,所述分库分表规则存储于配置文件中。
在本申请的较佳实施方式中,所述根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表,包括:
根据所述目的分库分表规则,对所述SQL语句进行改写得到所述改写后的SQL语句,并将所述SQL语句待处理的所述目的数据库逻辑表改写成对应的多个所述目的物理表。
在本申请的较佳实施方式中,所述将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户,包括:
接收所述目的物理表所属的数据库返回的数据;
将所述数据库返回的数据进行汇聚,得到所述SQL语句对应的输出数据;
将所述SQL语句对应的输出数据发送给所述应用程序对应的用户。
在本申请的另一较佳实施方式中,所述方法还包括:
获取测试程序;
启动所述测试程序测试原有业务流程和数据是否正确。
在本申请的较佳实施方式中,所述启动所述测试程序测试原有业务流程和数据是否正确,包括:
启动所述测试程序,判断所述SQL语句按照所述原有业务流程执行后得到的原有数据,与将所述数据库返回的数据进行处理后得到的所述SQL语句对应的输出数据是否一致。
本申请还提供了一种用于分库分表的设备,其特征在于,所述设备包括:
创建装置,用于创建基于计算机编程语言golang的服务作为golang中间件;
匹配装置,用于启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则;
改写装置,用于根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表;
发送装置,用于将所述改写后的SQL语句发送至所述目的物理表所属的数据库;
处理装置,用于将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户。
在本申请的较佳实施方式中,所述匹配装置用于:
启动所述golang中间件,拦截所述应用程序发送的所述SQL语句;
对所述SQL语句进行解析,得到所述SQL语句的抽象语法树;
根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则。
在本申请的较佳实施方式中,所述匹配装置用于:
对所述SQL语句进行分片分析或路由分析,得到所述SQL语句的抽象语法树。
在本申请的较佳实施方式中,本申请还提供了的一种用于分库分表的设备还包括规则预置装置,其中,所述规则预置装置用于:预置用于分库分表的分库分表规则;
其中,所述匹配装置用于:
根据所述抽象语法树,从预置的所述分库分表规则中,对所述目的数据库逻辑表进行分库分表规则匹配,得到所述目的数据库逻辑表对应的目的分库分表规则。
在本申请的较佳实施方式中,所述分库分表规则包括表与数据库之间的映射关系、分表的数量、所述表的拆分规则及分库分表时所采用的分库分表算法。
在本申请的较佳实施方式中,所述分库分表算法包括以下任一项:
哈希分表算法、自然月分表算法、日期分表算法及范围分表算法。
在本申请的较佳实施方式中,所述分库分表规则存储于配置文件中。
在本申请的较佳实施方式中,所述改写装置用于:
根据所述目的分库分表规则,对所述SQL语句进行改写得到所述改写后的SQL语句,并将所述SQL语句待处理的所述目的数据库逻辑表改写成对应的多个所述目的物理表。
在本申请的较佳实施方式中,所述处理装置用于:
接收所述目的物理表所属的数据库返回的数据;
将所述数据库返回的数据进行汇聚,得到所述SQL语句对应的输出数据;
将所述SQL语句对应的输出数据发送给所述应用程序对应的用户。
在本申请的另一较佳实施方式中本申请还提供了的一种用于分库分表的设备还包括测试装置,其中,所述测试装置用于:
获取测试程序;
启动所述测试程序测试原有业务流程和数据是否正确。
在本申请的较佳实施方式中,所述测试装置用于:
启动所述测试程序,判断所述SQL语句按照所述原有业务流程执行后得到的原有数据,与将所述数据库返回的数据进行处理后得到的所述SQL语句对应的输出数据是否一致。
与现有技术相比,本申请提供的一种分库分表方法及设备具有以下技术效果:
本申请通过首先创建基于计算机编程语言golang的服务作为golang中间件;之后启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,并根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表,实现将SQL语句需要处理的目的数据库逻辑表分为多个目的物理表;然后将所述改写后的SQL语句发送至所述目的物理表所属的数据库,以使所述数据库根据所述改写后的SQL语句查找到所述数据库中的目的物理表中的真实数据并返回给所述golang中间件;最后将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户,使得通过创建的所述golang中间件,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性。
以下将结合附图对本申请的构思、具体结构及产生的技术效果作进一步说明,以充分地了解本申请的目的、特征和效果。
附图说明
图1是本申请一个方面提供的一种分库分表方法的一个较佳实施例的流程示意图;
图2是本申请一个方面提供的一种分库分表方法的实际应用场景中的较佳实施例的流程示意图。
图3是本申请一个方面提供的一种用于分库分表的设备的结构示意图。
具体实施方式
以下参考说明书附图介绍本申请的多个优选实施例,使其技术内容更加清楚和便于理解。本申请可以通过许多不同形式的实施例来得以体现,本申请的保护范围并非仅限于文中提到的实施例。
在附图中,结构相同的部件以相同数字标号表示,各处结构或功能相似的组件以相似数字标号表示。附图所示的每一组件的尺寸和厚度是任意示出的,本申请并没有限定每个组件的尺寸和厚度。为了使图示更清晰,附图中有些地方适当夸大了部件的厚度。
如图1所示,本申请一个方面的一种实施例提供了一种分库分表方法的流程示意图,该方法包括步骤S11、步骤S12、步骤S13、步骤S14及步骤S15,其中,具体包括如下步骤:
步骤S11,创建基于计算机编程语言golang的服务作为golang中间件;在此,所述golang是谷歌(Google)开发的一种静态强类型、编译型、并发型且并具有垃圾回收功能的编程语言;所述中间件可以用于指示可以在包装原始应用的同时,能够添加一些额外功能的应用;一个好的中间件有一个责任就是可插拔并且自足,也就是说可以在接口级别嵌入中间件就能直接运行,由于中间件不是框架,不会影响原有业务的编码方式,仅仅是请求处理里面的一层而已,同时也完全没必要重写原有业务的代码,若需要使用中间件的一个功能,直接插入至所需功能的接口处就行,若不需要使用中间件了,就可以直接移除。本申请通过步骤S11创建了基于golang的服务作为golang中间件,以便后续能够通过所述golang中间件在处理对分库分表的同时,不改变原有业务逻辑和不修改原有业务代码。
步骤S12,启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,实现为SQL语句需要处理的目的数据库逻辑表匹配对应的分库分表规则。
步骤S13,根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表,实现了通过匹配的所述目的分库分表规则对所述SQL语句进行改写,以得到改写后的SQL语句及改写所述目的数据库逻辑表后得到的多个目的物理表。
步骤S14,将所述改写后的SQL语句发送至所述目的物理表所属的数据库,以便所述数据库根据所述改写后的SQL语句查找到所述数据库中的目的物理表中的真实数据并返回给所述golang中间件。
步骤S15,将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户,实现了分库分表的操作的同时,还不影响原有业务逻辑。
通过上述步骤S11至步骤S15,通过创建的golang中间件,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性。
例如,在步骤S11中创建了golang中间件后,步骤S12会启动所述golang中间件,拦截应用程序发送过来的SQL语句,比如SQL n,并对所述SQL语句:SQL n进行解析,以得到所述SQL语句:SQL n需要处理的目的数据库逻辑表(即SQL语句需要处理的目的表)对应的目的分库分表规则M;在步骤S13中,根据目的分库分表规则M对所述SQL语句:SQL n进行改写,得到改写后的SQL语句:SQL n’及与所述目的数据库逻辑表对应的多个目的物理表;在本申请一优选实施例中,若所述目的数据库逻辑表对应的目的物理表为5个,且分别为目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5,则所述步骤S14将所述改写后的SQL语句:SQL n’分别发送至所述目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5各自所属的数据库,以便在不同的数据库中,能够根据改写后的SQL语句:SQL n’查找到所述数据库中的目的物理表中的真实的数据并返回给所述golang中间件;在所述步骤S15中,将各个数据库返回的真实的数据进行处理后,得到所述SQL语句的输出数据,并将所述SQL语句的输出数据发送给所述应用程序对应的用户,实现了基于golang中间件进行分库分表的操作的同时,还能够不影响原有业务逻辑和原有业务代码,进一步保证了业务系统的稳定性和可扩展性。
接着本申请的上述实施例,所述步骤S12启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,具体包括:
启动所述golang中间件,拦截所述应用程序发送的所述SQL语句;
对所述SQL语句进行解析,得到所述SQL语句的抽象语法树;
根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则。
需要说明的是,所述SQL语句的抽象语法树是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,且不会表示出真实语法中出现的每个细节,比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现,而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示等。
例如,在步骤S12中,先启动所述golang中间件,拦截应用程序发送过来的SQL语句:SQL n;之后对所述SQL语句:SQL n进行解析,得到所述SQL语句:SQL n的抽象语法树;然后根据所述SQL语句:SQL n的抽象语法树,获取所述SQL语句:SQL n需要处理的目的数据库逻辑表对应的目的分库分表规则M,以便后续在步骤S13中根据匹配得到的所述分库分表规则M,对所述SQL语句:SQL n进行改写,实现对应用程序发送过来的所述SQL语句:SQL n进行拦截、解析,并通过解析后得到的抽象语法树实现对所述SQL语句:SQL n需要处理的目的数据库逻辑表进行分库分表规则的匹配。
接着本申请的上述实施例,所述步骤S12中的对所述SQL语句进行解析,得到所述SQL语句的抽象语法树,具体包括:
对所述SQL语句进行分片分析或路由分析,得到所述SQL语句的抽象语法树。当然,本申请中的对SQL语句进行解析的方法包括但不限于分片分析或路由分析,其他任何可以用于对SQL语句进行解析的方法均可以包含在本申请的保护范围内。
需要说明的是,数据库中的分片是一种水平切分相关的数据库架构,在应用程序级别进行实现,在数据库中进行分片分析不仅可以帮助促进水平扩展,还可以分散负载,允许更多的流量和更快的处理,还可以加速查询响应的时间,以及通过减少宕机的影响使应用程序更稳定可靠。对数据库中的SQL语句进行路由分析用于指示分析SQL语句中查找不同的节点,并在不同的节点分别执行SQL语句,以获得SQL与的路由表,该路由表用于指示查找到物理表存在于哪些节点中的,比如,在按照主键分库分表的情况下,主要通过分析SQL语句中的存在的表名和主键的键值在schema配置文件中通过算法查找的,并在找到节点后才去执行SQL语句,若没有主键范围,则路由到所有节点,从而实现对数据库中的SQL语句的路由分析。
本实施例中,为了便于更好地了解所述SQL语句:SQL n中的具体业务逻辑及节点与节点之间的关系的语法树,所述步骤S12还对拦截到的所述SQL语句:SQL n进行分片分析或路由分析,得到所述SQL语句:SQL n的抽象语法树,不仅实现对SQL语句的解析,还便于后续能够根据得到的所述SQL语句的抽象语法树为所述SQL语句需要处理的目的数据库逻辑表进行对应的分库分表规则的匹配。
接着本申请的上述实施例,本申请的一个方面的实施例提供的一种分库分表方法还包括:
预置用于分库分表的分库分表规则;
其中,所述步骤S13中的根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则,具体包括:
根据所述抽象语法树,从预置的所述分库分表规则中,对所述目的数据库逻辑表进行分库分表规则匹配,得到所述目的数据库逻辑表对应的目的分库分表规则。
需要说明的是,所述预置的用于分库分表的分库分表规则用于将逻辑表映射到物理表中,所述逻辑表为逻辑上存在的表,是虚拟的,所述物理表用于指示真实存在的表,在计算机中可以查看到,所述预置的分库分表规则包括但不限于表与数据库之间的映射关系、分表的数量、所述表的拆分规则及分库分表时所采用的分库分表算法等,以便通过所述映射关系能够了解到表被拆分后分别存储于具体哪些数据库中;此处,不同的分库分表规则对应进行表的拆分的数量也可以不同或相同。在实际分库分表过程中,在确定了分库分表规则后,可以根据确定的分库分表规则中的表的拆分规则将表拆分为符合所述分库分表规则中预置的分表的数量对应的分表,并按照表与数据库之间的映射关系将不同分表分别存储于对应的数据库中;当然,在对表进行分库分表时,还需要采用不同的分库分表算法,将数据库中的逻辑表分成多个物理表,所述分库分表算法包括但不限于哈希分表算法、自然月分表算法、日期分表算法及范围分表算法等,以便在分库分表过程中,能够根据不同的表对应采用合适的分库分表算法来对SQL语句中需要分库分表的表进行分库分表操作。
本实施例中,在创建所述golang中间件后,为了便于更好的对SQL语句需要处理的逻辑表进行对应的分库分表操作,还需要预置用于分库分表的分库分表规则,适用于不同场景中的逻辑表进行分库分表操作,便于后续能够从分库分表规则中为需要分库分表操作的逻辑表匹配对应的一分库分表规则。在本申请的分库分表的实际应用场景中,在步骤S12中基于golang中间件对拦截的所述SQL语句:SQL n进行解析得到所述SQL语句:SQL n的抽象语法树后,步骤S12继续根据解析后得到的所述SQL语句:SQL n的抽象语法树,从定义好的所述分库分表规则中,为所述目的数据库逻辑表匹配对应的分库分表规则,得到所述目的数据库逻辑表对应的目的分库分表规则M,实现基于定义好的分库分表规则为所述SQL语句:SQL n匹配对应的目的分库分表规则M,以便后续在步骤S13中能够基于匹配到的目的分库分表规则M对所述SQL语句:SQL n进行改写。
接着本申请的上述实施例,本申请还将所述分库分表规则存储于配置文件中,比如config.json配置文件中,不仅实现对定义好的分库分表规则的存储,还便于后续为SQL语句中需要处理的逻辑表匹配对应的分库分表规则时进行定义好的分库分表规则的调用。
接着本申请的上述实施例,所述步骤S13根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表,具体包括:
根据所述目的分库分表规则,对所述SQL语句进行改写得到所述改写后的SQL语句,并将所述SQL语句待处理的所述目的数据库逻辑表改写成对应的多个所述目的物理表。
例如,在步骤S12中为所述SQL语句待处理的目的数据库逻辑表匹配的分库分表规则为目的分库分表规则M,由于golang中间件拦截到的SQL语句:SQL n操作的是逻辑表,而数据存储的真实表为物理表,则所述步骤S13根据所述目的分库分表规则M,对所述SQL语句:SQL n进行改写得到所述改写后的SQL语句:SQL n’,以便后续能够根据改写后的SQL语句从物理表所属的真实的数据库中获取对应的数据;并将所述SQL语句:SQL n待处理的所述目的数据库逻辑表改写成对应的多个所述目的物理表,比如,将所述SQL语句:SQL n待处理的所述目的数据库逻辑表改写为对应的5个目的物理表,分别为:目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5,从而分析出所述SQL:SQL n的逻辑表对应的真实的数据分别存储于哪一个数据库下的哪一个物理表中,进一步实现对所述SQL:SQLn的改写。
接着本申请的上述实施例,所述步骤S15将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户,具体包括:
接收所述目的物理表所属的数据库返回的数据;
将所述数据库返回的数据进行汇聚,得到所述SQL语句对应的输出数据;
将所述SQL语句对应的输出数据发送给所述应用程序对应的用户。
例如,在步骤S14中将所述改写后的SQL语句:SQL n’分别发送给所述目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5各自所属的数据库,在各个目的物理表对应的数据库中,根据改写后的SQL语句:SQL n’查找到存在所述数据库中的目的物理表中的真实的数据并返回给所述golang中间件;在所述步骤S15中,接收各个所述目的物理表所属的数据库返回的真实的数据,比如,所述目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5各自所属的数据库返回的数据依序为:数据1、数据2、数据3、数据4及数据5,并将数据库返回的所有数据:数据1、数据2、数据3、数据4及数据5进行汇聚,得到所述SQL:SQL n的输出数据Data(输出)=数据1+数据2+数据3+数据4+数据5,最后将所述SQL语句:SQL n的输出数据Data(输出)=数据1+数据2+数据3+数据4+数据5发送给所述应用程序对应的用户,使得应用程序对应的用户能够获取到SQL语句在真实的数据库中查询到的数据,实现了基于golang中间件进行分库分表的操作的同时,还能够不影响原有业务逻辑和原有业务代码,进一步保证了业务系统的稳定性和可扩展性。
接着本申请的上述实施例,根据本申请的一个方面的实施例提供的一种分库分表方法中,所述方法还包括:
获取测试程序;在此,所述测试程序为单独开发的第三方应程序,用于确保本申请的通过golang中间件进行分库分表功能符合数据查预期。
启动所述测试程序测试原有业务流程和数据是否正确。
例如,在测试过程中,调用第三方开发的测试程序,通过所述测试程序测试所述SQL语句对应的原有业务流程和数据是否正确,以确保本申请通过创建的golang中间件进行分库分表功能满足原有业务流程和数据。
本实施例中,所述启动所述测试程序测试原有业务流程和数据是否正确,具体包括:
在测试过程中,启动所述测试程序,判断所述SQL语句按照所述原有业务流程执行后得到的原有数据,与将所述数据库返回的数据进行处理后得到的所述SQL语句对应的输出数据是否一致,若一致,则用于指示本申请通过golang中间件进行SQL语句对应的目的数据库逻辑表的分库分表的方法,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性;若不一致,则用于指示本申请通过golang中间件进行SQL语句对应的目的数据库逻辑表的分库分表的方法不能完全符合本申请的原有业务流程和数据。
在本申请一实际应用场景中,如图2所示,本申请提供的一种分库分表方法包括步骤S00、步骤S01、步骤S02、步骤S03、步骤S04、步骤S05及步骤S06,具体包括如下步骤:
步骤S00,构建基于golang的服务作为golang中间件。
步骤S01,定义用于分库分表的分库分表规则,其中,所述分库分表规则包括但不限于表与数据库之间的映射关系、分表的数量、所述表的拆分规则及分库分表时所采用的分库分表算法,所述分库分表算法包括但不限于哈希分表算法、自然月分表算法、日期分表算法及范围分表算法。
步骤S02,启动所述golang中间件拦截应用程序发送过来的SQL语句,对SQL语句进行解析,得到SQL语句的抽象语法树;
步骤S03,根据解析得到的所述SQL语句的抽象语法树,从定义好的所述分库分表规则中,获取所述SQL语句需要处理的操作表(即目的数据库逻辑表)对应的目的分库分表规则,实现为SQL语句需要处理的操作表匹配对应的目的分库分表规则。
步骤S04,根据匹配到的所述目的分库分表规则,改写所述SQL语句,实现将SQL语句里的目的数据库逻辑表改写多个目的物理表。
步骤S05,将所述改写后的SQL语句分别发往多个目的物理表分别所属的真实的数据库,以使所述数据库根据所述改写后的SQL语句查找到存在所述数据库内部的数据,并返回给所述golang中间件。
步骤S06,将各个所述数据库返回的数据进行汇聚处理后返回给所述应用程序对应的用户。
通过上述步骤S00至步骤S06,实现了通过创建的所述golang中间件进行分库分表,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性。
根据本申请的另一方面,如3所示,本申请一个方面的一种实施例还提供了一种用于分库分表的设备的结构示意图,该设备包括创建装置11、匹配装置12、改写装置13、发送装置14及处理装置15,其中,具体包括如下装置:
创建装置11,用于创建基于计算机编程语言golang的服务作为golang中间件;在此,所述golang是谷歌(Google)开发的一种静态强类型、编译型、并发型且并具有垃圾回收功能的编程语言;所述中间件可以用于指示可以在包装原始应用的同时,能够添加一些额外功能的应用;一个好的中间件有一个责任就是可插拔并且自足,也就是说可以在接口级别嵌入中间件就能直接运行,由于中间件不是框架,不会影响原有业务的编码方式,仅仅是请求处理里面的一层而已,同时也完全没必要重写原有业务的代码,若需要使用中间件的一个功能,直接插入至所需功能的接口处就行,若不需要使用中间件了,就可以直接移除。本申请通过创建装置11创建了基于golang的服务作为golang中间件,以便后续能够通过所述golang中间件在处理对分库分表的同时,不改变原有业务逻辑和不修改原有业务代码。
匹配装置12,用于启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,实现为SQL语句需要处理的目的数据库逻辑表匹配对应的分库分表规则。
改写装置13,用于根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表,实现了通过匹配的所述目的分库分表规则对所述SQL语句进行改写,以得到改写后的SQL语句及改写所述目的数据库逻辑表后得到的多个目的物理表。
发送装置14,用于将所述改写后的SQL语句发送至所述目的物理表所属的数据库,以便所述数据库根据所述改写后的SQL语句查找到所述数据库中的目的物理表中的真实数据并返回给所述golang中间件。
处理装置15,用于将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户,实现了分库分表的操作的同时,还不影响原有业务逻辑。
通过所述创建装置11、匹配装置12、改写装置13、发送装置14及处理装置15,基于创建的golang中间件,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性。
例如,在所述创建装置11中创建了golang中间件后,所述匹配装置12会启动所述golang中间件,拦截应用程序发送过来的SQL语句,比如SQL n,并对所述SQL语句:SQL n进行解析,以得到所述SQL语句:SQL n需要处理的目的数据库逻辑表(即SQL语句需要处理的目的表)对应的目的分库分表规则M;在所述改写装置13中,根据目的分库分表规则M对所述SQL语句:SQL n进行改写,得到改写后的SQL语句:SQL n’及与所述目的数据库逻辑表对应的多个目的物理表;在本申请一优选实施例中,若所述目的数据库逻辑表对应的目的物理表为5个,且分别为目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5,则所述发送装置14将所述改写后的SQL语句:SQL n’分别发送至所述目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5各自所属的数据库,以便在不同的数据库中,能够根据改写后的SQL语句:SQL n’查找到所述数据库中的目的物理表中的真实的数据并返回给所述golang中间件;在所述处理装置15中,将各个数据库返回的真实的数据进行处理后,得到所述SQL语句的输出数据,并将所述SQL语句的输出数据发送给所述应用程序对应的用户,实现了基于golang中间件进行分库分表的操作的同时,还能够不影响原有业务逻辑和原有业务代码,进一步保证了业务系统的稳定性和可扩展性。
接着本申请的上述实施例,所述匹配装置12具体用于:
启动所述golang中间件,拦截所述应用程序发送的所述SQL语句;
对所述SQL语句进行解析,得到所述SQL语句的抽象语法树;
根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则。
需要说明的是,所述SQL语句的抽象语法树是源代码语法结构的一种抽象表示,它以树状的形式表现编程语言的语法结构,树上的每个节点都表示源代码中的一种结构,且不会表示出真实语法中出现的每个细节,比如,嵌套括号被隐含在树的结构中,并没有以节点的形式呈现,而类似于if-condition-then这样的条件跳转语句,可以使用带有两个分支的节点来表示等。
例如,在所述匹配装置12中,先启动所述golang中间件,拦截应用程序发送过来的SQL语句:SQL n;之后对所述SQL语句:SQL n进行解析,得到所述SQL语句:SQL n的抽象语法树;然后根据所述SQL语句:SQL n的抽象语法树,获取所述SQL语句:SQL n需要处理的目的数据库逻辑表对应的目的分库分表规则M,以便后续在所述改写装置13中根据匹配得到的所述分库分表规则M,对所述SQL语句:SQL n进行改写,实现对应用程序发送过来的所述SQL语句:SQL n进行拦截、解析,并通过解析后得到的抽象语法树实现对所述SQL语句:SQL n需要处理的目的数据库逻辑表进行分库分表规则的匹配。
接着本申请的上述实施例,所述匹配装置12具体用于:
对所述SQL语句进行分片分析或路由分析,得到所述SQL语句的抽象语法树。当然,本申请中的对SQL语句进行解析的方法包括但不限于分片分析或路由分析,其他任何可以用于对SQL语句进行解析的方法均可以包含在本申请的保护范围内。
需要说明的是,数据库中的分片是一种水平切分相关的数据库架构,在应用程序级别进行实现,在数据库中进行分片分析不仅可以帮助促进水平扩展,还可以分散负载,允许更多的流量和更快的处理,还可以加速查询响应的时间,以及通过减少宕机的影响使应用程序更稳定可靠。对数据库中的SQL语句进行路由分析用于指示分析SQL语句中查找不同的节点,并在不同的节点分别执行SQL语句,以获得SQL与的路由表,该路由表用于指示查找到物理表存在于哪些节点中的,比如,在按照主键分库分表的情况下,主要通过分析SQL语句中的存在的表名和主键的键值在schema配置文件中通过算法查找的,并在找到节点后才去执行SQL语句,若没有主键范围,则路由到所有节点,从而实现对数据库中的SQL语句的路由分析。
本实施例中,为了便于更好地了解所述SQL语句:SQL n中的具体业务逻辑及节点与节点之间的关系的语法树,所述匹配装置12还对拦截到的所述SQL语句:SQL n进行分片分析或路由分析,得到所述SQL语句:SQL n的抽象语法树,不仅实现对SQL语句的解析,还便于后续能够根据得到的所述SQL语句的抽象语法树为所述SQL语句需要处理的目的数据库逻辑表进行对应的分库分表规则的匹配。
接着本申请的上述实施例,本申请的一个方面的实施例提供的一种用于分库分表的设备还包括:规则预置装置,其中,所述规则预置装置用于:预置用于分库分表的分库分表规则;
其中,所述改写装置13具体用于:
根据所述抽象语法树,从预置的所述分库分表规则中,对所述目的数据库逻辑表进行分库分表规则匹配,得到所述目的数据库逻辑表对应的目的分库分表规则。
需要说明的是,所述预置的用于分库分表的分库分表规则用于将逻辑表映射到物理表中,所述逻辑表为逻辑上存在的表,是虚拟的,所述物理表用于指示真实存在的表,在计算机中可以查看到,所述预置的分库分表规则包括但不限于表与数据库之间的映射关系、分表的数量、所述表的拆分规则及分库分表时所采用的分库分表算法等,以便通过所述映射关系能够了解到表被拆分后分别存储于具体哪些数据库中;此处,不同的分库分表规则对应进行表的拆分的数量也可以不同或相同。在实际分库分表过程中,在确定了分库分表规则后,可以根据确定的分库分表规则中的表的拆分规则将表拆分为符合所述分库分表规则中预置的分表的数量对应的分表,并按照表与数据库之间的映射关系将不同分表分别存储于对应的数据库中;当然,在对表进行分库分表时,还需要采用不同的分库分表算法,将数据库中的逻辑表分成多个物理表,所述分库分表算法包括但不限于哈希分表算法、自然月分表算法、日期分表算法及范围分表算法等,以便在分库分表过程中,能够根据不同的表对应采用合适的分库分表算法来对SQL语句中需要分库分表的表进行分库分表操作。
本实施例中,在创建所述golang中间件后,为了便于更好的对SQL语句需要处理的逻辑表进行对应的分库分表操作,还需要预置用于分库分表的分库分表规则,适用于不同场景中的逻辑表进行分库分表操作,便于后续能够从分库分表规则中为需要分库分表操作的逻辑表匹配对应的一分库分表规则。在本申请的分库分表的实际应用场景中,在匹配装置12中基于golang中间件对拦截的所述SQL语句:SQL n进行解析得到所述SQL语句:SQL n的抽象语法树后,匹配装置12继续根据解析后得到的所述SQL语句:SQL n的抽象语法树,从定义好的所述分库分表规则中,为所述目的数据库逻辑表匹配对应的分库分表规则,得到所述目的数据库逻辑表对应的目的分库分表规则M,实现基于定义好的分库分表规则为所述SQL语句:SQL n匹配对应的目的分库分表规则M,以便后续在改写装置13中能够基于匹配到的目的分库分表规则M对所述SQL语句:SQL n进行改写。
接着本申请的上述实施例,本申请还将所述分库分表规则存储于配置文件中,比如config.json配置文件中,不仅实现对定义好的分库分表规则的存储,还便于后续为SQL语句中需要处理的逻辑表匹配对应的分库分表规则时进行定义好的分库分表规则的调用。
接着本申请的上述实施例,所述改写装置13具体用于:
根据所述目的分库分表规则,对所述SQL语句进行改写得到所述改写后的SQL语句,并将所述SQL语句待处理的所述目的数据库逻辑表改写成对应的多个所述目的物理表。
例如,在匹配装置12中为所述SQL语句待处理的目的数据库逻辑表匹配的分库分表规则为目的分库分表规则M,由于golang中间件拦截到的SQL语句:SQL n操作的是逻辑表,而数据存储的真实表为物理表,则所述改写装置13根据所述目的分库分表规则M,对所述SQL语句:SQL n进行改写得到所述改写后的SQL语句:SQL n’,以便后续能够根据改写后的SQL语句从物理表所属的真实的数据库中获取对应的数据;并将所述SQL语句:SQL n待处理的所述目的数据库逻辑表改写成对应的多个所述目的物理表,比如,将所述SQL语句:SQLn待处理的所述目的数据库逻辑表改写为对应的5个目的物理表,分别为:目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5,从而分析出所述SQL:SQL n的逻辑表对应的真实的数据分别存储于哪一个数据库下的哪一个物理表中,进一步实现对所述SQL:SQL n的改写。
接着本申请的上述实施例,所述处理装置15具体用于:
接收所述目的物理表所属的数据库返回的数据;
将所述数据库返回的数据进行汇聚,得到所述SQL语句对应的输出数据;
将所述SQL语句对应的输出数据发送给所述应用程序对应的用户。
例如,在发送装置14中将所述改写后的SQL语句:SQL n’分别发送给所述目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5各自所属的数据库,在各个目的物理表对应的数据库中,根据改写后的SQL语句:SQL n’查找到存在所述数据库中的目的物理表中的真实的数据并返回给所述golang中间件;在所述处理装置15中,接收各个所述目的物理表所属的数据库返回的真实的数据,比如,所述目的物理表1、目的物理表2、目的物理表3、目的物理表4及目的物理表5各自所属的数据库返回的数据依序为:数据1、数据2、数据3、数据4及数据5,并将数据库返回的所有数据:数据1、数据2、数据3、数据4及数据5进行汇聚,得到所述SQL:SQL n的输出数据Data(输出)=数据1+数据2+数据3+数据4+数据5,最后将所述SQL语句:SQL n的输出数据Data(输出)=数据1+数据2+数据3+数据4+数据5发送给所述应用程序对应的用户,使得应用程序对应的用户能够获取到SQL语句在真实的数据库中查询到的数据,实现了基于golang中间件进行分库分表的操作的同时,还能够不影响原有业务逻辑和原有业务代码,进一步保证了业务系统的稳定性和可扩展性。
接着本申请的上述实施例,根据本申请的一个方面的实施例提供的一种用于分库分表的设备中,所述设备还包括:测试装置,其中,所述测试装置用于:
获取测试程序;在此,所述测试程序为单独开发的第三方应程序,用于确保本申请的通过golang中间件进行分库分表功能符合数据查预期。
启动所述测试程序测试原有业务流程和数据是否正确。
例如,在测试过程中,调用第三方开发的测试程序,通过所述测试程序测试所述SQL语句对应的原有业务流程和数据是否正确,以确保本申请通过创建的golang中间件进行分库分表功能满足原有业务流程和数据。
本实施例中,所述测试装置具体用于:
在测试过程中,启动所述测试程序,判断所述SQL语句按照所述原有业务流程执行后得到的原有数据,与将所述数据库返回的数据进行处理后得到的所述SQL语句对应的输出数据是否一致,若一致,则用于指示本申请通过golang中间件进行SQL语句对应的目的数据库逻辑表的分库分表的方法,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性;若不一致,则用于指示本申请通过golang中间件进行SQL语句对应的目的数据库逻辑表的分库分表的方法不能完全符合本申请的原有业务流程和数据。
综上所述,在本申请中,通过首先创建基于计算机编程语言golang的服务作为golang中间件;之后启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,并根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表,实现将SQL语句需要处理的目的数据库逻辑表分为多个目的物理表;然后将所述改写后的SQL语句发送至所述目的物理表所属的数据库,以使所述数据库根据所述改写后的SQL语句查找到所述数据库中的目的物理表中的真实数据并返回给所述golang中间件;最后将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户,使得通过创建的所述golang中间件,能够在不改变原有业务逻辑和不修改原有业务代码的情况下完成分库分表,进一步保证了业务系统的稳定性和可扩展性。
以上详细描述了本申请的较佳具体实施例。应当理解,本领域的普通技术无需创造性劳动就可以根据本申请的构思作出诸多修改和变化。因此,凡本技术领域中技术人员依本申请的构思在现有技术的基础上通过逻辑分析、推理或者有限的实验可以得到的技术方案,皆应在由权利要求书所确定的保护范围内。
Claims (15)
1.一种分库分表方法,其特征在于,所述方法包括:
创建基于计算机编程语言golang的服务作为golang中间件;
启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则;
根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表;
将所述改写后的SQL语句发送至所述目的物理表所属的数据库;
将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户。
2.如权利要求1所述的方法,其特征在于,所述启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则,包括:
启动所述golang中间件,拦截所述应用程序发送的所述SQL语句;
对所述SQL语句进行解析,得到所述SQL语句的抽象语法树;
根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则。
3.如权利要求2所述的方法,其特征在于,所述对所述SQL语句进行解析,得到所述SQL语句的抽象语法,包括:
对所述SQL语句进行分片分析或路由分析,得到所述SQL语句的抽象语法树。
4.如权利要求2所述的方法,其特征在于,所述方法还包括:
预置用于分库分表的分库分表规则;
其中,所述根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则,包括:
根据所述抽象语法树,从预置的所述分库分表规则中,对所述目的数据库逻辑表进行分库分表规则匹配,得到所述目的数据库逻辑表对应的目的分库分表规则。
5.如权利要求4所述的方法,其特征在于,所述分库分表规则包括表与数据库之间的映射关系、分表的数量、所述表的拆分规则及分库分表时所采用的分库分表算法。
6.如权利要求5所述的方法,其特征在于,所述分库分表算法包括以下任一项:
哈希分表算法、自然月分表算法、日期分表算法及范围分表算法。
7.如权利要求4所述的方法,其特征在于,所述分库分表规则存储于配置文件中。
8.如权利要求1所述的方法,其特征在于,所述根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表,包括:
根据所述目的分库分表规则,对所述SQL语句进行改写得到所述改写后的SQL语句,并将所述SQL语句待处理的所述目的数据库逻辑表改写成对应的多个所述目的物理表。
9.如权利要求1所述的方法,其特征在于,所述将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户,包括:
接收所述目的物理表所属的数据库返回的数据;
将所述数据库返回的数据进行汇聚,得到所述SQL语句对应的输出数据;
将所述SQL语句对应的输出数据发送给所述应用程序对应的用户。
10.如权利要求1至9中任一项所述的方法,其特征在于,所述方法还包括:
获取测试程序;
启动所述测试程序测试原有业务流程和数据是否正确。
11.如权利要求10所述的方法,其特征在于,所述启动所述测试程序测试原有业务流程和数据是否正确,包括:
启动所述测试程序,判断所述SQL语句按照所述原有业务流程执行后得到的原有数据,与将所述数据库返回的数据进行处理后得到的所述SQL语句对应的输出数据是否一致。
12.一种用于分库分表的设备,其特征在于,所述设备包括:
创建装置,用于创建基于计算机编程语言golang的服务作为golang中间件;
匹配装置,用于启动所述golang中间件,拦截并解析应用程序发送的SQL语句,以获取所述SQL语句待处理的目的数据库逻辑表对应的目的分库分表规则;
改写装置,用于根据所述目的分库分表规则改写所述SQL语句,得到改写后的SQL语句及对应的多个目的物理表;
发送装置,用于将所述改写后的SQL语句发送至所述目的物理表所属的数据库;
处理装置,用于将所述数据库返回的数据进行处理后,发送给所述应用程序对应的用户。
13.如权利要求12所述的设备,其特征在于,所述匹配装置用于:
启动所述golang中间件,拦截所述应用程序发送的所述SQL语句;
对所述SQL语句进行解析,得到所述SQL语句的抽象语法树;
根据所述抽象语法树,获取所述SQL语句待处理的所述目的数据库逻辑表对应的目的分库分表规则。
14.如权利要求13所述的设备,其特征在于,所述设备还包括规则预置装置,其中,所述规则预置装置用于:预置用于分库分表的分库分表规则;
其中,所述匹配装置用于:
根据所述抽象语法树,从预置的所述分库分表规则中,对所述目的数据库逻辑表进行分库分表规则匹配,得到所述目的数据库逻辑表对应的目的分库分表规则。
15.如权利要求12至14中任一项所述的设备,其特征在于,所述设备还包括测试装置,其中,所述测试装置用于:
获取测试程序;
启动所述测试程序测试原有业务流程和数据是否正确。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911425873.6A CN111209280A (zh) | 2019-12-31 | 2019-12-31 | 一种分库分表方法及设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201911425873.6A CN111209280A (zh) | 2019-12-31 | 2019-12-31 | 一种分库分表方法及设备 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN111209280A true CN111209280A (zh) | 2020-05-29 |
Family
ID=70787525
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201911425873.6A Pending CN111209280A (zh) | 2019-12-31 | 2019-12-31 | 一种分库分表方法及设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111209280A (zh) |
Cited By (9)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897813A (zh) * | 2020-07-08 | 2020-11-06 | 苏宁金融科技(南京)有限公司 | 针对数据库资源的流控方法及装置 |
CN112131245A (zh) * | 2020-09-23 | 2020-12-25 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 拟态防御架构的高性能数据访问系统及方法 |
CN112148710A (zh) * | 2020-09-21 | 2020-12-29 | 珠海市卓轩科技有限公司 | 微服务分库方法、系统和介质 |
CN112363994A (zh) * | 2020-10-27 | 2021-02-12 | 杭州大搜车汽车服务有限公司 | 数据库的处理方法、装置、电子装置和存储介质 |
CN112860691A (zh) * | 2021-01-28 | 2021-05-28 | 北京北信源软件股份有限公司 | 分库分表的方法、装置、电子设备及存储介质 |
CN113810466A (zh) * | 2021-08-12 | 2021-12-17 | 北京科东电力控制系统有限责任公司 | 用于多源异构数据的中间件、应用该中间件的系统和方法 |
CN114238322A (zh) * | 2021-12-10 | 2022-03-25 | 安徽兆尹信息科技股份有限公司 | 一种基于Sharding-JDBC内核的数据库分库分表插入方法 |
CN116414840A (zh) * | 2023-05-30 | 2023-07-11 | 深圳市华曦达科技股份有限公司 | 基于MySQL数据库分库分表策略中间件的处理方法和装置 |
CN116821235A (zh) * | 2023-03-19 | 2023-09-29 | 广州睿本信息科技有限公司 | 一种分布式数据库的分库分表路由策略的查询重写方法 |
Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105930387A (zh) * | 2016-04-14 | 2016-09-07 | 北京思特奇信息技术股份有限公司 | 一种基于数据路由、分库分表的数据操作系统及方法 |
CN107423387A (zh) * | 2017-07-19 | 2017-12-01 | 北京北信源软件股份有限公司 | 一种基于中间件的分库分表的方法与装置 |
CN109697068A (zh) * | 2017-10-24 | 2019-04-30 | 中移(苏州)软件技术有限公司 | 一种分库分表模式下逻辑sql语句翻译方法和装置 |
-
2019
- 2019-12-31 CN CN201911425873.6A patent/CN111209280A/zh active Pending
Patent Citations (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105930387A (zh) * | 2016-04-14 | 2016-09-07 | 北京思特奇信息技术股份有限公司 | 一种基于数据路由、分库分表的数据操作系统及方法 |
CN107423387A (zh) * | 2017-07-19 | 2017-12-01 | 北京北信源软件股份有限公司 | 一种基于中间件的分库分表的方法与装置 |
CN109697068A (zh) * | 2017-10-24 | 2019-04-30 | 中移(苏州)软件技术有限公司 | 一种分库分表模式下逻辑sql语句翻译方法和装置 |
Cited By (14)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN111897813A (zh) * | 2020-07-08 | 2020-11-06 | 苏宁金融科技(南京)有限公司 | 针对数据库资源的流控方法及装置 |
CN111897813B (zh) * | 2020-07-08 | 2022-09-23 | 苏宁金融科技(南京)有限公司 | 针对数据库资源的流控方法及装置 |
CN112148710B (zh) * | 2020-09-21 | 2023-11-14 | 珠海市卓轩科技有限公司 | 微服务分库方法、系统和介质 |
CN112148710A (zh) * | 2020-09-21 | 2020-12-29 | 珠海市卓轩科技有限公司 | 微服务分库方法、系统和介质 |
CN112131245A (zh) * | 2020-09-23 | 2020-12-25 | 华东计算技术研究所(中国电子科技集团公司第三十二研究所) | 拟态防御架构的高性能数据访问系统及方法 |
CN112363994A (zh) * | 2020-10-27 | 2021-02-12 | 杭州大搜车汽车服务有限公司 | 数据库的处理方法、装置、电子装置和存储介质 |
CN112860691A (zh) * | 2021-01-28 | 2021-05-28 | 北京北信源软件股份有限公司 | 分库分表的方法、装置、电子设备及存储介质 |
CN113810466A (zh) * | 2021-08-12 | 2021-12-17 | 北京科东电力控制系统有限责任公司 | 用于多源异构数据的中间件、应用该中间件的系统和方法 |
CN113810466B (zh) * | 2021-08-12 | 2024-04-09 | 北京科东电力控制系统有限责任公司 | 用于多源异构数据的中间件、应用该中间件的系统和方法 |
CN114238322A (zh) * | 2021-12-10 | 2022-03-25 | 安徽兆尹信息科技股份有限公司 | 一种基于Sharding-JDBC内核的数据库分库分表插入方法 |
CN114238322B (zh) * | 2021-12-10 | 2024-04-12 | 安徽兆尹信息科技股份有限公司 | 一种基于Sharding-JDBC内核的数据库分库分表插入方法 |
CN116821235A (zh) * | 2023-03-19 | 2023-09-29 | 广州睿本信息科技有限公司 | 一种分布式数据库的分库分表路由策略的查询重写方法 |
CN116821235B (zh) * | 2023-03-19 | 2023-12-22 | 广州睿本信息科技有限公司 | 一种分布式数据库的分库分表路由策略的查询重写方法 |
CN116414840A (zh) * | 2023-05-30 | 2023-07-11 | 深圳市华曦达科技股份有限公司 | 基于MySQL数据库分库分表策略中间件的处理方法和装置 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111209280A (zh) | 一种分库分表方法及设备 | |
US11068439B2 (en) | Unsupervised method for enriching RDF data sources from denormalized data | |
US10073876B2 (en) | Bloom filter index for device discovery | |
US11481440B2 (en) | System and method for processing metadata to determine an object sequence | |
CN110083627B (zh) | 数据处理方法、系统、计算机设备和存储介质 | |
CN111930770A (zh) | 数据查询方法、装置及电子设备 | |
CN111221840A (zh) | 数据处理方法及装置、数据缓存方法、存储介质、系统 | |
CN112363994A (zh) | 数据库的处理方法、装置、电子装置和存储介质 | |
US20100070460A1 (en) | System and method for rule-based data object matching | |
EP3107010B1 (en) | Data integration pipeline | |
US10303791B2 (en) | Efficient join on dynamically compressed inner for improved fit into cache hierarchy | |
CN113239047A (zh) | 一种分库配置方法、业务处理方法、装置及设备 | |
US20160378801A1 (en) | Efficient sorting of large data set with duplicate values | |
US10540157B2 (en) | Systems to remove object relational mappings from a software project | |
US11847121B2 (en) | Compound predicate query statement transformation | |
CN115357606A (zh) | 数据源查询方法、系统、计算机设备和存储介质 | |
CN112667632A (zh) | 一种元数据处理方法及装置 | |
CN111858616A (zh) | 流式数据存储方法及装置 | |
CN112148739A (zh) | 独立于加密数据库的密文索引方法及系统 | |
KR100716169B1 (ko) | 네트워크 관리 시스템에서의 메시지 처리 장치 및 방법 | |
CN112395306A (zh) | 数据库系统、数据处理方法、装置及计算机存储介质 | |
Gorskis et al. | Storing an OWL 2 ontology in a relational database structure | |
CN114817315B (zh) | 数据处理方法以及系统 | |
CN113114493B (zh) | 一种网元配置约束检查方法及系统 | |
US11941379B1 (en) | Accelerating static program analysis with artifact reuse |
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 |