💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
:-: pgsql调研报告 --: 时间:2018.09.12 作者:Darren.liu * * * * * ### 业务场景需求: 能不能找一款数据库,同时具有MySQL结构化数据存储,及MongoDB非结构化数据存储的结合体?! ### pgsql一句概括: pgsql是最强大的开源数据库,且号称最先进的数据库。它有强大的扩展功能;本身的多线程架构,支持必行处理;它的流式同步复制,可以保证数据的零丢失。 ### 自身特性: 1.MySQL不支持MPP(大规模并行处理),但支持支持SMP(对称多处理器),但是如果每个处理器超过4或8个核(core)时,Mysql的扩展性表现较差。而PostgreSQL是类似Oracle数据库的架构,是多进程的架构,而不像MySQL是多线程的架构,所以能支持MPP(大规模并行处理)。 2.扩张性能好,Postgres天生就是为扩展而生的,除了支持sql语句编写函数,你可以在PG中用Python、C、Perl、TCL、PLSQL等语言来扩展功能函数。 ### 数据类型: 1.pgsql支持的数据类型远优于MySQL,除了共有的数据类型,它还包括位串、几何、数组、json、range、复合、还包括自定义及引用,它每一种数据类型都对应着自己的运算符和函数操作,所以支持的业务场景多,运算能力强大。 2.Mysql查询优化器对于子查询、复制查询如多表关联、外关联的支持等较弱,特别是在关联时对于三大join技术:hash join、merge join、nestloop join的支持方面,Mysql只支持最后一种nestloop join(据说未来会支持hash join),而多个大表关联分析时hash join是必备的利器,缺少这些关键功能非常致命。pgsql在这方面的能力就非常突出。 ### 优化性能: 1.pgsql支持对同一字段建立不同的索引类型,规划器会自己选择最合适的索引类型应用。 2.pgsql灵活易用的专有sql,使语句更加简洁且功能强大,如ditinct on,ilike等。 3.Pgsql在常用的参数优化数量上,并没有MySQL那么多且复杂。(个人认为主要是存储引擎单一) ### 维护管理: 1.pgsql在用户管理和权限上他支持继承的特性,MySQL是没有的。 2.Pgsql在库创建的时候,是复制模板template1,所以完全可以根据业务场景不同封装特有的库。 3.Pgsql管理工具pgadmin,它是由官方开发维护的,他的强大之处是你所有的管理操作都可以通过界面化实现,而且支持内存,io的监控等(强大吧) ### 主从应用: 最后他的复制,由最初的预写日志复制到后来的流式复制,大大提高了复制的性能和响应速度,同样支持同步复制,异步复制。自身就支持重新选主特性,不需要手动切换,这是MySQL做不到的。 ### pgsql缺点: 暂不支持json数据类型的批量更新,与我们场景使用不符合。 ### 压力测试结果: 环境配置 CentOS 7-CPU 1core-RAM 1G-SATA 20G PG 10.5 Vmware 10 1)//1个session 5个事物 1个线程 ./pgbench -c 1 -t 5 -j 1 -r postgre latency average = 2.607 ms tps = 383.564565 (including connections establishing) tps = 494.973495 (excluding connections establishing) 2)//150个session 5个事物 1个线程 ./pgbench -c 150 -t 5 -j 1 -r postgre latency average = 697.466 ms tps = 215.064125 (including connections establishing) tps = 215.523529 (excluding connections establishing) 3)150个session 5个事物,调整线程数量8 、16线程测试信息如下 8线程 latency average = 340.330 ms tps = 440.748272 (including connections establishing) tps = 446.363146 (excluding connections establishing) 16线程 latency average = 325.124 ms tps = 461.362132 (including connections establishing) tps = 475.233399 (excluding connections establishing) ***综上所述,在我们用户连接数不断增加情况下,数据库tps性能是有所下降的,但是增加线程并发,数据库的新能得到很大提升。 由于环境设备有限,只采取了基础测试,仅供参考。***