返回顶部
首页 > 资讯 > 精选 >基于PostgreSQL/openGauss的分布式数据库怎么解决
  • 588
分享到

基于PostgreSQL/openGauss的分布式数据库怎么解决

2023-06-21 22:06:46 588人浏览 安东尼
摘要

本篇内容介绍了“基于postgresql/openGauss的分布式数据库怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Shardi

本篇内容介绍了“基于postgresql/openGauss的分布式数据库怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

ShardingSphere-Proxy 介绍

ShardingSphere-Proxy 是 ShardingSphere 生态中的一个接入端,定位为对客户端透明的数据库代理。ShardingSphere Proxy 不局限于 Java,其实现了 MySQL、Postgresql 数据库协议,可以使用各种兼容 Mysql / PostgreSQL 协议的客户端连接并操作数据。

基于PostgreSQL/openGauss的分布式数据库怎么解决

ShardingSphere-JDBCShardingSphere-Proxy
数据库任意基于 mysql / PostgreSQL 协议的数据库
连接消耗数
异构语言支持 Java 等基于 JVM 语言任意
性能损耗低损耗略高
无中心化
静态入口

在做了分库分表或其他规则的情况下,数据会分散到多个数据库实例上,在管理上难免会有一些不便;或者使用非 Java 语言的开发者,需要 ShardingSphere 所提供的能力…… 以上这些情况,正是 ShardingSphere-Proxy 力所能及之处。

ShardingSphere-Proxy 隐藏了后端实际数据库,对于客户端来说就是在使用一个数据库,不需要关心 ShardingSphere 如何协调背后的数据库,对于使用非 Java 语言的开发者或 DBA 更友好。

在协议方面,ShardingSphere PostgreSQL Proxy 实现了 Simple Query 与大部分 Extended Query 协议,支持异构语言通过 PostgreSQL/openGauss 驱动连接 Proxy。ShardingSphere openGauss Proxy 在复用 PostgreSQL 协议的基础上,还支持 openGauss 特有的批量插入协议。

不过,由于 ShardingSphere-Proxy 相比 ShardingSphere-JDBC 增加了一层网络交互,SQL 执行的延时会有所增加,损耗相比 ShardingSphere-JDBC 略高。

ShardingSphere-Proxy 与 PostgreSQL 的生态对接

兼容 PostgreSQL Simple Query 与 Extended Query

基于PostgreSQL/openGauss的分布式数据库怎么解决

Simple Query 与 Extended Query 是大多数用户在使用 PostgreSQL 时最常用的协议。

比如,使用如下命令行工具 psql 连接 PostgreSQL 数据库进行 CRUD 操作时,主要使用 Simple Query 协议与数据库交互。

$ psql -h 127.0.0.1 -U postgrespsql (14.0 (Debian 14.0-1.pgdg110+1))Type "help" for help.postgres=# select id, name from person where age < 35; id | name ----+------  1 | Foo(1 row)

Simple Query 的协议交互示意图如下:

基于PostgreSQL/openGauss的分布式数据库怎么解决

当用户使用 PostgreSQL JDBC Driver 等驱动时,可能会如下代码使用 PreparedStatement,默认情况下对应着 Extended Query 协议。

String sql = "select id, name from person where age > ?";PreparedStatement ps = connection.prepareStatement(sql);ps.setInt(1, 35);ResultSet resultSet = ps.executeQuery();

Extended Query 的协议交互示意图如下:

基于PostgreSQL/openGauss的分布式数据库怎么解决

目前,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 语句如下

insert into person (id, name, age) values (?, ?, ?)

以 JDBC 为例,我们可能会使用如下方法执行批量插入:

String sql = "insert into person (id, name, age) values (?, ?, ?)";PreparedStatement ps = connection.prepareStatement(sql);ps.setLong(1, 1);ps.setString(2, "Foo");ps.setInt(3, 18);ps.addBatch();ps.setLong(1, 2);ps.setString(2, "Bar");ps.setInt(3, 36);ps.addBatch();ps.setLong(1, 3);ps.setString(2, "Tom");ps.setInt(3, 54);ps.addBatch();ps.executeBatch();

