基于JDBC驱动的openGauss应用程序开发【玩转华为云】
JDBC驱动
openGauss驱动简介
2. openGauss驱动原理
基础介绍
openGauss-jdb在是TCP/IP 协议之上实现了一套基于消息的通信协议。主要包括以下内容:
- 建立和取消连接的消息流
- 通信协议中使用的消息格式和类型
- 处理请求的消息流
- Copy 子协议
- 批量插入子协议
openGauss 是多线程架构,守护线程 Postmaster 为每个连接分配一个后台线程 (backend)台线程的分配是在协议处理之前进行的,每个后台进程自行负责协议的处理。在 openGauss 源码或者文档中,通常认为“backend 和server 是等价的,表示服务端,同样frontend’和client 是等价的,表示客户端(应用程序)。
认证协议介绍
openGauss-idbc通信协议包括两个阶段: startup和normal。startup阶段主要完成客户端与数据库认证连接,正常则连接成功进入normal阶段。normal阶段客户端完成SQL命令的请求和数据库的响应。
startup是非通用消息,会将协议版本号和客户端连接的用户名、数据库和GUC参数发送给数据库,而normal阶段则使用通用的消息格式:
normal阶段有两种“子协议”来发送请求,分别是simple query和extended query。使用simplequery时,客户端直接发送请求,数据库立即处理并返回结果;而extended query会将请求过程分为若千个步骤,以加快数据库的处理速度。
查询过程协议
copy协议
为了高效导入/导出数据,openGauss支持copy命令,copy命令会使数据库的连接处于不同的数据处理模式下copy子协议对应三种模式:
copy-in 导入数据,对应命令 COPY FROM STDIN
copy-out 导出数据,对应命令 COPY TO STDOUT
copy-both 用于 walsender,在主备间批量传输数据
代码结构
核心入口来源于Driver类,由它来完成所有JDBC接口类的调用openGauss驱动也提供了负载均衡、逻辑复制、copy等特有实现内容
属性配置
PBE核心流程
编译
openGauss的编译提供一键式编译脚本buildsh,代码仓中有详细的编译说明
调试
openGauss代码仓中已经提供了全套的juin4测试用例,最快捷的调试方法就是在工程下面添加新的测试用例验证
第一步:更新测试数据库的配置信息(build,properties),也可以使用build.local.properties文件。
第二步:添加测试case,进行驱动验证。参考org.postgresql.v511SelectFunctionTest进行纯jdbc测试case验证或者参考org.postgresqljdbc,DeepBatchednsertStatementTest继承自BaseTest4进行标准case验证
2. 纯JDBC应用程序开发-
驱动加载原理
在idk1.6以前,通常编写idbc程序前需主动调用Class.formName(“orq.opengauss.Driver”)实现驱动的加载
在jdk1.6及以后,java支持SPI机制实现驱动自发现,不需要再额外的操作
标准应用开发
逻辑复制
openGauss提供逻辑复制功能以实现同构/异构数据库间的数据同步
在本部分中,了解openGaussjdbc的加载过程和基本的jdbc应用程序编写。
4. 使用ORM框架和连接池的应用程序开发
ORM框架
ORM (Obiect Relational Mapping)框架采用元数据来描述对象与关系映射的细节,元数据一般采用XML格式并且存放在专门的对象一映射文件中。简单理解为一种框架的格式,可以大大减少数据库的保存、删除、读取等重复性代码。
数据库连接池(Connection Pooling)是将数据库的多个连接统一管理起来的程序,它可以动态地进行连接的申请、使用、释放管理。由于数据库创建连接是非常大的开销,所以连接复用是其核心思想。本文以druid为例进行讲解。
由于连接池本身也是围绕JDBC规范而设计的,所以对ORM/连接池来说,使用用法基本一致,与数据库关系较小。
了解与驱动密切相关的ORM和连接池概念,以及掌握mybatis和druid的使用。
- 点赞
- 收藏
- 关注作者
评论(0)