为什么postgrelsql的性能没有mysql好

为什么postgrelsql的性能没有mysql好,第1张

一、 PostgreSQL 的稳定性极强, Innodb 等引擎在崩溃、断电之类的灾难场景下抗打击能力有了长足进步,然而很多 MySQL 用户都遇到过Server级的数据库丢失的场景——mysql系统库是MyISAM的,相比之下,PG数据库这方面要好一些。
二、任何系统都有它的性能极限,在高并发读写,负载逼近极限下,PG的性能指标仍可以维持双曲线甚至对数曲线,到顶峰之后不再下降,而 MySQL 明显出现一个波峰后下滑(55版本之后,在企业级版本中有个插件可以改善很多,不过需要付费)。
三、PG 多年来在 GIS 领域处于优势地位,因为它有丰富的几何类型,实际上不止几何类型,PG有大量字典、数组、bitmap 等数据类型,相比之下mysql就差很多,instagram就是因为PG的空间数据库扩展POSTGIS远远强于MYSQL的my spatial而采用PGSQL的。
四、PG 的“无锁定”特性非常突出,甚至包括 vacuum 这样的整理数据空间的 *** 作,这个和PGSQL的MVCC实现有关系。
五、PG 的可以使用函数和条件索引,这使得PG数据库的调优非常灵活,mysql就没有这个功能,条件索引在web应用中很重要。
六、PG有极其强悍的 SQL 编程能力(9x 图灵完备,支持递归!),有非常丰富的统计函数和统计语法支持,比如分析函数(ORACLE的叫法,PG里叫window函数),还可以用多种语言来写存储过程,对于R的支持也很好。这一点上MYSQL就差的很远,很多分析功能都不支持,腾讯内部数据存储主要是MYSQL,但是数据分析主要是HADOOP+PGSQL。
七、PG 的有多种集群架构可以选择,plproxy 可以支持语句级的镜像或分片,slony 可以进行字段级的同步设置,standby 可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便, *** 作非常简单。
八、一般关系型数据库的字符串有限定长度8k左右,无限长 TEXT 类型的功能受限,只能作为外部大数据访问。而 PG 的 TEXT 类型可以直接访问,SQL语法内置正则表达式,可以索引,还可以全文检索,或使用xml xpath。用PG的话,文档数据库都可以省了。
九,对于WEB应用来说,复制的特性很重要,mysql到现在也是异步复制,pgsql可以做到同步,异步,半同步复制。还有mysql的同步是基于binlog复制,类似oracle golden gate,是基于stream的复制,做到同步很困难,这种方式更加适合异地复制,pgsql的复制基于wal,可以做到同步复制。同时,pgsql还提供stream复制。
十,pgsql对于numa架构的支持比mysql强一些,比MYSQL对于读的性能更好一些,pgsql提交可以完全异步,而mysql的内存表不够实用(因为表锁的原因)
最后说一下我感觉 PG 不如 MySQL 的地方。
第一,MySQL有一些实用的运维支持,如 slow-querylog ,这个pg肯定可以定制出来,但是如果可以配置使用就更好了。
第二是mysql的innodb引擎,可以充分优化利用系统所有内存,超大内存下PG对内存使用的不那么充分,
第三点,MySQL的复制可以用多级从库,但是在92之前,PGSQL不能用从库带从库。
第四点,从测试结果上看,mysql 55的性能提升很大,单机性能强于pgsql,56应该会强更多
第五点,对于web应用来说,mysql 56 的内置MC API功能很好用,PGSQL差一些。
另外一些:
pgsql和mysql都是背后有商业公司,而且都不是一个公司。大部分开发者,都是拿工资的。
说mysql的执行速度比pgsql快很多是不对的,速度接近,而且很多时候取决于你的配置。
对于存储过程,函数,视图之类的功能,现在两个数据库都可以支持了。
另外多线程架构和多进程架构之间没有绝对的好坏,oracle在unix上是多进程架构,在windows上是多线程架构。
很多pg应用也是24/7的应用,比如skype 最近几个版本VACUUM基本不影响PGSQL 运行,80之后的PGSQL不需要cygwin就可以在windows上运行。
至于说对于事务的支持,mysql和pgsql都没有问题。

