Simple Query 的协议交互示意图如下:
当用户使用 PostgreSQL JDBC Driver 等驱动时,可能会如下代码使用 PreparedStatement,默认情况下对应着 Extended Query 协议。
Extended Query 的协议交互示意图如下:
目前,ShardingSphere PostgreSQL Proxy 实现了 Simple Query 与大部分 Extended Query 协议,不过,因为数据库客户端与驱动已经封装好 API 供用户使用,一般用户并不需要关心数据库协议层面的事情。
ShardingSphere-Proxy 兼容 PostgreSQL 的 Simple Query 与 Extended Query 意味着:用户可以使用常见的 PostgreSQL 客户端或驱动连接 ShardingSphere-Proxy 进行 CRUD 操作,利用 ShardingSphere 在数据库上层提供的增量能力。
ShardingSphere-Proxy 与 openGauss 的生态对接支持 openGauss JDBC Driver
openGauss 数据库有对应的 JDBC 驱动,JDBC URL 的前缀jdbc:opengauss。虽然用 PostgreSQL 的 JDBC 驱动也能够连接 openGauss 数据库,但这样就无法完全利用 openGauss 特有的批量插入等特性。ShardingSphere 增加了 openGauss 数据库类型,能够识别 openGauss JDBC Driver,开发者在使用 ShardingSphere 的时候可以直接使用 openGauss 的 JDBC 驱动。
支持 openGauss 批量插入协议
举一个例子,当我们 prepare 一个 insert 语句如下
以 JDBC 为例,我们可能会使用如下方法执行批量插入:
在 PostgreSQL 协议层面,Bind 消息每次能够传递一组参数形成 Portal,Execute 每次能够执行一个 Portal。执行批量插入可以通过反复执行 Bind 和 Execute 实现。协议交互示意图如下:
Batch Bind 是 openGauss 特有的消息类型,相比原本的 Bind,Batch Bind 一次能够传递多组参数,使用 Batch Bind 执行批量插入的协议交互示意如下:
ShardingSphere-Proxy openGauss 实现了对 Batch Bind 协议的支持,也就是说,客户端能够直接用 openGauss 的客户端或驱动对 ShardingSphere Proxy 执行批量插入。
ShardingSphere-Proxy 后续要做的事情支持 ShardingSphere PostgreSQL Proxy 逻辑 MetaData 查询
ShardingSphere-Proxy 作为透明数据库代理,用户无需关心 Proxy 如何协调背后的数据库。
以下图为例,在 ShardingSphere-Proxy 中配置逻辑库 sharding_db 和逻辑表 person,Proxy背后实际对应了 2 个数据库共 4 个表。
目前在 ShardingSphere MySQL Proxy 中分别执行 show schemas、show tables 语句,查询的结果能够正常的列出逻辑库 sharding_db 和逻辑表 person。
使用 psql 连接 PostgreSQL 时可以通过 \l、\d 等命令查询库、表。但与 MySQL 不同的是,show tables是 MySQL 所支持的语句,而在 psql 中所使用的 \d 实际上对应了一条比较复杂的 SQL,目前使用 ShardingSphere PostgreSQL Proxy 暂时无法查询出逻辑库或逻辑表。
支持 Extended Query 的 Describe Prepared StatementPostgreSQL 协议的 Describe 消息有两种变体,分别是 Describe Portal 和 Describe Prepared Statement。目前 ShardingSphere Proxy 仅支持 Describe Portal,暂时不支持 Describe Prepared Statement。
Describe Prepared Statement 的实际应用举例:在 PreparedStatement 执行之前获取结果集的 MetaData。
ShardingSphere 与 PostgreSQL/openGauss 生态对接的过程仍在进行,后续需要做的事情还有很多。如果您对我们所做的事情感兴趣,欢迎通过 GitHub 或邮件列表参与 ShardingSphere 社区。
GitHub: https://github.com/apache/shardingsphere
参考资料https://www.postgresql.org/docs/current/protocol.html
https://gitee.com/opengauss/openGauss-connector-jdbc/blob/master/pgjdbc/src/main/java/org/postgresql/core/v3/QueryExecutorImpl.java
到此这篇关于打造基于 PostgreSQL/openGauss 的分布式数据库解决方案的文章就介绍到这了,更多相关PostgreSQL分布式数据库内容请搜索七叶笔记以前的文章或继续浏览下面的相关文章希望大家以后多多支持七叶笔记!