PostgreSQL—适合金融的数据库

前言

最近工作中接触了PostgreSQL,之前一直有听说这个数据库。但因为被称为下一代数据库的数据库太多了,而自己又不是数据库方向,Mysql和oracle已经可以满足要求,故而一直都是坚持在Mysql或Oracle。而最近深入接触Pgsql后,自己的感悟是这个数据库更适合金融;要解释为什么我觉得更适合金融,首先要从目前主流的mysql方案说起(说起mysql必然是分布式场景,集中式场景金融公司还是会选择oracle的)

Mysql方案遇到的问题

互联网的主力数据库技术体系还是Mysql为主,因为高并发确实是互联网的常见场景,各大厂为了支持自己的业务,Mysql的分库分表技术日益精湛,高并发写场景、多维度查询场景、大数据查询各种方案都日趋成熟。既然这样金融系统建设直接用mysql不是很好吗?
如果是不考虑成本的情况下确实是可以了,而大多数的公司也确实这么做了(这里的成本指的是包括了硬件成本、软件成本、运维成本、人力成本等综合评估)

【分库分表要面临的问题】

  • 分库分表方案选择
  • 复杂查询问题
  • 运维成本问题
  • 人才支持问题

1、分库分表方案选择
虽然分库分表还是一个挺复杂的过程,给的建议都是能通过分库解决,就别分表,能垂直分表解决就别水平分表,简而言之就是能不分就不分,而金融业务特点不同于互联网,大部分情况oracle rac基本可以支持了,或者按照时间做下分表,全维度查询通过数仓或者大数据平台解决;
但虽然金融和互联网的融合越来越多,如果业务一定要进行水平分表的话,自建方案常见的就是 mycat、tddl、sharding sphere吧。不过如果不是自己想扛起数据库的故障处理,还是建议采用商业或云分布式数据库吧,开源方案只是理论方案,做了基础的拆分,但高可用、容错等问题都需要自己去搞定,金融生产非同儿戏,如果自己不是数据库专家,建议还是交给专业的人解决。

2、复杂查询支持
其实数据库我们考虑无非是OLAP和OLTP,后来又出现了“集大成”的HTAP,是不是集大成不知道,但肯定是要通过场景验证才行,是骡子是马你得拉出来溜溜,不要只相信原理。而很多大厂的交易数据库都是OLTP支持非常好,这也是互联网业务逼的大家对OLTP的技术突飞猛进,所以他们的方案用来解决金融场景绰绰有余,而金融场景除了头部公司,大多都不回面临这种高并发的问题,但往往被厂商夸大并发场景来带货。
其实mysql的分不分表就是面临的这个问题,由于分表一定会根据某种规则拆分(一般都是有个分表键,即使不用手动设置,也是根据主键hash拆分来完成),所以必然会带来查询条件不带分表键,全库扫描的问题。不管是什么全局索引也好、优化算法也好,这个问题都没办法解决,分表少都好说,百表千表的时候这个问题就不得不解决了。其实解决这个问题的方法我的粗浅认知是只能是列存储解决(之前面临这个问题就是通过搜索引擎方案解决的,但由于增加了一个数据源,必然要考虑高可用、数据延迟、一致性、风险防控等一系列问题)

3、 运维成本
除了常规数据库DBA运维工作外,分库分表中间件的维护、功能升级以及高可用方案,数据一致问题,还有灾备数据如何存储、如何恢复问题等;当然还有日常的表变更、脚本执行,如果自己没有工具,手工去做的话,一旦出问题就是要花很多时间去排查解决

4、 人才支持
这个问题就不说了

其实以上这些问题互联网大厂都解决了,但付出的成本也是巨大的,这也是为什么会有双中台的方案(服务中台 + 技术中台)。那下面就说说为什么PostgreSQL更适合金融吧,首先要从Postgre的特点说起。

PostgreSQL简介

PostgresSQL官方标榜自己是世界上最先进最高级的开源关系型数据库,有这个自信就不错😄 这个不予评价了,仁者见仁智者见智,我不是数据库专家不乱说了,PostgreSQL数据库是目前功能最强大的开源数据库这点应该是争议不大,至少我没看反驳的声音,可能是孤落寡闻了。另外Pgsql讲可靠性、数据一致性与完整性最为最高优先级,这点上更符合金融的诉求,Pgsql主要特点:

  • 稳定可靠:PostgreSQL是唯一能做到数据零丢失的开源数据库。目前有报道称国内外有部分银行使用PostgreSQL数据库。

  • 开源省钱: PostgreSQL数据库是开源的、免费的,而且使用的是类BSD协议,在使用和二次开发上基本没有限制。

  • 支持广泛:PostgreSQL 数据库支持大量的主流开发语言,包括C、C++、Perl、Python、Java、Tcl以及PHP等。

  • PostgreSQL社区活跃:PostgreSQL基本上每3个月推出一个补丁版本,这意味着已知的Bug很快会被修复,有应用场景的需求也会及时得到响应,但和mysql这点比确实还是有些距离的。

  • 和Oracle兼容度高: 这点也是适合金融的原因之一,因为金融公司大多是依赖oracle的,而受国家政策影响都会面临一个去O的问题。