在 PostgreSQL 协议层面,Bind 消息每次能够传递一组参数形成 Portal,Execute 每次能够执行一个 Portal。执行批量插入可以通过反复执行 BindExecute 实现。协议交互示意图如下:

基于PostgreSQL/openGauss的分布式数据库怎么解决

Batch Bind 是 openGauss 特有的消息类型,相比原本的 BindBatch Bind 一次能够传递多组参数,使用 Batch Bind 执行批量插入的协议交互示意如下:

基于PostgreSQL/openGauss的分布式数据库怎么解决

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 个表。

基于PostgreSQL/openGauss的分布式数据库怎么解决

目前在 ShardingSphere MySQL Proxy 中分别执行 show schemasshow tables 语句,查询的结果能够正常的列出逻辑库 sharding_db 和逻辑表 person

使用 psql 连接 PostgreSQL 时可以通过 \l\d 等命令查询库、表。但与 MySQL 不同的是,show tables是 MySQL 所支持的语句,而在 psql 中所使用的 \d 实际上对应了一条比较复杂的 SQL,目前使用 ShardingSphere PostgreSQL Proxy 暂时无法查询出逻辑库或逻辑表。

支持 Extended Query 的 Describe Prepared Statement

PostgreSQL 协议的 Describe 消息有两种变体,分别是 Describe Portal 和 Describe Prepared Statement。目前 ShardingSphere Proxy 仅支持 Describe Portal,暂时不支持 Describe Prepared Statement。

Describe Prepared Statement 的实际应用举例:在 PreparedStatement 执行之前获取结果集的 MetaData。

PreparedStatement preparedStatement = connection.prepareStatement("select * from t_order limit ?");ResultSetMetaData metaData = preparedStatement.getMetaData();

“基于PostgreSQL/openGauss的分布式数据库怎么解决”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 基于PostgreSQL/openGauss的分布式数据库怎么解决

