论坛首页 综合技术论坛

MySQL vs PostgreSQL

浏览 107732 次
该帖已经被评为精华帖
作者 正文
   发表时间:2005-05-15  
我对 Open Source License 理解不深。以前在自己做试验的一些小东西中,都使用MySQL数据库。
后来,一个技术上经常交流的同事告诉我说,MySQL DB 和 MySQL JDBC Lib 都是 GPL的。这意味着使用它,就要开源,或者付费获得Commercial License。PostgreSQL是BSD的,最自由,限制最少。

为了保险起见,我就转向了PostgreSQL,并开始关注论坛上关于Open Source License的讨论。并决定,自己发布的Small Open Source things 都要是BSD。
0 请登录后投票
   发表时间:2005-05-15  
Use it like this if you want to move your database to an Oracle:
>mysqldump -u root --password="root" --compatible=oracle ejbtest > ejbtest.sql.oracle

我太爱Mysql了,现在可以不用powerdesign来转换符合某一特定数据库的ddl。
0 请登录后投票
   发表时间:2005-05-15  
robbin,你啊,总是喜欢不把别人的话完全看清楚。我也没有说过 MySQL 不适合 OLTP 啊,呵呵。甚至没有误导群众的任何动机。

这里有一个最新的测试数据:
http://monstera.man.poznan.pl/wiki/index.php/Mysql_vs_postgres
我们假设这里的数据是真实的,作者是有良心的,没有任何偏向。我们来做一个分析:
对于 insert 操作,MySQL MyISAM 性能最好,而 MySQL InnoDB 性能最差,PostgreSQL 打开 fsync 和关闭 fsync 的性能处于 MySQL 两种 table 类型之间。

对于 select 操作,MySQL InnoDB 性能最好,MySQL 的两种 table 类型的性能都要比 PostgreSQL 打开或者关闭 fsync 的性能要好。
加上 order by 以后,MySQL 两种 table 类型做 select 的性能仍然比 PostgreSQL 要好。

对于 delete 操作,MySQL MyISAM 性能最好,MySQL InnoDB 性能最差。

这个测试是非常简单的。从某个侧面证实了 MySQL 的 select 操作的性能确实要比 PostgreSQL 好的多,因此 MySQL 非常适合做 OLAP 一类的应用。而使用 InnoDB 的 MySQL 在 insert 和 delete 时的性能优势并没有充分体现出来。

这个测试其实是非常简单的。robbin 我们有空了可以使用 MySQL 5.0 和 PostgreSQL 8.01 再测试一下。在测试之前别忘记对于 MySQL 和 PostgreSQL 都做一些调优。

这里还有一篇很老的文章,里面说了什么时候应该选择 PostgreSQL,这些建议在当时(2002 年)都是非常正确的,对于今天的情况我来逐一做个评价:
http://builder.com.com/5100-6388-1050671.html

Complex database design
有多复杂?MySQL 5.0 推出以后,也可以支持相当复杂的数据库设计了。
Moving away from Oracle, Sybase, or MSSQL
这是因为 MySQL 5.0 正式版本(不要推荐我们在企业应用中使用 alpha 版或者 beta 版)还没有推出,一般用户还无法使用视图/存储过程/触发器。我的亲身经历可以证明,由于 PostgreSQL 存储过程的 PL/pgSQL 语言与 Oracle 的 PLSQL 的语法非常接近,因此将 Oracle 的存储过程或触发器移植到 PostgreSQL 上面是非常容易的事情。而且 PostgreSQL 和 Oracle 一样都是基于对象的数据库,其文档中对于一些概念的描述非常相似。所以熟悉 Oracle 的开发人员转向 PostgreSQL 是非常容易的。
Complex rule sets (i.e., business rules)
PostgreSQL 可以定义非常复杂的 SQL 重写规则,但是我们一般不常使用这个功能。
Use of procedural languages on the server Transactions
PostgreSQL 支持用多种语言开发存储过程,包括 PL/pgSQL, PL/Tcl, PL/Perl, PL/Python, PL/PHP, PL/Java 等等,这极大地方便了不同语言的开发人员。
Use of stored procedures
存储过程 MySQL 5.0 马上就会提供,我们期待着它能给我们带来惊喜。
Use of geographical data
地理数据我们几乎从来不会用到。
R-Trees (i.e., used on indexes)
R-Tree 有什么意义?哪位科班出身的网友帮我解释一下。

