在前面项目中,我们使用若依前后端分离整合人大金仓,在后续开发过程中,我们经常因为各种”不适配“问题,但可以感觉得到大部分问题,将人大金仓视为postgreSQL就能去解决大部分问题。据了解,Kingbase 是基于 开源数据库 PostgreSQL 开发的,大部分功能与 PostgreSQL兼容。Kingbase 8 是基于 PostgreSQL 9.6 的。那么下面我们来分析下具体哪些不同,也方便程序猿们在开发中更高效的去解决业务场景中出现的问题
KingbaseES和PostgreSQL启动后的后台进程
Kingbase:
postgreSQL:
和pg(9.6版本)相比,除了kinbaseES多了一个logger process和一个bgworker:sysloglical supervisor外,其他的后台进程完全是一模一样的,连名字都没变。
在更高一点的版本中,对比就会发现,几乎完全一致。这里也不难理解为什么使用navicat中postgreSQL的连接方式能够管理人大金仓数据库了。
| 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 postgresql.jdbc | kingbase8-8.2.0.jar kingbase8-jdbc |
hibernate 的jar | hibernate-5.0.12.jar
hibernate | hibernate-3.6.0-dialect-1.0.jar
hibernate-3.6.0-dialect |
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依旧能够驱动,很是耐人寻味,我们接着往下看。
命令程序
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......数据目录结构和组成基本一致。
图中各组件的介绍和作用:
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..........