分布式JDBC实现方法、设备及计算机可读存储介质与流程

文档序号:25362719发布日期:2021-06-08 15:49阅读:126来源:国知局
分布式JDBC实现方法、设备及计算机可读存储介质与流程
分布式jdbc实现方法、设备及计算机可读存储介质
技术领域
1.本发明涉及计算机技术领域,尤其涉及一种分布式jdbc实现方法、设备及计算机可读存储介质。


背景技术:

2.目前原生的jdbc实现方式首先是创建连接,其次准备要执行的留空输入参数的sql语句,然后给该sql语句赋值参数,最后执行该sql语句。原生的jdbc实现中,数据库连接在创建后就已经固定,难以对分布式数据库场景进行灵活处理。


技术实现要素:

3.本发明实施例提供一种分布式jdbc实现方法、设备及计算机可读存储介质,用以解决现有技术中原生的jdbc实现中,数据库连接在创建后就已经固定,难以对分布式数据库场景进行灵活处理的问题。
4.根据本发明实施例的分布式jdbc实现方法,包括:
5.当接收到获取数据库连接的请求时,从第一配置文件中获取各个分布式数据库节点的地址并进行储存;
6.当接收到调用执行sql语句的请求时,从第二配置文件中获取sql语句模板,并基于sql语句模板中设置的分片键,连接对应的分布式数据库节点。
7.根据本发明的一些实施例,所述从第一配置文件中获取各个分布式数据库节点的地址储存起来,包括:
8.从第一配置文件中获取各个分布式数据库节点的地址,并存储至第一数组;
9.设置第一数据结构,所述第一数据结构包括数据库连接属性位、连接的地址位、以及连接状态位;
10.从所述第一数组中获取各个分布式数据库节点的地址,并存入所述第一数据结构的连接的地址位,并对应设置连接状态位以及数据库连接属性位。
11.根据本发明的一些实施例,所述从第二配置文件中获取sql语句模板,包括:
12.设置第二数据结构,所述第二数据结构包括sql语句位、是否有效判定位、以及参数信息位;
13.将从第二配置文件中获取的sql语句模板存放至所述第二数据结构的sql语句位,并对应设置是否有效判定位。
14.根据本发明的一些实施例,所述基于sql语句模板中设置的分片键,连接对应的分布式数据库节点,包括:
15.基于sql语句模板中设置的分片键,确定对应的分布式数据库节点;
16.获取对应的分布式数据库节点的连接状态,若为否,根据对应的分布式数据库节点的地址进行连接。
17.根据本发明的一些实施例,所述方法,还包括:
18.在连接对应的分布式数据库节点后,将第三数据结构存放至所述参数信息位,所述第三数据结构包括参数值位、参数类型位、参数在语句中的位置位。
19.根据本发明实施例的分布式jdbc实现设备,包括:存储器、处理器及存储在所述存储器上并可在所述处理器上运行的计算机程序,所述计算机程序被所述处理器执行时实现如上所述的分布式jdbc实现方法的步骤。
20.根据本发明实施例的计算机可读存储介质,所述计算机可读存储介质上存储有信息传递的实现程序,所述程序被处理器执行时实现如上所述的分布式jdbc实现方法的步骤。
21.采用本发明实施例,可以解决原生jdbc不便于处理分布式数据库场景的问题,降低了应用程序获取分布式数据库节点连接时的复杂度,降低了应用程序开发维护的成本。
22.上述说明仅是本发明技术方案的概述,为了能够更清楚了解本发明的技术手段,而可依照说明书的内容予以实施,并且为了让本发明的上述和其它目的、特征和优点能够更明显易懂,以下特举本发明的具体实施方式。
附图说明
23.通过阅读下文实施方式的详细描述,各种其他的优点和益处对于本领域普通技术人员将变得清楚明了。附图仅用于示出优选实施方式的目的,而并不认为是对本发明的限制。在附图中:
24.图1是本发明实施例中分布式jdbc实现方法流程图;
25.图2是本发明实施例中分布式jdbc实现方法流程图;
26.图3是本发明实施例中分布式jdbc实现设备框图。
具体实施方式
27.下面将参照附图更详细地描述本发明的示例性实施例。虽然附图中显示了本发明的示例性实施例,然而应当理解,可以以各种形式实现本发明而不应被这里阐述的实施例所限制。相反,提供这些实施例是为了能够更透彻地理解本发明,并且能够将本发明的范围完整的传达给本领域的技术人员。
28.原生jdbc的实现方式无法对分布式场景的各个数据库节点进行sql语句的自动分发。分布式数据库场景下往往需要将应用程序中的sql语句发送到某个指定的数据库节点执行。而原生的jdbc实现存在无法进行灵活调整连接的缺点,且无法应对分布式数据库场景中常见的数据分片、分布式事务等问题。以上缺点如果在应用程序中通过人工进行编写代码处理,操作会很繁琐并导致误码率增高,同时编码过程非常耗时、效率低下,极大的增加了应用程序开发维护成本。
29.基于此,本发明第一方面实施例提出一种分布式jdbc实现方法,如图1所示,包括:
30.s1,当接收到获取数据库连接的请求时,从第一配置文件中获取各个分布式数据库节点的地址并进行储存;
31.s2,当接收到调用执行sql语句的请求时,从第二配置文件中获取sql语句模板,并基于sql语句模板中设置的分片键,连接对应的分布式数据库节点。
32.采用本发明实施例,仅需要通过在配置文件中配置的数据库节点数量和各个节点
的连接地址,以及sql语句的模板,就可以通过模板中配置的partitionkey(分片键)进行数学运算并获取相应连接。以此实现对分布式数据库场景的各个节点进行自动分发。用户无需根据sql进行手动的分配数据库连接,因此可以极大降低分布式数据库应用程序开发者的开发复杂度。
33.在上述实施例的基础上,进一步提出各变型实施例,在此需要说明的是,为了使描述简要,在各变型实施例中仅描述与上述实施例的不同之处。
34.根据本发明的一些实施例,所述从第一配置文件中获取各个分布式数据库节点的地址储存起来,包括:
35.从第一配置文件中获取各个分布式数据库节点的地址,并存储至第一数组;
36.设置第一数据结构,所述第一数据结构包括数据库连接属性位、连接的地址位、以及连接状态位;
37.从所述第一数组中获取各个分布式数据库节点的地址,并存入所述第一数据结构的连接的地址位,并对应设置连接状态位以及数据库连接属性位。
38.根据本发明的一些实施例,所述从第二配置文件中获取sql语句模板,包括:
39.设置第二数据结构,所述第二数据结构包括sql语句位、是否有效判定位、以及参数信息位;
40.将从第二配置文件中获取的sql语句模板存放至所述第二数据结构的sql语句位,并对应设置是否有效判定位。
41.根据本发明的一些实施例,所述基于sql语句模板中设置的分片键,连接对应的分布式数据库节点,包括:
42.基于sql语句模板中设置的分片键,确定对应的分布式数据库节点;
43.获取对应的分布式数据库节点的连接状态,若为否,根据对应的分布式数据库节点的地址进行连接。
44.根据本发明的一些实施例,所述方法,还包括:
45.在连接对应的分布式数据库节点后,将第三数据结构存放至所述参数信息位,所述第三数据结构包括参数值位、参数类型位、参数在语句中的位置位。
46.下面以一个具体的实施例详细描述根据本发明实施例的分布式jdbc实现方法。值得理解的是,下述描述仅是示例性说明,而不是对本发明的具体限制。凡是采用本发明的相似结构及其相似变化,均应列入本发明的保护范围。
47.本发明实施例的分布式jdbc方法是基于在原生的java jdbc外围封装一层代码,通过修改程序接口来实现sql语句的分布式分发。如图2所示,在该方法中,当客户端执行获取数据库连接的方法时,并不会建立真正的数据库连接,而是通过读取存放数据库节点连接地址的配置文件来将各个分布式数据库节点的地址储存起来。当客户端调用执行sql语句的方法时,程序会通过sql语句模板配置文件获取当前sql语句模板的partitionkey(分片键)并做相应的数学计算来区分当前应该获得的是哪一个数据库节点的连接。因此当用户在调用执行sql语句的方法时,才会根据获得的数据库节点的连接地址,建立真正的连接。
48.1.1.通过驱动管理服务获取连接信息。
49.此方法里主要包括建立以下三种数据结构:
50.(1)一个存放数据库连接信息的数据结构,主要保存数据库连接、连接的url地址、连接状态;
51.(2)一个存放sql语句的数据结构,主要保存sql语句模板、是否有效、参数信息;
52.(3)一个存放参数信息的数据结构,主要保存参数值、参数类型、参数在语句中的位置;
53.建立上述数据结构中的数据库节点连接地址从固定的配置文件中获得。连接状态都是“否”。此方法并不做实际的连接。
54.1.2.数据库连接类。
55.数据库连接类里主要包括了一个存放连接信息的数组,一个用来存放数据库节点连接地址的数组:
56.存放连接信息的数组的长度是分布式数据库的节点数加1。该数组用于记录数据库连接信息。数组的第0个单元用来存放协调节点的连接信息,其它单元用来存放数据节点的连接信息,连接信息包括数据库节点的连接地址和连接状态。
57.存放数据库节点连接地址的数组用来保存读取到的配置文件里配置的数据库节点连接地址。
58.配置文件内容如下:
59.part_num=2
60.part_0=jdbc:xxxxxx://xxx.xxx.xxx.xxx:xxxx/dbname?user=xxxx&password=xx xx
61.part_1=jdbc:xxxxxx://xxx.xxx.xxx.xxx:xxxx/dbname?user=xxxx&password=xx xx
62.part_2=......
63.程序一开始会读取上述配置文件内容,将数据库节点的连接地址以数组形式保存起来,在创建存放连接信息的数组时会将数组中的地址取出来赋值给连接信息中的url地址的对象。
64.1.2.1.准备sql语句。
65.在准备sql语句方法中,由于此时还未能确定连接的服务器,也还没有获取连接,所以不能真正执行sql语句。此时,会先创建一个对象用来储存当前的sql语句信息。将sql语句信息放入特定的结构中,并标记为“有效”以表示目前有一个sql语句需要准备。
66.1.2.2.获取当前连接。
67.此方法是根据代码中preparedstatement/statement执行sql语句时方法传来的partitionkey(分片键)来确定使用哪个数据库节点的连接,主要功能如下:
68.如果当前连接没有建过真正的连接,就建立原生的jdbc的连接,然后将此连接的连接状态设置为“是”并使用
69.如果当前连接已经建立,当前连接没有处于任何事务中,并且自动提交是“否”,使用此连接
70.用分布式事务的相关接口来控制事务。
71.当连接为自动提交状态时,需要释放连接的分布式事务的相关资源。
72.1.2.3事务提交。
73.应用端调用事务的提交方法时,其实是遍历数据库节点连接数组里所有的连接,如果是单节点,不需要两阶段提交,只需调用分布式事务接口的事务结束操作后,再调用事务提交方法;如果是跨节点的,需要两阶段提交,需要先调用分布式事务接口的事务结束和准备后,然后再调用提交方法。
74.1.2.4事务回滚。
75.应用端调用事务回滚方法时,其实是遍历数据库节点连接数组里所有的连接,回滚不需要两阶段提交,只需调用分布式事务接口的事务结束操作后,再调用原生的jdbc的事务回滚接口即可.
76.1.2.5关闭连接。
77.应用端调用关闭连接方法时,其实是遍历历数据库节点连接数组里所有的连接,对所有连接状态为“是”的连接做关闭操作。
78.1.3.准备好的sql语句模板。
79.此类里主要包括了连接信息,用来储存建立的连接和创建的sql语句模板之间的对应关系。
80.1.3.1.为准备好的sql语句模板赋参数,以形成完整的sql语句。
81.运行该方法时,是针对准备好的sql语句模板赋参数。根据特定数据结构中包含的信息,可以找到对应的保存参数的数据结构。此时,将参数的位置与参数值,以及参数类型存入保存参数的数据结构中
82.1.3.2.执行sql语句。
83.在sql语句执行时,认为用户希望这条sql语句针对数据节点运行,此时首先会根据传入的partitionkey(分片键)计算出所对应的服务器号x(1到分区数),看数组的第x个单元,它的连接状态是否为“否”,如果为“否”,则根据其地址建立连接。并将连接状态置为“是”。不管是哪个单元,如果它的连接状态是“是”,则说明已经建立连接,直接用该连接。接下来根据sql语句数据结构信息去找参数信息,将参数数据结构中的每项参数赋值给sql语句模板。然后通过真正的jdbc连接创建真正的sql语句。完成后,需要将存放sql语句信息数据结构里的参数信息清空。最后运行原生jdbc的执行方法。
84.1.3.3.执行不带partitionkey(分片键)的sql语句。
85.在调用不带partitionkey(分片键)的sql语句时,认为用户希望这条sql语句针对协调节点运行,此时看数组的第0个单元,它的连接状态是否为“否”,如果为“否”,则根据其连接地址建立连接。
86.然后根据sql语句数据结构信息去找参数信息,通过真正的jdbc连接创建真正的sql语句。完成后,需要将存放sql语句信息数据结构里的参数信息清空。最后运行原生jdbc的执行方法。
87.1.4配置文件。
88.本方案需要用到两个配置文件。第一个为记录分片信息(分片数和分片连接地址)的文件,另一个为记录sql语句模板的配置文件。
89.1.4.1分片信息配置文件。
90.该配置文件中包含分片的数量和各分片地址的连接信息。程序会读取这部分信息。分片的数量用于确定数组的长度。分片地址会保存起来供创建连接信息数组的时候使
用。
91.1.4.2sql语句模板配置文件。
92.该配置文件中包含了用户会使用到的sql语句的模板。用户需要配置这些sql语句模板并指定相应的partitionkey(分片键)在sql语句中的位置和数据类型。程序会根据配置文件自动获取partitionkey(分片键)并对其进行计算。计算结果将用来获取分片连接。
93.采用本发明实施例,用户在调用获取连接的方法时,本方案会将配置文件中设置好的数据库节点的连接信息储存到特定的数据结构中。此方法并不做实际的连接。
94.用户在为sql语句赋值参数时,是针对准备好的sql语句赋参数。会将参数信息保存到特定的对象中。
95.用户在调用执行sql语句的方法时,会针对partitionkey(分片键)进行数学运算。根据计算结果取得相应的连接地址并建立真正的连接。
96.本方案仅需要通过在配置文件中配置的数据库节点数量和各个节点的连接地址,以及sql语句的模板,就可以通过模板中配置的partitionkey(分片键)进行数学运算并获取相应连接。以此实现对分布式数据库场景的各个节点进行自动分发。用户无需根据sql进行手动的分配数据库连接,因此可以极大降低分布式数据库应用程序开发者的开发复杂度。
97.本发明实施例可以对分布式数据库场景的各个节点进行自动分发。通过在配置文件中配置分片数量和各个数据库节点的连接地址,程序会通过另一个sql语句模板配置文件中配置的sql语句中的partitionkey(分片键)进行数学运算并获取相应连接。采用本发明实施例,能极大降低分布式数据库场景应用程序开发者的开发复杂度。
98.需要说明的是,以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
99.本发明第二方面实施例提出一种分布式jdbc实现设备1,如图3所示,包括:存储器10、处理器20及存储在所述存储器10上并可在所述处理器20上运行的计算机程序,所述计算机程序被所述处理器20执行时实现如上所述的第一方面实施例所述的方法的步骤。
100.本发明第三方面实施例提出一种计算机可读存储介质,所述计算机可读存储介质上存储有信息传输的实现程序,所述程序被处理器执行时实现如上所述的第一方面实施例所述的方法的步骤。
101.需要说明的是,本实施例所述计算机可读存储介质包括但不限于为:rom、ram、磁盘或光盘等。所述程序被处理器可以是手机,计算机,服务器,空调器,或者网络设备等。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1