postgresql(pg)数据库简介-new数据库
1.什么是PostgreSql
PostgreSQL是⼀个功能强⼤的开源对象关系型数据库系统,他使⽤和扩展了SQL语⾔,并结合了许多安全存储和扩展最复杂数据⼯作负载的功能。PostgreSQL的起源可以追溯到1986年,作为加州⼤学伯克利分校POSTGRES项⽬的⼀部分,并且在核⼼平台上进⾏了30多年的积极开发。
PostgresSQL凭借其经过验证的架构,可靠性,数据完整性,强⼤的功能集,可扩展性以及软件背后的开源社区的奉献精神赢得了良好的声誉,以始终如⼀地提供⾼性能和创新的解决⽅案。PostgreSQL在所有主要操作系统开始使⽤PostgreSQL从未如此简单。
2.为什么要使⽤PostgreSQL
PostgreSql提供了许多功能,旨在帮助开发⼈员构建应⽤程序,管理员保护数据完整性并且构建容错环境,并帮助你管理数据,⽆论数据集的⼤⼩。除了免费和开源之外,Postgre SQL还具有⾼度的可扩展性。例如,你可以定义⾃⼰的数据类型,构建⾃定义SQL函数(此sql函数在另⼀篇帖⼦讨论:点此跳转),甚⾄可以编写来⾃不同编程语⾔的代码,⽽不需要重新编译数据库。
PostgreSql试图符合SQL标准,在这种标准中,这种⼀致性不会与传统特性相⽭盾,或者可能导致糟糕的
架构决策。⽀持SQL标准所需的许多功能,但是有时候语法或者功能略有不同。随着时间的推移,可以预期进⼀步向⼀致性迈进。从2018年10⽉发布的11版本开
始,PostgreSQL符合SQL:2011核⼼⼀致性的179个强制性功能中的⾄少160个,在此之前,没有任何关系型数据库符合此标准的完全符合。
3.下⾯是PostgreSQL中的各种功能介绍
数据类型
1.基本类型:Integer, Numeric, String, Boolean
2.结构类型:Date/Time, Array, Range, UUID
3.⽂档类型:JSON/JSONB, XML, Key-value(Hstore)
4.⼏何类型:Point, Line, Circle, Polygon
5.⾃定义类型:Composite, Custom Types
数据的完整性
1.唯⼀性,不为空
2.主键
3.外键
4.排除约束
5.显式锁定,咨询锁定
并发性,性能
1.索引
2.⾼级索引
3.复杂的查询计划期/优化器
4.交互
5.多版本并发控制(MVCC)
6.读取查询的并⾏化和构建B树索引
7.表分区
8.Sql标准中定义的所有事物隔离级别,包括Serializable
9.即时表达式汇编(JIT)
可靠性,灾难恢复
1.预写⽇志(WAL)
2.复制:异步,同步,逻辑
3.时间点恢复(pitr),主动备⽤
4.表空间
安全性
1.⾝份验证:GSSAPI, SSPI, LDAP, SCRAM-SHA-256, 证书等
2.强⼤的访问控制系统
3.列和⾏级安全性
可扩展性mysql 字符串转数组
1.存储的功能和程序
2.程序语⾔:PL/PGSQL, Perl, Python (more)
3.外部数据包装器:使⽤标准SQL接⼝连接到其他数据库或流
4.许多提供附加功能的扩展,包括PostGIS
国际化,⽂本搜索
1.⽀持国际字符集,例如通过ICU校对
2.全⽂检索
对⽐Mysql
1.PostgreSQL的稳定性极强,Innodb等引擎在崩溃、断电之类的灾难场景下抗打击能⼒有了长⾜的进步,然⽽很多Mysql⽤户都遇到过Server级的数据库丢失的场景---Mysql系统库是MyISAM的,相较⽽⾔,PG数据库在这⽅⾯要好⼀些。
2.任何系统都有他的性能极限,在⾼并发读写,负载逼近极限下,PG的性能指标仍然可以维持双曲线甚⾄对数曲线,到顶峰之后不再下降,⽽MySQL明细出现⼀个波峰后下滑。
3.PG多年在GIS领域处于优势地位,因为它有丰富的⼏何类型,实际上不⽌⼏何类型,PG中有⼤量的字典、数组、bitmap等数据类型,相⽐之下MaySQL就差很多,insagram就是因为PG的空间数据库扩展POSTGIS远远强于MySQL的my spatial⽽采⽤PGSQL的。
4.PG的“⽆锁定”特性⾮常突出,甚⾄包括vacuum这样的整理数据空间的操作,这个和PGSSQL的MVCC实现有关系。
5.PG的可以使⽤函数和条件索引,这使得PG数据库的调优⾮常灵活,mysql就没有这个功能,条件索引在web应⽤中很重要。
6.PG有极其强悍的SQL编程能⼒,有丰富的统计函数和统计语法⽀持,⽐如分析函数(Oracle的叫法,PG⾥⾯叫Window函数),还可以⽤多种语⾔来写存储过程,对于R的⽀持也很好。这⼀点上MySQL就
差的很远,很多分析功能那个都没有,腾讯内部数据存储主要是Mysql,但是主要的数据分析就是Hadoop+PGsql。
7.PG的有很多中集架构可以选择,plproxy可以⽀持语句级的镜像或者分⽚,slony可以进⾏字段级的同步设置,standby可以构建WAL⽂件级或者流式的读写分离集,同步频率和集策略调整⽅便,操作⾮常简单。
8.⼀般关系型数据库的字符串有限定长度8k左右,⽆限长Text类型的功能受限,只能作为外部⼤数据访问。⽽PG的TEXT类型可以直接⽅法,SQL语法内置正则表达式,可以索引,还可以全⽂检索,或使⽤xml xpath。⽤PG的话,⽂档数据库就可以省略了
9.对于web应⽤来说,复制的特性很重要,Mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate, 是基于stream的复制,做到同步很困难,这种⽅式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时pgsql还提供stream复制。
10.Pgsql对于numa架构的⽀持要⽐mysql强⼀些,⽐mysql对于读的性能要好些,pgsql提交可以完全异步,⽽mysql的内存表不够实⽤(表锁原因)

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。