人大金仓国产数据库与PostgreSQL

一、简介

在前面项目中,我们使用若依前后端分离整合人大金仓,在后续开发过程中,我们经常因为各种”不适配“问题,但可以感觉得到大部分问题,将人大金仓视为postgreSQL就能去解决大部分问题。据了解,Kingbase 是基于 开源数据库 PostgreSQL 开发的,大部分功能与 PostgreSQL兼容。Kingbase 8 是基于 PostgreSQL 9.6 的。那么下面我们来分析下具体哪些不同,也方便程序猿们在开发中更高效的去解决业务场景中出现的问题

二、具体差异

2.1 进程结构基本一致

KingbaseES和PostgreSQL启动后的后台进程

Kingbase:

postgreSQL:

和pg(9.6版本)相比,除了kinbaseES多了一个logger process和一个bgworker:sysloglical supervisor外,其他的后台进程完全是一模一样的,连名字都没变。

在更高一点的版本中,对比就会发现,几乎完全一致。这里也不难理解为什么使用navicat中postgreSQL的连接方式能够管理人大金仓数据库了。

2.2 JDBC

postgresql 9.6

kingbase 8

driver_class

org.postgresql.Driver

com.kingbase8.Driver

url

jdbc:postgresql://127.0.0.1:5432/postgres

jdbc:kingbase8://127.0.0.1:54321/kingbase

jdbc 的 jar

postgresql.jdbc-9.0.jar

org.postgresql

postgresql.jdbc

9.0

kingbase8-8.2.0.jar

com.kingbase8

kingbase8-jdbc

8.2.0

hibernate 的jar

hibernate-5.0.12.jar

org.hibernate

hibernate

5.0.12

hibernate-3.6.0-dialect-1.0.jar

com.kingbase

hibernate-3.6.0-dialect

1.0

hibernate方言

org.hibernate.dialect.PostgreSQL9Dialect

org.hibernate.dialect.Kingbase8Dialect

引用资料:PostgreSQL 与 Kingbase 的差异对比 - 草色青青送马蹄 - 博客园 (cnblogs.com)

这里127.0.0.1 表示本地的ip地址。

5432 是postgresql的默认端口;54321则是人大金仓的的默认端口。

postgres 是postgresql默认的数据库名,kingbase是Kingbase默认的数据库名。

从这一部分来说,发现的是url以及等等上面有明显不同,但是在开发的过程中,将驱动改为PostgreSQL依旧能够驱动,很是耐人寻味,我们接着往下看。

2.3 数据目录结构和组成基本一致。

命令程序

postgresql 9.6

kingbase 8

pgbench

kbbench

postgres

kingbase

psql

ksql

pg_archivecleanup

sys_archivecleanup

pg_basebackup

sys_basebackup

pg_bulkload

sys_bulkload

pg_config

sys_config

pg_controldata

sys_controldata

pg_ctl

sys_ctl

pg_dump

sys_dump

pg_dumpall

sys_dumpall

pg_hm

sys_hm

pg_isready

sys_isready

pglogical_create_subscriber

syslogical_create_subscriber

pg_receivexlog

sys_receivexlog

pg_recvlogical

sys_recvlogical

pg_resetxlog

sys_resetxlog

pg_restore

sys_restore

pg_rewind

sys_rewind

pg_rman

sys_rman

pg_test_fsync

sys_test_fsync

pg_test_timing

sys_test_timing

pg_upgrade

sys_upgrade

pg_xlogdump

sys_xlogdump

系统表和视图

postgresql 9.6

kingbase 8

pg_aggregate

sys_aggregate

pg_am

sys_am

pg_amop

sys_amop

pg_amproc

sys_amproc

pg_attrdef

sys_attrdef

pg_attribute

sys_attribute

pg_authid

sys_authid

pg_auth_members

sys_auth_members

pg_cast

sys_cast

pg_class

sys_class

pg_collation

sys_collation

pg_constraint

sys_constraint

pg_conversion

sys_conversion

pg_database

sys_database

pg_db_role_setting

sys_db_role_setting

pg_default_acl

sys_default_acl

pg_depend

sys_depend

pg_description

sys_description

pg_enum

sys_enum

pg_event_trigger

sys_event_trigger

pg_extension

sys_extension

pg_foreign_data_wrapper

sys_foreign_data_wrapper

pg_foreign_server

sys_foreign_server

pg_foreign_table

sys_foreign_table

pg_index

sys_index

pg_inherits

sys_inherits

pg_init_privs

sys_init_privs

pg_language

sys_language

pg_largeobject

sys_largeobject

pg_largeobject_metadata

sys_largeobject_metadata

pg_namespace

sys_namespace

pg_opclass

