MySQL和PostgreSQL两数据库的对决
- 格式:docx
- 大小:12.87 KB
- 文档页数:2
选择pgsql还是mysqlpgsql又称PostgresSQL,出现在1986年,官方标榜自己是世界上最先进最高级的开源关系型数据库。
pgsql和mysql简介:pgsql的一些粉丝说可以跟oracle相媲美,可靠性是pgsql的最高优先级,数据一致性与完整性也是pgsql的高优先级特性;mysql和pgsql都出现在一些高流量的web站点上,都能用在大型分布式系统上,都支持事务,都支持全文索引;mysql现在已经支持嵌入式应用,而pgsql依然坚守在传统B/S 架构上;mysql能够进行快速地读取和大量的查询操作,不过在复杂特性与数据完整性检查方面不太尽如人意;pgsql是针对事务性企业级应用严肃、功能完善的数据库,支持强ACID特性,会做很多数据完整性检查;mysql上myISAM存储引擎因为执行很少的数据完整性检查,所以速度快,对于敏感数据,对读写要求高的数据,支持ACID特性的InnoDB则是个更好的选择,相反pgsql是个只有单一存储引擎完全集成的数据库;mysql与pgsql都是高可配置的,通过参数调整性能,也可以调整查询与事务特性,他们都支持通过扩展添加额外的功能;pgsql可靠性更好,稳定性很强,在保护数据安全方面更擅长,并且是社区项目,不会陷入商业厂商牢笼之中;mysql的普及更广一些,学习资料更多,熟练使用的人更多,所以选择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,但是数据分析主要是hadoop pgsql;pgsql有多种集群架构可选择,plproxy可以支持语句级的镜像或分片,slony可以进行字段级的同步设置,standby可以构建WAL文件级或流式的读写分离集群,同步频率和集群策略调整方便,操作非常简单;pgsql支持topology、pgrouting等功能强大、方便使用的GIS 扩展,例如可以用pgrouting计算路径规划;pgsql数据库方便QGIS等GIS工具连接和图层展示等操作;下图是用QGIS从pgsql读取数据并展示图层:mysql相比pgsql的优势:mysql采用索引组织表,这种存储方式非常适合基于主键匹配的查询、删改操作,但是对表结构设计存在约束;mysql的优化器较简单,系统表、运算符、数据类型的实现都很精简,非常适合简单的查询操作;mysql分区表的实现要优于pgsql的基于继承表的分区实现,主要体现在分区个数达到上千上万后的处理性能差异较大;mysql的存储引擎插件化机制,使得它的应用场景更加广泛,比如除了Innodb适合事务处理场景外,Myisam适合静态数据的查询场景;mysql也支持空间索引,是用R树实现的空间索引,但空间函数等功能不如pgsql丰富,空间查询比pgsql慢;pgsql更适合严格的企业应用场景,比如金融、电信、ERP、CRM等,mysql更适用业务逻辑相对简单、数据可靠性要求更低的互联网场景,比如google、facebook、淘宝等。
MySQL和PostgreSQL两数据库的对决在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。
我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。
对于一个成熟的数据库,稳定性肯定会日益提供。
而随着硬件性能的飞速提高,速度也不再是什么太大的问题。
一、前言前一段时间,我曾经翻译过一篇将你的网站从MySQL改为PostgreSQL,其实当初我更感兴趣的是一个应用程序的后台数据库从MySQL转为PostgreSQL的具体操作,并没有关心MySQL和PostgreSQL的优劣,没想到反应出乎意料的大,因此我也就觉得有写这篇文章的必要了。
在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。
我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。
对于一个成熟的数据库,稳定性肯定会日益提供。
而随着硬件性能的飞速提高,速度也不再是什么太大的问题。
二、两者的共同优势这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。
MySQLAB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。
三、两者不同的背景MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。
这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。
这样的两种背景直接导致了各自固有的优点和缺点。
四、MySQL的主要优点1、首先是速度,MySQL通常要比PostgreSQL快得多。
数据库管理系统:PostgreSQL和MySQL的差异PostgreSQL和MySQL是两种常用的关系型数据库管理系统(RDBMS),它们在很多方面都有相似之处,比如都是开源的、可以在多个平台上运行、支持SQL等等。
但是,它们之间也有不同点,这篇文章将简要介绍这些不同点,以便读者可以更好地选择适合自己需求的数据库管理系统。
1.数据类型PostgreSQL和MySQL在数据类型方面有些区别,例如PostgreSQL 支持数组类型、范围类型和JSON类型,而MySQL不支持。
此外,PostgreSQL还支持网络地址和CIDR类型,以及各种几何数据类型,而MySQL则不支持这些类型。
这些不同可能对于需要使用这些数据类型的应用程序有影响。
2.存储引擎MySQL具有多种存储引擎,其中包括InnoDB、MyISAM等。
InnoDB 是MySQL的默认存储引擎,它支持事务和外键。
而MyISAM不支持事务和外键,但比较适合于只读的应用程序。
PostgreSQL则只有一个存储引擎,即MVCC。
MVCC是多版本并发控制的缩写,它是PostgreSQL实现隔离级别的方式。
它允许多个用户同时访问数据库,每个用户看到的数据都是根据他们所在的事务版本而定的。
这些版本是通过创建快照来实现的,这个快照包括所有已提交的数据。
MVCC的优点是可以确保并发访问的同时,还能提供高可靠性和数据完整性,但是,它的缺点是需要更多的存储空间来存储快照,因此可能导致性能下降。
3.复杂操作PostgreSQL在处理复杂操作和大型数据集时更为出色。
例如PostgreSQL支持CTE(公共表表达式)和窗口函数,这些函数可以让用户更轻松地进行复杂的分析操作。
此外,PostgreSQL还支持全文搜索,这使得用户可以更轻松地搜索包含关键字的文本。
MySQL则在处理事务时更为出色。
MySQL支持更严格的事务隔离级别,因此在多个用户执行写操作时,MySQL可以保证数据的一致性和完整性。
Mysql和Postgresql(PGSQL)对⽐PostgreSQL与MySQL⽐较使⽤太⼴泛了,以⾄于我不得不将⼀些应⽤从mysql 迁移到postgresql, 很多开源软件都是以Mysql 作为标准,并且以Mysql 作为抽象基础的,但是具体使⽤过程中,发现Mysql 有很多问题,所以都迁移到postgresql上了,转⼀个Mysql 和Postgresql 对⽐的⽂章:PostgreSQL由于是类似Oracle的多进程框架,所以能⽀持⾼并发的应⽤场景,这点与Oracle数据库很像,所以把Oracle DBA转到PostgreSQL数据库上是⽐较容易的,毕竟PostgreSQL数据库与Oracle数据库很相似。
同时,PostgreSQL数据库的源代码要⽐MySQL数据库的源代码更容易读懂,如果团队的C语⾔能⼒⽐较强的知,就能在PostgreSQL数据库上做开发,⽐⽅说实现类似greenplum的系统,这样也能与现在的分布式趋势接轨。
为了说明PostgreSQL的功能,我下⾯简要对⽐⼀下PostgreSQL数据库与MySQL数据库之间的差异:我们先借助Jametong翻译的"从Oracle迁移到Mysql之前必须知道的50件事",看⼀看如何把Oracle转到MySQL中的困难:50 things to know before migrating Oracle to MySQLby Baron Schwartz,Translated by Jametong1. 对⼦查询的优化表现不佳.2. 对复杂查询的处理较弱3. 查询优化器不够成熟4. 性能优化⼯具与度量信息不⾜5. 审计功能相对较弱6. 安全功能不成熟,甚⾄可以说很粗糙.没有⽤户组与⾓⾊的概念,没有回收权限的功能(仅仅可以授予权限).当⼀个⽤户从不同的主机/⽹络以同样地⽤户名/密码登录之后,可能被当作完全不同的⽤户来处理.没有类似于Oracle的内置的加密功能.7. ⾝份验证功能是完全内置的.不⽀持LDAP,Active Directory以及其它类似的外部⾝份验证功能.8. Mysql Cluster可能与你的想象有较⼤差异.9. 存储过程与触发器的功能有限.10. 垂直扩展性较弱.11. 不⽀持MPP(⼤规模并⾏处理).12. ⽀持SMP(对称多处理器),但是如果每个处理器超过4或8个核(core)时,Mysql的扩展性表现较差.13. 对于时间、⽇期、间隔等时间类型没有秒以下级别的存储类型.14. 可⽤来编写存储过程、触发器、计划事件以及存储函数的语⾔功能较弱.15. 没有基于回滚(roll-back)的恢复功能,只有前滚(roll-forward)的恢复功能.16. 不⽀持快照功能.17. 不⽀持数据库链(database link).有⼀种叫做Federated的存储引擎可以作为⼀个中转将查询语句传递到远程服务器的⼀个表上,不过,它功能很粗糙并且漏洞很多.18. 数据完整性检查⾮常薄弱,即使是基本的完整性约束,也往往不能执⾏。
MySQL和其他数据库的对比及选择指南引言:在当今信息化时代,数据已经成为企业和组织中最重要的资产之一。
数据库技术的发展和应用已经成为大数据时代的关键驱动力之一。
在众多数据库中,MySQL以其开源、免费、易用等特点受到了广泛的青睐。
然而,随着技术的不断进步和需求的增长,其他数据库也不断崭露头角。
本文将比较MySQL和其他数据库,旨在帮助读者在众多选择中做出明智的决策。
一、性能对比性能是评估数据库的一个重要指标,直接关系着系统的效率和响应速度。
下面我们将MySQL与其他数据库进行性能对比。
1. MySQL vs. OracleOracle数据库是关系数据库的代表,它具有较高的性能和可靠性。
然而,Oracle的高昂的许可费用使其在中小型企业中的应用受到了限制,相比之下,MySQL是一个开源数据库,免费并且易于安装和维护。
针对小规模项目,MySQL 的性能已经完全能够满足需求。
2. MySQL vs. MongoDBMongoDB是一种面向文档的数据库,它以其高性能和水平扩展能力而闻名。
与MySQL相比,MongoDB具有更好的读取和写入性能,尤其适用于处理大量非结构化数据。
然而,MySQL在事务处理和数据一致性方面表现更加出色。
综上所述,根据具体的需求,选择合适的数据库是至关重要的。
如果注重可靠性和事务处理,可以选择MySQL或Oracle;如果注重大数据和高性能,可以选择MongoDB。
二、功能对比数据库的功能也是衡量其优劣的重要标准之一。
不同的数据库在功能方面存在一些差异,下面我们将来比较MySQL和其他数据库的功能。
1. MySQL vs. PostgreSQLPostgreSQL是另一种常见的开源关系型数据库,与MySQL相比,PostgreSQL 在功能方面更加强大。
例如,PostgreSQL支持更多的数据类型、索引和查询优化器,并且具有更好的事务支持和并发控制能力。
2. MySQL vs. Amazon AuroraAmazon Aurora是亚马逊推出的一种兼容MySQL和PostgreSQL的云数据库服务。
基于PostgreSQL和mysql数据类型对⽐兼容1、数值类型整数:mysql中的整数类型和pg相⽐,两者有以下区别:mysql:mysql中⽀持int 1,2,3,4,8 字节,同时⽀持有符号,⽆符号。
并且mysql中⽀持在数值列中指定zerofill,⽤来将存储的数值通过填充0的⽅式达到指定数据类型的长度(mysql8开始不建议使⽤ZEROFILL属性,并且在将来的MySQL版本中将不再⽀持该属性)。
pg:pg⽀持 int 2,4,8 字节,且数值都是有符号的。
mysql整数类型:pg整数类型:那么对于mysql中的1,3字节整型,或者⽆符号整型以及zerofill特性,在pg中该如何实现呢?在pg中我们可以使⽤domain来实现mysql中的1,3字节整数以及⽆符号整型。
创建uint8,8字节⽆符号整型bill=# create domain uint8 as numeric(20,0) check (value <= ((2^64::numeric)::numeric(20,0)-1) and value>=0::numeric(20,0));CREATE DOMAIN使⽤domain,插⼊整型数据,且⼤于等于0,⼩于2^64bill=# create table t5(c1 uint8);CREATE TABLEbill=# insert into t5 values (-1);ERROR: value for domain uint8 violates check constraint "uint8_check"bill=# insert into t5 values (0);INSERT 0 1bill=# insert into t5 values (18446744073709551615);INSERT 0 1bill=# insert into t5 values (18446744073709551616);ERROR: value for domain uint8 violates check constraint "uint8_check"bill=# select * from t5;c1----------------------18446744073709551615(2 rows)同样我们也可以来创建domain实现1,3字节有⽆符号整型,2,4,8字节⽆符号等等:create domain int1 as int2 CHECK (VALUE <= 127 AND VALUE >= (-128));create domain uint1 as int2 CHECK (VALUE <= 255 AND VALUE >= 0);create domain uint2 as int4 CHECK (VALUE <= 65535 AND VALUE >= 0);create domain int3 as int4 CHECK (VALUE <= 8388607 AND VALUE >= (-8388608));create domain uint3 as int4 CHECK (VALUE <= 16777215 AND VALUE >= 0);create domain uint4 as int8 CHECK (VALUE <= 4294967295 AND VALUE >= 0);create domain uint8 as numeric(20,0) check (value <= ((2^64::numeric)::numeric(20,0)-1) and value>=0::numeric(20,0));⽽对于mysql中的zerofill,我们可以使⽤lpad函数来实现,并且这也是mysql官⽅⽂档中推荐的⼀种⽅式。
MySQL与其他数据库系统的比较在当今信息化时代,数据库是各个企业和组织不可或缺的组成部分。
它能够帮助组织存储、管理和检索数据,促进业务的发展和决策的制定。
MySQL作为最热门的开源关系型数据库管理系统之一,在数据库市场中占有重要的地位。
然而,与MySQL类似的其他数据库系统也在企业中得到了广泛的应用。
本文将从性能、可扩展性、安全性和生态系统等方面,对MySQL与其他数据库系统进行比较。
一、性能比较数据库系统的性能是企业选择的关键因素之一。
MySQL作为一个经过优化的数据库系统,在基准测试中呈现出良好的性能。
然而,与之相比,其他数据库系统也有各自的优势。
1.1 OracleOracle作为全球领先的关系型数据库系统,以其强大的性能而闻名。
Oracle的查询优化器能够根据查询的复杂性和数据分布情况,选择最佳的执行计划来提高查询速度。
此外,Oracle还使用多线程架构来充分利用多核处理器的性能优势。
1.2 PostgreSQLPostgreSQL是另一个强大的开源关系型数据库系统,它在性能方面与MySQL 相媲美。
PostgreSQL具有高度可配置的查询优化器,可以根据数据库管理员的需求进行调整。
此外,PostgreSQL还支持并行查询和复制,进一步提高了系统的处理能力。
1.3 MongoDBMongoDB是一个非常受欢迎的NoSQL数据库系统,其性能优势主要在于其基于文档的数据模型和存储引擎。
相比于关系型数据库系统,MongoDB的插入和查询速度更快,特别适用于大规模数据的存储和实时数据处理。
二、可扩展性比较随着企业业务的增长,数据库系统的可扩展性变得越来越重要。
MySQL与其他数据库系统在可扩展性方面的差异主要体现在以下几个方面。
2.1 MySQLMySQL通过复制和分片来实现横向扩展。
复制是指将数据复制到多台机器上,提高读取性能和冗余容错能力。
而分片是指将数据分散到多个MySQL实例中,通过分布式计算来提高写入性能和存储能力。
MySQL和PostgreSQL两数据库的对决
在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。
我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。
对于一个成熟的数据库,稳定性肯定会日益提供。
而随着硬件性能的飞速提高,速度也不再是什么太大的问题。
一、前言
前一段时间,我曾经翻译过一篇将你的网站从MySQL改为PostgreSQL,其实当初我更感兴趣的是一个应用程序的后台数据库从MySQL转为PostgreSQL的具体操作,并没有关心MySQL和PostgreSQL的优劣,没想到反应出乎意料的大,因此我也就觉得有写这篇文章的必要了。
在这篇文章中,我们选用MySQL4.0.2-alpha与PostgreSQL7.2进行比较,因为MySQL4.0.2-alpha开始支持事务的概念,因此这样的比较对于MySQL应该较为有利。
我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。
对于一个成熟的数据库,稳定性肯定会日益提供。
而随着硬件性能的飞速提高,速度也不再是什么太大的问题。
二、两者的共同优势
这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。
MySQLAB的人们和PostgreSQL的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。
三、两者不同的背景
MySQL的背后是一个成熟的商业公司,而PostgreSQL的背后是一个庞大的志愿开发组。
这使得MySQL的开发过程更为慎重,而PostgreSQL的反应更为迅速。
这样的两种背景直接导致了各自固有的优点和缺点。
四、MySQL的主要优点
1、首先是速度,MySQL通常要比PostgreSQL快得多。
MySQL自已也宣称速度是他们追求的主要目标之一,基于这个原因,MySQL在以前的文档中也曾经说过并不准备支持事务和触发器。
但是在最新的文档中,我们看到MySQL4.0.2-alpha已经开始支持事务,而且在MySQL的TODO中,对触发器、约束这样的注定会降低速度的功能也列入了日程。
但是,我们仍然有理由相信,
MySQL将有可能一直保持速度的优势。
2、MySQL比PostgreSQL更流行,流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。