金融谈数据库就不得不去和Mysql、Oracle对比,下面看下我整理的一些信息。

Round 1 : PgSql vs MySql — 对比

pgsql相比mysql的优势

pgsql存储过程的功能支持要比mysql好,具备本地缓存执行计划的能力;

pgsql对表连接支持更完整,优化器的功能更完整,支持的索引类型很多,复杂查询能力较强;

pgsql主备复制属于物理复制,支持异步、同步、半同步复制,mysql基于binlog的逻辑复制,是异步复制,pgsql数据的一致性更加可靠,复制性能更高,对主机性能的影响也更小;

pgsql支持json数据类型,而mysql不支持,mysql字符型有长度限制,而pgsql的text类型无限长,可以使用xml xpath,用pgsql的话,mongodb这样文档数据库就省了;

pgsql是完全免费开源的,而mysql归属oracle后,开源程度大不如以前;

pgsql在GIS领域多年来处于优势地位,有丰富的几何类型,支持极其丰富的空间函数,可以建立R树、GIST树等空间索引,instagram就是因为pgsql的空间数据库扩展postgis远远强于mysql的my spatial而采用的pgsql;

pgsql有极其强悍的sql编程能力,有非常丰富的统计函数和统计语法支持,可用多种语言写存储过程,对R支持也非常好,这一点mysql就差的很远,

mysql相比pgsql的优势:

mysql采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;

mysql的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;

mysql分区表的实现要优于pgsql的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大;

mysql的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了Innodb适合事务处理场景外,Myisam适合静态数据的查询场景;

mysql也支持空间索引,是用R树实现的空间索引,但空间函数等功能不如pgsql丰富,空间查询比pgsql慢;

对比结论

空间操作比较多,数据逻辑比较复杂,推荐使用PostgreSQL
对数据安全性和稳定性要求很高,推荐使用PostgreSQL
业务场景复杂度不高,高并发大交易量的场景,推荐使用MySQL

pgsql更适合严格的企业应用场景,比如金融、电信、ERP、CRM等,mysql更适用业务逻辑相对简单、数据可靠性要求更低的互联网场景,比如google、facebook、淘宝等。

PostgreSQL和oracle是进程模式,MySQL是线程模式。进程模式对多CPU利用率比较高。
进程模式共享数据需要用到共享内存,而线程模式数据本身就是在进程空间内都是共享的,不同线程访问只需要控制好线程之间的同步。
线程模式对资源消耗比较少。
所以MySQL能支持远比oracle多的更多的连接。
对于PostgreSQL的来说,如果不使用连接池软件,也存在这个问题,但PostgreSQL中有优秀的连接池软件软件,如pgbouncer和pgpool,所以通过连接池也可以支持很多的连接。

Round 2 : PgSql vs Oracle— 兼容

PostgreSQL与Oracle有很多相似之处,它们都是使用共享内存的进程结构,客户端与数据库服务器建立一个连接后,数据库服务器就启动一个进程来为这个连接服务。这与MySQL的线程模型不一样。

PostgreSQL与Oracle一样,PostgreSQL的WAL日志与Oracle的Redo日志都是用于记录物理块数据的变化的,这与MySQL的binlog是不一样的。

那如果是选择Oracle还是Pgsql的问题上,我的回答当然是Oracle,Oracle可以支持为什么选开源呢,而且Oracle确实强大,抛开开源,能用Oracle满足的还是不建议分布式数据库,运维成本和应用复杂度低很多。

不过在现在这个大环境下,去O之势在所难免,所以此时去O的成本就至关重要。

信息来源:
(1)https://baijiahao.baidu.com/s?id=1654604491258542404&wfr=spider&for=pc
(2)https://blog.csdn.net/huzechen/article/details/109541854
(3)https://blog.csdn.net/saint_alamo/article/details/7547920
(4)https://blog.csdn.net/weixin_34087307/article/details/89570853
(5)https://blog.csdn.net/xiaohai928ww/article/details/103742856

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

【江湖】三津

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值