本文链接: https://lsjlt.com/news/301215.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 基于PostgreSQL/openGauss的分布式数据库怎么解决
    本篇内容介绍了“基于PostgreSQL/openGauss的分布式数据库怎么解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Shardi...
    99+
    2023-06-21
  • 基于PostgreSQL/openGauss 的分布式数据库解决方案
    在 MySQL ShardingSphere-Proxy 逐渐成熟并被广泛采用的同时,ShardingSphere 团队也在 PostgreSQL ShardingSphere-Pr...
    99+
    2024-04-02
  • 分布式数据库原理和PostgreSQL 分布式架构是怎样的
    分布式数据库原理和PostgreSQL 分布式架构是怎样的,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 一、 什么是分布式数据库分...
    99+
    2024-04-02
  • 基于Promethues与Grafana的Greenplum分布式数据库监控的实现
    基于Promethues与Grafana的Greenplum分布式数据库监控的实现 标签(空格分隔): greenplum系列 [toc] 一:前言 Greenplum是面向数据仓库应用的分布式关系型MPP数据库,基于PostgreSQL...
    99+
    2016-08-15
    基于Promethues与Grafana的Greenplum分布式数据库监控的实现 数据库入门 数据库基础教程 数据库 mysql
  • java分布式基于RestTemplate怎么用
    这篇文章主要介绍了java分布式基于RestTemplate怎么用,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。1.前言最近在接触到分布式方面知识的时候,学习了RestTem...
    99+
    2023-06-29
  • 基于Zookeeper怎么实现分布式锁
    这篇文章主要介绍“基于Zookeeper怎么实现分布式锁”,在日常操作中,相信很多人在基于Zookeeper怎么实现分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”基于Zookeeper怎么实现分布式锁...
    99+
    2023-06-22
  • oracle分布式数据库怎么搭建
    要搭建Oracle分布式数据库,可以按照以下步骤进行操作: 确保已经安装了Oracle数据库软件,并且有适当的许可证。 创建...
    99+
    2023-10-25
    oracle
  • 如何理解分布式系统下基于Redis的分布式锁
    这篇文章主要介绍“如何理解分布式系统下基于Redis的分布式锁”,在日常操作中,相信很多人在如何理解分布式系统下基于Redis的分布式锁问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大...
    99+
    2024-04-02
  • Oracle数据库中的分布式数据库是什么
    在Oracle数据库中,分布式数据库是指在不同物理位置上的多个数据库实例能够通过网络连接相互通信和协作的系统。分布式数据库可以让用户...
    99+
    2024-03-02
    Oracle
  • python怎么将Dataframe格式的数据写入opengauss数据库并查询
    本文小编为大家详细介绍“python怎么将Dataframe格式的数据写入opengauss数据库并查询”,内容详细,步骤清晰,细节处理妥当,希望这篇“python怎么将Dataframe格式的数据写入opengauss数据库并查询”文章能...
    99+
    2023-06-30
  • 基于dubbo的分布式架构怎么实现
    本篇内容介绍了“基于dubbo的分布式架构怎么实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!前言现在越来越多的互联网公司还是将自己公司的...
    99+
    2023-06-05
  • 基于hadoop的分布式爬虫怎么实现
    要实现基于Hadoop的分布式爬虫,可以按照以下步骤进行: 设计架构:首先需要设计分布式爬虫的架构,确定集群中各个节点的角色和任...
    99+
    2024-03-06
    hadoop
  • 数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;PG解决社保问题;mysqlbinlog解析……
    摘要:墨天轮数据库周刊第31期发布啦,每周1次推送本周数据库相关热门资讯、精选文章、干货文档。本周分享 华为openGauss 正式开源;7月数据库排行榜发布;浙江移动国产数据库AntDB迁移;抢鲜体验openGauss;oracle AD...
    99+
    2021-02-08
    数据库周刊31丨openGauss 正式开源;7月数据库排行榜发布;PG解决社保问题;mysqlbinlog解析……
  • 基于python分布式爬虫并解决假死的问题
    python版本:3.5.4 系统:win10 x64 通过网页下载视频 方法一:使用urllib.retrieve函数 放函数只需要两个参数即可下载相应内容到本地,一个是网址,一个...
    99+
    2024-04-02
  • 细数基于ORACLE 数据库环境的常见数据灾难解决方式
    一、故障描述:基于ORACLE 数据库环境的常见数据灾难故障表现:1、ORACLE数据库无法启动或无法正常工作。2、ORACLE ASM存储破坏。3、ORACLE数据文件丢失。4、ORACLE数据文件部分损...
    99+
    2024-04-02
  • 怎么理解高并发下的数据库分布式事务
    这篇文章主要介绍“怎么理解高并发下的数据库分布式事务”,在日常操作中,相信很多人在怎么理解高并发下的数据库分布式事务问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么理解高并发下的数据库分布式事务”的疑惑有所...
    99+
    2023-06-02
  • 基于Zookeeper的分布式锁该如何理解
    今天就跟大家聊聊有关基于Zookeeper的分布式锁该如何理解,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。实现分布式锁目前有三种流行方案,分别为基于数据库、Redis、Zookee...
    99+
    2023-06-04
  • 分布式数据库的特点是什么
    小编给大家分享一下分布式数据库的特点是什么,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!分布式数据库的特点有:1、分布的透明管理...
    99+
    2024-04-02
  • 如何优雅的解决分布式数据库的复杂故障
    如何优雅的解决分布式数据库的复杂故障,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 故障简介ACID是事务的四个特性,其中D(Dur...
    99+
    2024-04-02
  • 基于Redis缓存怎么实现分布式锁
    本篇内容介绍了“基于Redis缓存怎么实现分布式锁”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是分布式锁首先我们先来简单了解一下什么是...
    99+
    2023-06-19
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作