:-: 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性能是有所下降的,但是增加线程并发,数据库的新能得到很大提升。
由于环境设备有限,只采取了基础测试,仅供参考。***