sys_opclass

pg_operator

sys_operator

pg_opfamily

sys_opfamily

pg_partitioned_table

sys_partitioned_table

pg_pltemplate

sys_pltemplate

pg_policy

sys_policy

pg_proc

sys_proc

pg_publication

sys_publication

pg_publication_rel

sys_publication_rel

pg_range

sys_range

pg_replication_origin

sys_replication_origin

pg_rewrite

sys_rewrite

pg_seclabel

sys_seclabel

pg_sequence

sys_sequence

pg_shdepend

sys_shdepend

pg_shdescription

sys_shdescription

pg_shseclabel

sys_shseclabel

pg_statistic

sys_statistic

pg_statistic_ext

sys_statistic_ext

pg_subscription

sys_subscription

pg_subscription_rel

sys_subscription_rel

pg_tablespace

sys_tablespace

pg_transform

sys_transform

pg_trigger

sys_trigger

pg_ts_config

sys_ts_config

pg_ts_config_map

sys_ts_config_map

pg_ts_dict

sys_ts_dict

pg_ts_parser

sys_ts_parser

pg_ts_template

sys_ts_template

pg_type

sys_type

pg_user_mapping

sys_user_mapping

System Views

sysstem Views

pg_available_extensions

sys_available_extensions

pg_available_extension_versions

sys_available_extension_versions

pg_config

sys_config

pg_cursors

sys_cursors

pg_file_settings

sys_file_settings

pg_group

sys_group

pg_hba_file_rules

sys_hba_file_rules

pg_indexes

sys_indexes

pg_locks

sys_locks

pg_matviews

sys_matviews

pg_policies

sys_policies

pg_prepared_statements

sys_prepared_statements

pg_prepared_xacts

sys_prepared_xacts

pg_publication_tables

sys_publication_tables

pg_replication_origin_status

sys_replication_origin_status

pg_replication_slots

sys_replication_slots

pg_roles

sys_roles

pg_rules

sys_rules

pg_seclabels

sys_seclabels

pg_sequences

sys_sequences

pg_settings

sys_settings

pg_shadow

sys_shadow

pg_stats

sys_stats

pg_tables

sys_tables

pg_timezone_abbrevs

sys_timezone_abbrevs

pg_timezone_names

sys_timezone_names

pg_user

sys_user

pg_user_mappings

sys_user_mappings

pg_views

sys_views

这两张表都是能找到的,具体来源我也不太确定,kingbase只是将postgresql 的表的前缀从 pg 改成了 sys…数据目录结构和组成基本一致。

2.4 集群方面

图中各组件的介绍和作用:

  • postgresql 官方的数据库系统, 内置了副本机制, 复制模式支持全同步、半同步、全异步模式。同时还支持级联复制.
  • citus 它是postgresql的一个扩展, 为 postgresql 提供了分布式能力, 它和Mysql生态中的Mycat的作用类似.
    • 它不入侵 Postgresql 代码, 而是依托于 Postgresql 而不是改造 Postgresql, 因此可以使用postgresql最新版本的功能、工具和生态系统。
    • 它将 Postgresql 从单个节点扩展到大型分布式数据库集群, 可以随意水平扩展以支持更大的数据量、更大的写入和查询性能。
    • citus将节点分为协调器节点和工作节点, 协调器节点除了集群元数据外不存储任何数据分片。应用程序将查询发送到协调器节点,协调器将其发送给相关工作节点并行执行, 最后协调器汇集结果后返回给应用程序。工作节点接收协调器发送过来的指令,执行命令,存储分片数据,并将执行结果返回给协调器等, 客户端只需连接到协调器即可, 工作节点对于客户端而言是透明的.
    • 但它不具备高可用和自动故障切换的能力, 高可用完全依赖postgresql自身提供功能.
  • patroni 它为 postgresql 提供了自动化配置和自动故障转移能力, patroni内置对citus的集成. Patroni 接管了 Postgresql 的配置和启停管理, 同时自动化执行数据同步. 它依赖DCS(分布式配置存储)系统来实现配置共享和自动故障切换. 它利用DCS的分布式锁实现只有一个Leader. 主备及数据同步则调用Postgresql内置的功能实现(流复制).
  • etcd-server 它作为 Patroni 的 DCS(分布式配置存储)系统, patroni也支持的其它的DCS: consul,zookeeper,kubernetes等.
  • vip-manager 它为citus的协调器组提供了 VIP 漂移功能, 它根据 DCS 中的 leader 的键来决定本机是否应该获取 VIP, 因此能很好的配合 patroni, 虽然keepalived也提供类似的功能, 但keepalived无法根据服务状态漂移VIP, 只能根据机器决定是否漂移VIP, 这可能会导致VIP和Leader不一致的问题. 另外, patroni可以手动切换主备. keepalived无法支持, 当然还有其它一些问题不展开了.
  • 该部分引用:PostgreSQL 分布式高可用集群方案 - 知乎 (zhihu.com)

kingbase集群:

KingbaseES R6 集群修改物理IP和VIP案例-CSDN博客

这里直接引用一篇文章,postgresql高可用的解决方案,然后看看kes86的集群管理,总有对的上号的,比如repmgr。

三、总结

人大金仓与PostgreSQL集群之间的差别主要体现在以下几个方面:

首先,人大金仓的核心产品金仓交易型数据库KingbaseES具备高兼容、高可靠、高性能、高扩展、高安全、易使用和易管理的特点。它是唯一入选国家自主创新产品目录的数据库产品,并在国家级、省部级实际项目中得到广泛应用。特别地,KingbaseES提供了容错功能体系,通过数据备份、恢复、同步复制、多数据副本等高可用技术,确保数据库能够7×24小时不间断地提供服务。此外,它还提供了全新设计的集成开发环境(IDE)和集成管理平台,以及基于并行计算、索引覆盖等技术在内的多种性能优化手段。

而PostgreSQL作为最先进的开源数据库,自诞生之初就带有许多高级特性,如丰富的函数和高级扩展包等。PostgreSQL的集群模式是将多个单机数据库以集群化的方式对外提供服务,主备之间保持数据同步。其高级特性包括主备切换、故障自动切换、负载均衡、备份恢复、慢日志、审计日志等,这些高级特性通常需要结合插件或第三方中间件如pgbouncer、pgpool来实现。

其次,从产品架构上看,Kingbase 8是基于PostgreSQL 9.6的,尽管两者有一些相似之处,但在一些关键细节上存在差异。例如,在JDBC连接方面,PostgreSQL的默认端口是5432,而人大金仓的默认端口是54321。在命令程序方面,Kingbase只是将PostgreSQL的表的前缀从pg改成了sys或者kb。

最后,从市场定位和应用场景来看,国产数据库如人大金仓的产品目前处在起步阶段,尽管有一定的市场规模,但在整个大的市场份额和市场定位中,其影响力相对较弱,还没有撼动国外产品的垄断地位。而PostgreSQL作为开源数据库,已经在全球范围内得到了广泛的应用和认可。只能说完美兼容pg…

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/980634.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Java分布式】Nacos注册中心

Nacos注册中心 SpringCloudAlibaba 也推出了一个名为 Nacos 的注册中心,相比 Eureka 功能更加丰富,在国内受欢迎程度较高。 官网:https://nacos.io/zh-cn/ 集群 Nacos就将同一机房内的实例划分为一个集群,一个服务可以包含多个集…

派可数据BI接入DeepSeek,开启智能数据分析新纪元

派可数据BI产品完成接入DeepSeek,此次接入标志着派可数据BI在智能数据分析领域迈出了重要一步,将为用户带来更智能、更高效、更便捷的数据分析体验。 派可数据BI作为国内领先的商业智能解决方案提供商,一直致力于为用户提供高效、稳定易扩展…

【漫话机器学习系列】110.线性可分(Linearly Separable)

线性可分与线性不可分的概念详解 1. 引言 在机器学习和模式识别领域,分类问题是一个重要的研究方向。在分类任务中,我们通常需要将不同类别的数据点分开,而如何进行分割是一个关键问题。线性可分(Linearly Separable&#xff09…

架构师面试(九):缓存一致性

问题 关于【数据库和缓存】一致性,下面哪几项是在线上生产环境中相对合理的处理方式? A. 对于查询操作,先查缓存,如果为空则查 DB,然后将数据带入缓存; B. 对于插入操作,只写 DB 即可&#…

LearnOpenGL之Shader编程用算法绘画

———————————————————— 前序 ——————————————————— AndroidLearnOpenGL是本博主自己实现的LearnOpenGL练习集合: Github地址:GitHub - wangyongyao1989/AndroidLearnOpenGL: OpenGL基础及运用 系列文章&#xff…

基于 Flink CDC YAML 的 MySQL 到 Kafka 流式数据集成

本教程的演示都将在 Flink CDC CLI 中进行,无需一行 Java/Scala 代码,也无需安装 IDE。 这篇教程将展示如何基于 Flink CDC YAML 快速构建 MySQL 到 Kafka 的 Streaming ELT 作业,包含整库同步、表结构变更同步演示和关键参数介绍。 准备阶段…

【Maven】基于IDEA进行Maven工程的创建、构建

文章目录 一、基于IDEA创建Maven工程1. 概念梳理Maven工程的GAVP2. Idea构建Maven Java SE工程3. Idea构建Maven Java Web工程3.1 创建一个maven的javase工程3.2 修改pom.xml文件打包方式3.3 设置web资源路径和web.xml路径 4. Maven工程项目结构说明 二、基于IDEA进行Maven工程…

计算机毕业设计SpringBoot+Vue.js在线课程管理系统(源码+文档+PPT+讲解)

温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…

【爬虫基础】第二部分 爬虫基础理论 P3/3

上节内容回顾:【爬虫基础】第一部分 网络通讯 P1/3-CSDN博客 【爬虫基础】第一部分 网络通讯-Socket套接字 P2/3-CSDN博客 【爬虫基础】第一部分 网络通讯-编程 P3/3-CSDN博客 【爬虫基础】第二部分 爬虫基础理论 P1/3-CSDN博客 【爬虫基础】第二部分 爬虫基础理论…

【子网掩码计算器:Python + Tkinter 实现】

子网掩码计算器:Python Tkinter 实现 引言代码功能概述代码实现思路1. 界面设计2. 功能实现3. 事件处理 子网掩码计算器实现步骤1. 导入必要的库2. 定义主窗口类 SubnetCalculatorApp3. 创建菜单栏4. 创建界面组件5. 判断 IP 地址类别6. 计算子网信息7. 其他功能函…

【第十节】C++设计模式(结构型模式)-Flyweight( 享元)模式

目录 一、问题背景 二、模式选择 三、代码实现 四、总结讨论 一、问题背景 享元模式(Flyweight Pattern)在对象存储优化中的应用 在面向对象系统的设计与实现中,创建对象是最常见的操作之一。然而,如果一个应用程序使用了过多…

macOS - 使用 tmux

文章目录 安装 tmux使用更多快捷键说明 安装 tmux brew install tmux使用 在终端输入 tmux 进入 tmux 界面,然后 输入 Control Option B 进入交互模式 输入 % 左右分栏," 上下分割 上一个窗格:{,下一个:} PS…

【洛谷贪心算法题】P1094纪念品分组

该题运用贪心算法,核心思想是在每次分组时,尽可能让价格较小和较大的纪念品组合在一起,以达到最少分组的目的。 【算法思路】 输入处理:首先读取纪念品的数量n和价格上限w,然后依次读取每件纪念品的价格,…

16. LangChain实战项目2——易速鲜花内部问答系统

需求简介 易束鲜花企业内部知识库如下: 本实战项目设计一个内部问答系统,基于这些内部知识,回答内部员工的提问。 在前面课程的基础上,需要安装的依赖包如下: pip install docx2txt pip install qdrant-client pip i…

Minio搭建并在SpringBoot中使用完成用户头像的上传

Minio使用搭建并上传用户头像到服务器操作,学习笔记 Minio介绍 minio官网 MinIO是一个开源的分布式对象存储服务器,支持S3协议并且可以在多节点上实现数据的高可用和容错。它采用Go语言开发,拥有轻量级、高性能、易部署等特点,并且可以自由…

Spring AI:让AI应用开发更简单

文章目录 引言什么是Spring AI?核心特性 Spring AI的核心组件ChatClient:聊天模型示例代码图示 ImageClient:图像生成示例代码图示 Prompt Templates:提示词模板示例代码 Spring AI的优势示例项目:智能机票助手代码实现…

【C】链式二叉树算法题1 -- 单值二叉树

leetcode链接https://leetcode.cn/problems/univalued-binary-tree/description/ 1 题目描述 如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。只有给定的树是单值二叉树时,才返回 true;否则返回 false。 示例 1&#xff1…

什么是最终一致性,它对后端系统的意义是什么

最终一致性(Eventual Consistency)是分布式系统中的一种一致性模型。与传统的强一致性模型不同,最终一致性并不要求系统在任何时刻都保持一致,而是保证在足够的时间后,所有节点的数据最终会达到一致的状态。换句话说,系统允许短时间内出现数据的不一致性,但最终会通过某…

掌握大模型高效任务流搭建(一):构建LangChain任务流

前言: 在LangChain框架中,“链”占据着核心地位。它允许我们将众多任务模块串联起来,构建出富有弹性的任务流。借助这种链式结构,我们能够处理复杂的逻辑,并实现任务的自动化。在实际场景里,链式操作极大地…

目标检测——数据处理

1. Mosaic 数据增强 Mosaic 数据增强步骤: (1). 选择四个图像: 从数据集中随机选择四张图像。这四张图像是用来组合成一个新图像的基础。 (2) 确定拼接位置: 设计一个新的画布(输入size的2倍),在指定范围内找出一个随机点(如…