人大金仓国产数据库与PostgreSQL
一、简介在前面项目中,我们使用若依前后端分离整合人大金仓,在后续开发过程中,我们经常由于各种”不适配“问题,但可以感以为到大部分问题,将人大金仓视为postgreSQL就能去办理大部分问题。据了解,Kingbase 是基于 开源数据库 PostgreSQL 开发的,大部分功能与 PostgreSQL兼容。Kingbase 8 是基于 PostgreSQL 9.6 的。那么下面我们来分析下具体哪些不同,也方便程序猿们在开发中更高效的去办理业务场景中出现的问题
二、具体差别
2.1 进程结构基本同等
KingbaseES和PostgreSQL启动后的后台进程
Kingbase:
https://img-blog.csdnimg.cn/direct/7ac818b4a6cb48eb983547f68ddf2f6c.png
postgreSQL:
https://img-blog.csdnimg.cn/direct/6b9efd5e5b684626ad10af9d4ae86d3d.png
和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默认的数据库名。
https://img-blog.csdnimg.cn/direct/dd3bf541668b4d67b21db90dfc47c062.png
从这一部分来说,发现的是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 集群方面
https://img-blog.csdnimg.cn/direct/efb21bf2b89a4e2fa16b1912b869d16a.png
图中各组件的介绍和作用:
[*]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企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]