有一件事触动了我。当我解释和回答Docker初学者提出的问题时,我发现其中一个很普遍,那就是当老的解决方案仍然可以解决现有问题时,大家又在寻找新的解决方案。
工程师有一个癖好,就是忘记他们所知道的,然后他们可以不用做太多改变,而在一个新的范例中很大程度上运用这些已经掌握的知识。所以最终,这篇博客有三个目的:
给你一个例子使用Docker执行使用
提醒你,你在docker到来之前所获得的知识仍然是有用的
帮助你构建将这个知识放到容器中的思维
真的,这篇文章可以被称为备份RDBMS和Docker,但我需要一些具体的例子。因为这篇文章是关于PostgreSQL触发的问题,我决定就这样做。
这里的情况。有一个PostgreSQL服务器运行在一个Docker容器,和你非常满意的这两个很棒的软件的结合。但是你是一个聪明的人,你知道,迟早,您将需要备份的数据库。也许硬件将会失败,或者新的实习生将会失败,你永远不会知道的。所以你决定定期备份数据库。
但是如何做到这一点。PostgreSQL运行在Docker中,并没有明显的方式访问数据。
问题可以归结为对您的PostgreSQL实例运行pg_dump,和你有三种方式实现这一目标。
根据您的版本的Docker,使用nsenter或Docker执行以获得shell在容器内,并将您的数据(使用pg_dump)转储到一个共享卷(postgres容器运行PostgreSQL的名称):
docker exec postgres pg_dump -h db -f /shared/backupsql
但我们可以做的更好,对吗理想的流程将涉及能够连接到PostgreSQL无需一个shell的容器。有两种方法可以做到这一点。
首先,用容器的一切方法。你建立一个pg_dump容器(这是一个容器,pg_dump作为它的入口点),并将其链接到PostgreSQL容器在运行时。这里有一个 pg_dump容器的Dockerfile
用 docker build 构建
注意:建立一个特定的容器pg_dump不是强制性的。Damien如上所述的评论,你重新使用 包含 pg_dump在内的PostgreSQL镜像一点儿问题都没有。我们在这里建立一个容器是因为要练习。
运行:
在你的PostgreSQL postgres的容器中运行。

PostgreSQL是一个强大开源的对象关系类型数据库系统,它能运行于几乎所有主要的 *** 作系统,包括Linux、Unix(AIX、BSD、HP-UX、SGIIRIX、MacOS、Solaris、Tru64)、WindowsOS。在这篇教程里,我们将学习如何在CentOS7/65/64server中建立PostgreSQL。1安装PostgreSQL首先根据你的服务器架构添加PostgreSQL库:对CentOS6x32bit:rpm-Uvhtcpfirewall-cmd--reload3访问PostgreSQL常用的命令提示符默认情况下数据库名和用户名都是postgres。切换至用户以执行相关 *** 作:su–postgres输入以下命令登陆:psql会有以下样例输出:psql(935)Type"help"forhelpPostgres=#可通过输入\q退出postgresql返回命令终端:4设置用户密码登陆至postgres命令提示符界面su–postgrespsql然后使用命令设置密码postgres=#\passwordpostgresEnternewpassword:Enteritagain:postgres=#\q输入命令以建立PostgreSQL系统管理工具postgres=#CREATEEXTENSIONadminpack;CREATEEXTENSION5创建用户和数据库例如:用户名:senthil密码:centos数据库名:mydb转到postgres用户su–postgres创建用户senthil$createusersenthil创建数据库$createdbmydb现在登陆至psql提示符界面,为用户senthil设置密码及授权对数据库mydb的访问:$psqlpsql(935)Type"help"forhelppostgres=#alterusersenthilwithencryptedpassword'centos';ALTERROLEpostgres=#grantallprivilegesondatabasemydbtosenthil;GRANTpostgres=#6删除用户和数据库首先转到postgres界面su–postgres输入命令$dropdb删除用户名可输入$dropuser7配置PostgreSQL-MD5认证MD5认证需要客户端提供一个MD5-encrypted密码以便身份验证。你需要编辑/var/lib/pgsql/93/data/pg_hbaconf文件:vi/var/lib/pgsql/93/data/pg_hbaconf添加或修改的行如下:[]#TYPEDATABASEUSERADDRESSMETHOD#"local"isforUnixdomainsocketconnectionsonlylocalallallmd5#IPv4localconnections:hostallall127001/32md5hostallall19216810/24md5#IPv6localconnections:hostallall::1/128md5[]重启postgresql服务以应用更改在CentOS6x系统中servicepostgresql-93restart在CentOS7系统中systemctlrestartpostgresql-938配置PostgreSQL-ConfigureTCP/IP默认情况下,TCP/IP连接是不可行的,所以其他计算机用户不能连接到postgresql。编辑文件/var/lib/pgsql/93/data/postgresqlconf可以允许连接:vi/var/lib/pgsql/93/data/postgresqlconf找到下面的行:[]#listen_addresses='localhost’[]#port=5432[]把两行都取消并设置为你的postgresql服务器IP地址或设置为“”监听所有客户端。如下所示:listen_addresses=''port=5432重启以应用更改在CentOS6x系统中:/etc/initd/postgresql-93restart在CentOS7系统中:systemctlrestartpostgresql-939使用phpPgAdmin管理PostgreSQLphpPgAdmin是使用PHP编写的基于web的管理工具,用于管理PostgreSQL。它只适用与PostgreSQLRPM库。如果你没有添加PostgreSQL库,你可以添加EPEL库。可根据下面的链接在CentOS6x中建立EPEL库

green plum是MPP数据库的一种,是一种分布式数据库,支持SQL和MapReduce的并行处理功能,并能以较低的成本向管理最大PB量级数据的企业提供业界领先的性能;
PostgreSQL 是一个自由的对象-关系数据库服务器(数据库管理系统),它在灵活的 BSD-风格许可证下发行。
PostgreSQL可以用于C/S(客户/服务器)环境。greenplum数据库支持postgresql。


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/13445430.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-08-07
下一篇 2023-08-07

发表评论

登录后才能评论

评论列表(0条)

保存