这篇文章虽然很老,但是其中提出的选择方法还是有指导意义的。作者认为在性能非常重要的场合,应该选择 MySQL。但是选择 PostgreSQL 这些考虑因素,将随着 MySQL 5.0 的推出,提供大量新的企业级特性后不再那么重要。其实我觉得大部分场合下,性能往往才是第一考虑的因素。性能只是一个方面,高可用性也是非常重要的方面。在这方面 MySQL 现在走在了 PostgreSQL 的前面。

说到这里我又要开始捣浆糊了,robbin 一定会皱眉头的。其实 MySQL 和 PostgreSQL 都是非常优秀的开源软件,我们都应该支持,都有必要去深入研究。正是因为这两大对手多年来的竞争和对决,我们才有了今天的方便。

另外关于 buaawhl 所说的 License 问题,这个问题确实是一些大公司(例如富士通)选择 PostgreSQL 的主要原因。MySQL JDBC Driver 的高版本也使用了 GPL 授权,这意味着通过其连接 MySQL,也需要公布你的源代码。
http://dev.mysql.com/downloads/connector/j/3.1.html
看仔细这段话:
引用
NOTE: By downloading the software from this page, you acknowledge that the software available from here is licensed under the GPL. We advise that you review the GPL before downloading.

If you need commercial, non-GPL, licenses, you can order them online.

MySQL 的双 License 的含义是:要么选择 GPL,为开源事业作贡献;要么就付钱购买商业的 License。没有其它的选择。这合理吗?当然很合理,天下哪里有什么免费的午餐?不过 MySQL 的商业 License 是非常便宜的,所以不必太担心。请看:
http://china.nikkeibp.co.jp/china/news/com/200402/com200402030111.html
QT 的策略同样也是这样,GPL 和商业 License 并行。这就是游戏规则,我们必须要遵守。
http://www.mysql.com/network/faq.html#8.5
引用
ISVs and Resellers, who are embedding and reselling the MySQL database server as part of their own commercial solutions, can purchase a MySQL commercial license.

另外关于 MySQL 的 License 问题,需要仔细看一下这篇文档:
http://www.mysql.com/company/legal/licensing/faq.html
0 请登录后投票
   发表时间:2005-05-15  
buaawhl 写道
我对 Open Source License 理解不深。以前在自己做试验的一些小东西中,都使用MySQL数据库。
后来,一个技术上经常交流的同事告诉我说,MySQL DB 和 MySQL JDBC Lib 都是 GPL的。这意味着使用它,就要开源,或者付费获得Commercial License。PostgreSQL是BSD的,最自由,限制最少。

为了保险起见,我就转向了PostgreSQL,并开始关注论坛上关于Open Source License的讨论。并决定,自己发布的Small Open Source things 都要是BSD。


Linux就是GPL License,那么是不是大家一用Linux操作系统,上面跑的什么程序都必须开源了呢?

GPL恐惧症
0 请登录后投票
   发表时间:2005-05-15  
chikaiwang 写道
Use it like this if you want to move your database to an Oracle:
>mysqldump -u root --password="root" --compatible=oracle ejbtest > ejbtest.sql.oracle

我太爱Mysql了,现在可以不用powerdesign来转换符合某一特定数据库的ddl。


刚刚试过了,把plog的表数据使用该方法从MySQL4.1.10a导出,然后导入到Oracle10g,失败!一堆语法错误!
0 请登录后投票
   发表时间:2005-05-15  
R-tree是B-tree的扩展,好像叫区域树吧,用于多维数据查询,比如Use of geographical data ,一般用不到

PostgreSQL 的设计思路上就有完整的DBMS的倾向——不仅仅是RDBMS,甚至有很多高级特性是商业数据库都不具备。所以用在某些特殊场合还是很不错的。
0 请登录后投票
   发表时间:2005-05-16  
MySQL, PostgreSQL, InterBase, MaxDB, FireBird, Ingres 的 数据吞吐量如何?

只找到一篇2002 年的文章。还没有Ingres。也没提到 FireBird。
http://www.csdn.net/news/newstopic/4/4986.shtml
It said:
MySQL: 并发用户数小于100,数据量小于10G。
PostgreSQL, InterBase, MaxDB:  几百用户、几十G数据

用Open Source Database 关键字搜索,看到几个Open Source Database 的 Benchmark / comparison 网站名字,但是却不能访问。
0 请登录后投票
   发表时间:2005-05-16  
buaawhl 写道
MySQL, PostgreSQL, InterBase, MaxDB, FireBird, Ingres 的 数据吞吐量如何?

只找到一篇2002 年的文章。还没有Ingres。也没提到 FireBird。
http://www.csdn.net/news/newstopic/4/4986.shtml
It said:
MySQL: 并发用户数小于100,数据量小于10G。
PostgreSQL, InterBase, MaxDB:  几百用户、几十G数据

用Open Source Database 关键字搜索,看到几个Open Source Database 的 Benchmark / comparison 网站名字,但是却不能访问。


扯淡的文章!
0 请登录后投票
   发表时间:2005-05-16  
5.0提供了太多的新特性了,Views, Stored procedures, Tiggers,还有
5.1的Full joins,Constraints,Cursors,我觉得等到5.0正式发布,再和postgreSQL8.0在window和linux下再做一次全面比较,会更加公平一点。我还是认为,拿mysql尚未正式发布的特性,来和postgreSQL已经发布了几个版本的成熟特性,做假定的等同比较,是不太公平的。

我觉得robbin最大的关注点还是在负载能力和查询速度,这方面毫无疑问是mysql优胜,大多数人也承认这个,虽然大多数也是基于mysql的不支持事务才快的误识。(不过我还是奇怪,为什么InnoDB这么强,为什么mysql还是不把默认的table类型改为它,还是MyISAM优先呢?)

相对mysql的查询速度优势,postgreSQL在复杂查询方面的优势可以扳回分数。mysql现在还不支持full joins就是一个例证,虽然实际中很少用到。在一个存在比较多的复杂查询企业应用,postgreSQL应该更加胜任。

至于高级特性方面,现在两个数据库都不如商业产品,但是到底最后谁走得更快更好,很难说,并不能单单靠mysql有个大商业公司撑腰就下定论,IT行业,最激动人心的事情,就是以弱胜强,以小胜大,例如linux对微软,hibernate对ejb,postgreSQL一开始就是以构建一个完善的数据库产品作为目标,其核心架构设计应该相对的优雅和容易扩展,所以我相信它会走在前面。
0 请登录后投票
   发表时间:2005-05-16  
引用
至于高级特性方面,现在两个数据库都不如商业产品,但是到底最后谁走得更快更好,很难说,并不能单单靠mysql有个大商业公司撑腰就下定论,IT行业,最激动人心的事情,就是以弱胜强,以小胜大,例如linux对微软,hibernate对ejb,postgreSQL一开始就是以构建一个完善的数据库产品作为目标,其核心架构设计应该相对的优雅和容易扩展,所以我相信它会走在前面。


Linux背后有IBM,HP在撑腰,否则Linux还不如FreeBSD(就服务器操作系统来评价)。

就算没有Hibernate,还有JDO对EJB2取得优势,所以不能说Hibernate打败EJB,更何况Hibernate3还是JBoss EJB3的实现,你这么说,Gavin King就第一个跳出来和你拼命!

商业公司的支持是不可或缺的,不管你承认还是不承认。

所谓的PostgreSQL核心架构更优雅云云恐怕是你自己的臆测吧,否则请说出什么地方更优雅,我倒很想了解一下。
0 请登录后投票
论坛首页 综合技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics