基于JDBC驱动的openGauss应用程序开发【玩转华为云】

举报
炒香菇的书呆子 发表于 2023/12/07 22:22:31 2023/12/07
【摘要】 openGauss 是多线程架构,守护线程 Postmaster 为每个连接分配一个后台线程 (backend)台线程的分配是在协议处理之前进行的,每个后台进程自行负责协议的处理。在 openGauss 源码或者文档中,通常认为“backend 和server 是等价的,表示服务端,同样frontend'和client 是等价的,表示客户端(应用程序)。

JDBC驱动

openGauss驱动简介

image-20231207190606619

2. openGauss驱动原理

基础介绍

openGauss-jdb在是TCP/IP 协议之上实现了一套基于消息的通信协议。主要包括以下内容:

  • 建立和取消连接的消息流
  • 通信协议中使用的消息格式和类型
  • 处理请求的消息流
  • Copy 子协议
  • 批量插入子协议

image-20231207190726430

openGauss 是多线程架构,守护线程 Postmaster 为每个连接分配一个后台线程 (backend)台线程的分配是在协议处理之前进行的,每个后台进程自行负责协议的处理。在 openGauss 源码或者文档中,通常认为“backend 和server 是等价的,表示服务端,同样frontend’和client 是等价的,表示客户端(应用程序)。

认证协议介绍

openGauss-idbc通信协议包括两个阶段: startup和normal。startup阶段主要完成客户端与数据库认证连接,正常则连接成功进入normal阶段。normal阶段客户端完成SQL命令的请求和数据库的响应。

startup是非通用消息,会将协议版本号和客户端连接的用户名、数据库和GUC参数发送给数据库,而normal阶段则使用通用的消息格式:

image-20231207190935274

normal阶段有两种“子协议”来发送请求,分别是simple query和extended query。使用simplequery时,客户端直接发送请求,数据库立即处理并返回结果;而extended query会将请求过程分为若千个步骤,以加快数据库的处理速度。

查询过程协议

image-20231207191212537

copy协议

为了高效导入/导出数据,openGauss支持copy命令,copy命令会使数据库的连接处于不同的数据处理模式下copy子协议对应三种模式:
copy-in 导入数据,对应命令 COPY FROM STDIN
copy-out 导出数据,对应命令 COPY TO STDOUT
copy-both 用于 walsender,在主备间批量传输数据

image-20231207191529407

代码结构

核心入口来源于Driver类,由它来完成所有JDBC接口类的调用openGauss驱动也提供了负载均衡、逻辑复制、copy等特有实现内容

image-20231207191619886

属性配置

image-20231207191806796

PBE核心流程

image-20231207192038531

编译

openGauss的编译提供一键式编译脚本buildsh,代码仓中有详细的编译说明

image-20231207192255215

调试

openGauss代码仓中已经提供了全套的juin4测试用例,最快捷的调试方法就是在工程下面添加新的测试用例验证

第一步:更新测试数据库的配置信息(build,properties),也可以使用build.local.properties文件。

image-20231207192340962

第二步:添加测试case,进行驱动验证。参考org.postgresql.v511SelectFunctionTest进行纯jdbc测试case验证或者参考org.postgresqljdbc,DeepBatchednsertStatementTest继承自BaseTest4进行标准case验证

2. 纯JDBC应用程序开发-

驱动加载原理

在idk1.6以前,通常编写idbc程序前需主动调用Class.formName(“orq.opengauss.Driver”)实现驱动的加载

image-20231207192920551

在jdk1.6及以后,java支持SPI机制实现驱动自发现,不需要再额外的操作

image-20231207192947130

标准应用开发

image-20231207193015038

逻辑复制

openGauss提供逻辑复制功能以实现同构/异构数据库间的数据同步

image-20231207193301153

在本部分中,了解openGaussjdbc的加载过程和基本的jdbc应用程序编写。

4. 使用ORM框架和连接池的应用程序开发

ORM框架

ORM (Obiect Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式并且存放在专门的对象一映射文件中。简单理解为一种框架的格式,可以大大减少数据库的保存、删除、读取等重复性代码。

image-20231207193630394

数据库连接池(Connection Pooling)是将数据库的多个连接统一管理起来的程序,它可以动态地进行连接的申请、使用、释放管理。由于数据库创建连接是非常大的开销,所以连接复用是其核心思想。本文以druid为例进行讲解。

image-20231207193932625

由于连接池本身也是围绕JDBC规范而设计的,所以对ORM/连接池来说,使用用法基本一致,与数据库关系较小。

了解与驱动密切相关的ORM和连接池概念,以及掌握mybatis和druid的使用。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。