热门标签 | HotTags
当前位置:  开发笔记 > 后端 > 正文

MySQL与postgresql二个数据库的对比

我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。一、两者的共同优势这两个产品

  我们这样的比较不想仅仅成为一份性能测试报告,因为至少从我个人来看,对于一个数据库,稳定性和速度并不能代表一切。对于一个成熟的数据库,稳定性肯定会日益提供。而随着硬件性能的飞速提高,速度也不再是什么太大的问题。

  一、两者的共同优势

  这两个产品都属于开放源码的一员,性能和功能都在高速地提高和增强。mysql ab的人们和postgresql的开发者们都在尽可能地把各自的数据库改得越来越好,所以对于任何商业数据库使用其中的任何一个都不能算是错误的选择。

  二、两者不同的背景

  mysql的背后是一个成熟的商业公司,而postgresql的背后是一个庞大的志愿开发组。这使得mysql的开发过程更为慎重,而postgresql的反应更为迅速。

  这样的两种背景直接导致了各自固有的优点和缺点。

  三、mysql的主要优点

  1、首先是速度,mysql通常要比postgresql快得多。mysql自已也宣称速度是他们追求的主要目标之一,基于这个原因,mysql在以前的文档中也曾经说过并不准备支持事务和触发器。但是在最新的文档中,我们看到mysql 4.0.2-alpha已经开始支持事务,而且在mysql的todo中,对触发器、约束这样的注定会降低速度的功能也列入了日程。但是,我们仍然有理由相信,mysql将有可能一直保持速度的优势。

  2、mysql比postgresql更流行,流行对于一个商业软件来说,也是一个很重要的指标,流行意味着更多的用户,意味着经受了更多的考验,意味着更好的商业支持、意味着更多、更完善的文档资料。

  3、与postgresql相比,mysql更适宜在windows环境下运行。mysql作为一个本地的windows应用程序运行(在 nt/win2000/winxp下,是一个服务),而postgresql是运行在cygwin模拟环境下。postgresql在windows下运行没有mysql稳定,应该是可以想象的。

  4、mysql使用了线程,而postgresql使用的是进程。在不同线程之间的环境转换和访问公用的存储区域显然要比在不同的进程之间要快得多。

  5、mysql可以适应24/7运行。在绝大多数情况下,你不需要为mysql运行任何清除程序。postgresql目前仍不完全适应24/7运行,这是因为你必须每隔一段时间运行一次vacuum。

  6、mysql在权限系统上比postgresql某些方面更为完善。postgresql只支持对于每一个用户在一个数据库上或一个数据表上的 insert、select和update/delete的授权,而mysql允许你定义一整套的不同的数据级、表级和列级的权限。对于列级的权限, postgresql可以通过建立视图,并确定视图的权限来弥补。mysql还允许你指定基于主机的权限,这对于目前的postgresql是无法实现的,但是在很多时候,这是有用的。

  7、由于mysql 4.0.2-alpha开始支持事务的概念,因此事务对于mysql不再仅仅成为劣势。相反,因为mysql保留无事务的表类型。这就为用户提供了更多的选择。

  8、mysql的merge表提供了一个独特管理多个表的方法。

  9、mysql的myisampack可以对只读表进行压缩,此后仍然可以直接访问该表中的行。

  四、postgresql的主要优点:

  1、对事务的支持与mysql相比,经历了更为彻底的测试。对于一个严肃的商业应用来说,事务的支持是不可或缺的。

  2、mysql对于无事务的myisam表。采用表锁定,一个长时间运行的查询很可能会长时间地阻碍对表的更新。而postgresql不存在这样的问题。

  3、postgresql支持存储过程,而目前mysql不支持,对于一个严肃的商业应用来说,作为数据库本身,有众多的商业逻辑的存在,此时使用存储过程可以在较少地增加数据库服务器的负担的前提下,对这样的商业逻辑进行封装,并可以利用数据库服务器本身的内在机制对存储过程的执行进行优化。此外存储过程的存在也避免了在网络上大量的原始的sql语句的传输,这样的优势是显而易见的。

  4、对视图的支持,视图的存在同样可以最大限度地利用数据库服务器内在的优化机制。而且对于视图权限的合理使用,事实上可以提供行级别的权限,这是mysql的权限系统所无法实现的。

  5、对触发器的支持,触发器的存在不可避免的会影响数据库运行的效率,但是与此同时,触发器的存在也有利于对商业逻辑的封装,可以减少应用程序中对同一商业逻辑的重复控制。合理地使用触发器也有利于保证数据的完整性。

  6、对约束的支持。约束的作用更多地表现在对数据完整性的保证上,合理地使用约束,也可以减少编程的工作量。

  7、对子查询的支持。虽然在很多情况下在sql语句中使用子查询效率低下,而且绝大多数情况下可以使用带条件的多表连接来替代子查询,但是子查询的存在在很多时候仍然不可避免。而且使用子查询的sql语句与使用带条件的多表连接相比具有更高的程序可读性。

  8、支持r-trees这样可扩展的索引类型,可以更方便地处理一些特殊数据。

  9、postgresql可以更方便地使用udf(用户定义函数)进行扩展。

  五、那么我究竟应该使用mysql还是postgresql

  这个问题很难说得清,而且事实上除了mysql和postgresql外,使用oracle、sybase、informix等也是明智的选择。如何你确定只在mysql和postgresql中进行选择,以下规则总是有效的。

  1、如果你的操作系统是windows,你应该使用mysql。

  2、如果你对数据库并不了十分了解,甚至不知道事务、存储过程等究竟是什么,你应该使用mysql。

  3、如果你的应用对数据的完整性和严肃性要求不高,但是追求处理的高速度。例如是一个论坛和社区,你应该使用mysql。

  4、你的应用是一个严肃的商业应用,对数据完整性要求很高。而且你希望对一些商业数据逻辑进行很好的封装,例如是一个网上银行,你应该使用postgresql。

  5、你的应用处理的是地理数据,由于r-trees的存在,你应该使用postgresql。

  6、你是一个数据库内核的狂热爱好者,你甚至希望拥有你自己版本的数据库,毫无疑问,你必须使用postgresql,没准下一个postgresql版本中某一个模块的作者就是你。

  后记

  以上只是作者从自己的理解尽量客观公正地评价mysql和postgresql的优劣。其中的带有倾向性的意见只代表作者个人观点,有关这两个数据库,欢迎广大朋友提出自己的看法


推荐阅读
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • Windows服务与数据库交互问题解析
    本文探讨了在Windows 10(64位)环境下开发的Windows服务,旨在定期向本地MS SQL Server (v.11)插入记录。尽管服务已成功安装并运行,但记录并未正确插入。我们将详细分析可能的原因及解决方案。 ... [详细]
  • 深入理解 SQL 视图、存储过程与事务
    本文详细介绍了SQL中的视图、存储过程和事务的概念及应用。视图为用户提供了一种灵活的数据查询方式,存储过程则封装了复杂的SQL逻辑,而事务确保了数据库操作的完整性和一致性。 ... [详细]
  • PHP 编程疑难解析与知识点汇总
    本文详细解答了 PHP 编程中的常见问题,并提供了丰富的代码示例和解决方案,帮助开发者更好地理解和应用 PHP 知识。 ... [详细]
  • 优化联通光猫DNS服务器设置
    本文详细介绍了如何为联通光猫配置DNS服务器地址,以提高网络解析效率和访问体验。通过智能线路解析功能,域名解析可以根据访问者的IP来源和类型进行差异化处理,从而实现更优的网络性能。 ... [详细]
  • 本文详细介绍如何使用Python进行配置文件的读写操作,涵盖常见的配置文件格式(如INI、JSON、TOML和YAML),并提供具体的代码示例。 ... [详细]
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 如何配置Unturned服务器及其消息设置
    本文详细介绍了Unturned服务器的配置方法和消息设置技巧,帮助用户了解并优化服务器管理。同时,提供了关于云服务资源操作记录、远程登录设置以及文件传输的相关补充信息。 ... [详细]
  • 本文详细介绍了如何在 Linux 平台上安装和配置 PostgreSQL 数据库。通过访问官方资源并遵循特定的操作步骤,用户可以在不同发行版(如 Ubuntu 和 Red Hat)上顺利完成 PostgreSQL 的安装。 ... [详细]
  • 解读MySQL查询执行计划的详细指南
    本文旨在帮助开发者和数据库管理员深入了解如何解读MySQL查询执行计划。通过详细的解析,您将掌握优化查询性能的关键技巧,了解各种访问类型和额外信息的含义。 ... [详细]
  • 本文详细分析了Hive在启动过程中遇到的权限拒绝错误,并提供了多种解决方案,包括调整文件权限、用户组设置以及环境变量配置等。 ... [详细]
  • 本文探讨了如何优化和正确配置Kafka Streams应用程序以确保准确的状态存储查询。通过调整配置参数和代码逻辑,可以有效解决数据不一致的问题。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 本文详细介绍了 MySQL 的查询处理流程,包括从客户端连接到服务器、查询缓存检查、语句解析、查询优化及执行等步骤。同时,深入探讨了 MySQL 中的乐观锁机制及其在并发控制中的应用。 ... [详细]
  • 本文介绍如何通过创建替代插入触发器,使对视图的插入操作能够正确更新相关的基本表。涉及的表包括:飞机(Aircraft)、员工(Employee)和认证(Certification)。 ... [详细]
author-avatar
minimiai_559
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有