一、简介
在前面项目中,我们使用若依前后端分离整合人大金仓,在后续开发过程中,我们经常由于各种”不适配“问题,但可以感以为到大部分问题,将人大金仓视为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
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql.jdbc</artifactId>
<version>9.0</version>
</dependency>
| kingbase8-8.2.0.jar
<dependency>
<groupId>com.kingbase8</groupId>
<artifactId>kingbase8-jdbc</artifactId>
<version>8.2.0</version>
</dependency>
| hibernate 的jar
| hibernate-5.0.12.jar
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate</artifactId>
<version>5.0.12</version>
</dependency>
| hibernate-3.6.0-dialect-1.0.jar
<dependency>
<groupId>com.kingbase</groupId>
<artifactId>hibernate-3.6.0-dialect</artifactId>
<version>1.0</version>
</dependency>
| 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..........
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |