前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于JDBC驱动的openGauss应用程序开发

基于JDBC驱动的openGauss应用程序开发

原创
作者头像
炒香菇的书呆子
发布2023-12-07 22:33:10
6172
发布2023-12-07 22:33:10
举报
文章被收录于专栏:乌龟哥哥默认学习专栏

基于JDBC驱动的openGauss应用程序开发

JDBC驱动

openGauss驱动简介

image-20231207190606619
image-20231207190606619

2. openGauss驱动原理

基础介绍

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

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

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

认证协议介绍

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

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

image-20231207190935274
image-20231207190935274

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

查询过程协议

image-20231207191212537
image-20231207191212537

copy协议

为了高效导入/导出数据,openGauss支持copy命令,copy命令会使数据库的连接处于不同的数据处理模式下copy子协议对应三种模式:

copy-in 导入数据,对应命令 COPY FROM STDIN

copy-out 导出数据,对应命令 COPY TO STDOUT

copy-both 用于 walsender,在主备间批量传输数据

image-20231207191529407
image-20231207191529407

代码结构

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

image-20231207191619886
image-20231207191619886

属性配置

image-20231207191806796
image-20231207191806796

PBE核心流程

image-20231207192038531
image-20231207192038531

编译

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

image-20231207192255215
image-20231207192255215

调试

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

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

image-20231207192340962
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
image-20231207192920551

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

image-20231207192947130
image-20231207192947130

标准应用开发

image-20231207193015038
image-20231207193015038

逻辑复制

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

image-20231207193301153
image-20231207193301153

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

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

ORM框架

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

image-20231207193630394
image-20231207193630394

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

image-20231207193932625
image-20231207193932625

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

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

我正在参与2023腾讯技术创作特训营第四期有奖征文,快来和我瓜分大奖!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 基于JDBC驱动的openGauss应用程序开发
    • JDBC驱动
      • openGauss驱动简介
    • 2. openGauss驱动原理
      • 基础介绍
      • 认证协议介绍
      • 查询过程协议
      • copy协议
      • 代码结构
      • 属性配置
      • PBE核心流程
      • 编译
      • 调试
    • 2. 纯JDBC应用程序开发-
      • 驱动加载原理
      • 标准应用开发
      • 逻辑复制
    • 4. 使用ORM框架和连接池的应用程序开发
      • ORM框架
相关产品与服务
负载均衡
负载均衡(Cloud Load Balancer,CLB)提供安全快捷的流量分发服务,访问流量经由 CLB 可以自动分配到云中的多台后端服务器上,扩展系统的服务能力并消除单点故障。负载均衡支持亿级连接和千万级并发,可轻松应对大流量访问,满足业务需求。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档