现在的位置: 首页 > 综合 > 正文

mysql与postgresql比较(借鉴)

2014年09月30日 ⁄ 综合 ⁄ 共 4210字 ⁄ 字号 评论关闭


MySQL 与 PostgreSQL 比较,选哪个

为了弄明白PostgreSQL和MySQL的差别,我搜索了关键字:MySQL vs PostgreSQL,并看了第一页的几个文章。以下是简单总结:

MySQL与PostgreSQL的区别

MySQL是应用开发者创建出来的DBMS;而PostgreSQL是由数据库开发者创建出来的DBMS [1]。

换句话说,MySQL倾向于使用者的角度,回答的问题是 “你想解决的是什么问题”;而PostgreSQL倾向于理论角度,回答的问题是 “数据库应该如何来解决问题” [2]。

MySQL一般会将数据合法性验证交给客户;PostgreSQL在合法性难方面做得比较严格。比如MySQL里插入 "2012-02-30" 这个时间时,会成功,但结果会是 "0000-00-00";PostgreSQL不允许插入此值。

通常,PostgreSQL 被认为特性丰富,而MySQL被认为速度更快。但这个观点基本是在 MySQL 4.x / PostgreSQL 7.x 的事情,现在情况已经变了,PostgreSQL 在9.x版本速度上有了很大的改进,而MySQL特性也在增加[3]。

在架构上,MySQL分为两层:上层的SQL层和几个存储引擎(比如InnoDB,MyISAM)。PostgreSQL 只有一个存储引擎提供这两个功能。

这两个数据库系统都可以针对应用的情境被优化、定制,精确的说哪个性能更好很难。MySQL项目一开始焦点就在速度上,而PostgreSQL一开始焦点在特性和规范标准上。

选哪个?

可能是由于历史原因MySQL在开发者中更流行一些。至少我们上学时没听说过PostgreSQL,当时不是MS SQL Server就是MySQL,而MySQL是开源的。实事上PostgreSQL直到8.0才官方支持了Windows系统。

如果没有什么历史原因(比如系统已经基于MySQL多年了),或技术积累原因(同事中MySQL高手多),那么我觉得选择PostgreSQL不会有错。

有趣的是,我在Google上搜索 "switch postgresql to mysql" 时,结果中第一页全是 "Switch to PostgreSQL from MySQL",第二页终于有个是from PostgreSQL to MySQL,不过只有它一个,而且原因不是说PostgreSQL不好,而是因为作者MySQL经验多些[4]。

附录:简单测试

最后附上我自己对MySQL v5.5PostgreSQL v9.1 在Mac OS,ML上的简单测试。MySQL是用brew安装的,PostgreSQL用的是Heroku提供的app绿色版本。因为都是默认安装,默认的配置,所以比较结果只是拿来参考。

表结构:

Column       |           Type           | Modifiers 
-------------------+--------------------------+-----------
 id                | bigint                   | not null
 created_at        | timestamp with time zone | not null
 from_user         | character varying(40)    | not null
 from_user_id      | bigint                   | not null
 from_user_name    | character varying(40)    | not null
 geo               | character varying(256)   | not null
 iso_language_code | character varying(8)     | not null
 source            | character varying(64)    | not null
 text              | character varying(170)   | not null
 to_user           | character varying(40)    | not null
 to_user_id        | bigint                   | not null
 to_user_name      | character varying(40)    | not null
Indexes:
    "tweets_tweet_test_pkey" PRIMARY KEY, btree (id)

测试数据为100w多行真实Twitter数据:

$ head -n4 out_pg.sql
INSERT INTO tweets_tweet_test VALUES (287343655826624513, '2013-01-05 07:44:00+08', 'KevinPetrollini', 395657199, 'Kevin', '', 'zh', 'web', '给我的鞭子。', '', 0, '');
INSERT INTO tweets_tweet_test VALUES (287142303481597952, '2013-01-04 18:23:54+08', 'mikaweixian', 65584780, 'M I K A. ', '', 'zh', 'Instagram', '唔知點解旅行返來日日都覺得好悶 ✈ 我重係不習慣一個人 






0
0
主题推荐
postgresql
mysql
ms sql server
开发者
数据库
猜你在找

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场


抱歉!评论已关闭.