开源产品分析
1.没有统一的售后接口
2.没有成熟的解决办法,这座位
3.PG第三方支持
我凭经验摸索到开源产品的服务管理能力,真切相传
产品安全性
产品易用性
产品容灾保障
产品版本管理
第三方支持
多应用TCO
软件投资保护
应用案例
###sample
1.
PG postgresql 学习路线
1.找到社区 (德国社区)
https://www.pg-forum.de
阅读源码中文书
找到PG -maillist (重要)
https://www.postgresql.org/list/
https://www.postgresql.org/message-id/57275E56.8080507%40postgresdata.com
https://www.postgresql.org/message-id/CAMAYy4+Cn+QPeoU93n+EZ+o5knsSa65NRsWYD+Q4AuEc6Ubmwg@mail.gmail.com
2.找到翻译软件 (chrom翻译)
3找到中文文档
https://www.liangzl.com/get-article-detail-11064.html
####吹牛逼文章
【干货总结】:可能是史上最全的MySQL和PGSQL的对比材料
运维了MySQL和PGSQL已经有一段时间了,最近接到一个数据库选型需求,于是便开始收集资料整理了一下,然后就有了下面的对比表
关键词:PostgreSQL 11、MySQL5.7
比较版本:PostgreSQL 11 VS MySQL5.7(innodb引擎) Oracle官方社区版
1. CPU限制
2. 配置文件参数
3. 第三方工具依赖情况
4. 高可用主从复制底层原理
大事务并行复制效率低,对于重要业务,需要依赖 percona-toolkit的pt-table-checksum和pt-table-sync工具定期比较和修复主从一致
主从复制出错严重时候需要重搭主从
MySQL的逻辑复制并不阻止两个不一致的数据库建立复制关系
5. 从库只读状态
6. 版本分支
国内外还有一些基于PGSQL做二次开发的数据库厂商,例如:Enterprise DB、瀚高数据库等等,当然这些只是二次开发并不算独立分支
Oracle官方分支还有版本之分,分为标准版、企业版、经典版、社区版
7. SQL特性支持
8. 主从复制安全性
同步流复制、强同步(remote apply)、高安全,不会丢数据
PGSQL同步流复制:所有从库宕机,主库会罢工,主库无法自动切换为异步流复制(异步模式),需要通过增加从库数量来解决,一般生产环境至少有两个从库
手动解决:在PG主库修改参数synchronous_standby_names ='',并执行命令: pgctl reload ,把主库切换为异步模式
增强半同步复制 ,mysql5.7版本增强半同步才能保证主从复制时候不丢数据
mysql5.7半同步复制相关参数:
参数rpl_semi_sync_master_wait_for_slave_count 等待至少多少个从库接收到binlog,主库才提交事务,一般设置为1,性能最高
参数rpl_semi_sync_master_timeout 等待多少毫秒,从库无回应自动切换为异步模式,一般设置为无限大,不让主库自动切换为异步模式
所有从库宕机,主库会罢工,因为无法收到任何从库的应答包
9. 多字段统计信息
10. 索引类型
11. 物理表连接算法
12. 子查询和视图性能
13. 执行计划即时编译
14. 并行查询
有限,只支持主键并行查询
15. 物化视图
不支持物化视图
16. 插件功能
不支持插件功能
17. check约束
不支持check约束,可以写check约束,但存储引擎会忽略它的作用,因此check约束并不起作用(mariadb 支持)
18. gpu 加速SQL
不支持gpu 加速SQL 的执行速度
19. 数据类型
数据类型不够丰富
20. 跨库查询
可以跨库查询
21. 备份还原
假如有一个三节点的PGSQL主从集群,可以随便在其中一个节点做完整备份和wal归档备份
备份还原相对不太简单,完整备份+binlog备份(增量)
完整备份需要percona的XtraBackup工具做物理备份,MySQL本身不支持物理备份
时点还原操作步骤繁琐复杂
22. 性能视图
不好的地方是,安装插件需要重启数据库,并且需要收集性能信息的数据库需要执行一个命令:create extension pg_stat_statements命令
否则不会收集任何性能信息,比较麻烦
自带PS库,默认很多功能没有打开,而且打开PS库的性能视图功能对性能有影响(如:内存占用导致OOM bug)
23. 安装方式
有各个平台的包rpm包,deb包等等,源码编译安装、二进制包安装,一般用二进制包安装,方便快捷
24. DDL操作
将影响减少到最低,特别是对大表进行DDL操作
DDL操作不能回滚
25. 大版本发布速度
PGSQL 11 正式版推出时间:2018年
PGSQL 12 正式版推出时间:2019年
MySQL
MySQL的大版本发布一般是2年~3年,一般大版本发布后的第二年才可以上生产环境,避免有坑,版本发布速度比较慢
MySQL5.5正式版推出时间:2010年
MySQL5.6正式版推出时间:2013年
MySQL5.7正式版推出时间:2015年
MySQL8.0正式版推出时间:2018年
26. returning语法
27. 内部架构
多线程架构,虽然多线程架构,但是官方有限制连接数,原因是系统的并发度是有限的,线程数太多,反而系统的处理能力下降,随着连接数上升,反而性能下降
一般同时只能处理200 ~300个数据库连接
28. 聚集索引
支持聚集索引
29. 空闲事务终结功能
不支持终止空闲事务功能
30. 应付超大数据量
不能应付超大数据量,MySQL自身架构的问题
31. 分布式演进
HTAP数据库:TiDB
分片集群: 各种各样的中间件,不一一列举
32. 数据库的文件名和命名规律
16454:表所在数据库的oid
3599:就是表对象的oid,当然,一个表的大小超出1GB之后会再生成多个物理文件,还有表的fsm文件和vm文件,所以一个大表实际会有多个物理文件
数据库名就是文件夹名,数据库文件夹下就是表数据文件,每个表都有对应的frm文件和ibd文件,存储元数据和表/索引数据,清晰明了,做介质恢复或者表空间传输都很方便
33. 权限设计
使用mysql库下面的5个权限表去做权限映射,简单清晰,唯一问题是缺少权限角色
user表
db表
host表
tables_priv表
columns_priv表
34. 发展历史
PGSQL
在1995年,开发人员Andrew Yu和Jolly Chen在Postgres中添加了一个SQL(Structured Query Language,结构化查询语言)翻译程序,该版本叫做Postgres95,在开放源代码社区发放。
在1996年,再次对Postgres95做了较大的改动,并将其命名为PostgresSQL 6.0版发布,PostgresSQL 的名字就此定型,从1995年算起,大概有24年历史
MySQL
在1996年,MySQL 1.0发布,它只面向一小拨人,相当于内部发布。
到了1996年10月,MySQL 3.11.1发布(MySQL没有2.x版本),最开始只提供Solaris操作系统下的二进制版本,一个月后,Linux版本出现
从1996年算起,大概有23年历史
小结
上面的对比表还不是很完善,只有一些本人认为比较关键的特性拿出来对比
总的来说,两种数据库都有优缺点,大家在选型的时候需要谨慎选择,MySQL需要多折腾,PGSQL让你少折腾,因为PGSQL本身已经做的比较完善,不太需要依赖一些第三方工具
当然,如果在MySQL上选择Percona 分支,MariaDB分支,或者Oracle官方的MySQL企业版就另当别论
MySQL因为需要支持更换存储引擎,所以某些功能都要受制于存储引擎层,例如:物理复制
而PGSQL不支持更换存储引擎(在PGSQL V12开始也支持可插拨的表存取接口),而且一直由官方统一开发和维护,所以相对比较稳定,功能也比较完善,对得上它的称号:《世界上功能最为强大的开源数据库》
PGSQL V12 支持可插拨的表存取接口之后,有可能由第三方存储引擎来改进PGSQL本身的MVCC实现机制,而不需要等待官方去解决,聚集索引、undo表空间这些都不再是问题
如果业务复杂的话,其实PGSQL是最佳选择,分享一篇文章:为什么“去O”唯有PG
新建思维导图
- 1. 安装,
- 2.建DBA , 监控 表空间,表 大小
- 3. 监控 日志,备份,
分布式集群之
-
分片表打散在每个work 节点 ,参考表 每个节点保留一个副本 https://blog.csdn.net/templarzq/article/details/100916016 citus