最近在看mysql文档,发现了很多好耍的东西,同时也发现了很多不好耍的东西.
想对比一下mysql和pgsql,于是到baidu上随便搜了几篇文章.其中有一篇文章写的不错.而且其中有一段话写的很经典:"没有好的数据库,只有合适的数据库"

以下文章转自:http://blog.chinaunix.net/u/553/showart.php?id=283310
Mysql与Postgresql数据性能比较
数据量今后会很大/你无法预测 数据量会多大,建议换postgresql.

mysql 在一定量数据后(一般观点是 mysql 单表 200-300万 时性能最好,数据再多性能就开始下降),性能下降很快,且大数据量情况下,mysql 稳定性/数据可靠性是问题。

postgresql 8.2 的官方说明如下:

http://www.postgresql.org/about/

QUOTE:
Limit Value
Maximum Database Size Unlimited
Maximum Table Size 32 TB
Maximum Row Size 1.6 TB
Maximum Field Size 1 GB
Maximum Rows per Table Unlimited
Maximum Columns per Table 250 - 1600 depending on column types
Maximum Indexes per Table Unlimited
mysql 目前只是适合 跑 web 应用,对于海量数据存储、数据仓库 不合适。

postgresql 在国内早有人做大型商业应用。

QUOTE:
对于大型应用,PostgreSQL 还是合适的。以下是PostgreSQL 中文官方手册维护者 何伟平 laser 对于一个 大型应用 的回复:

QUOTE:
怎么说呢,实际上,我现在手头就有一个庞大的数据库,
数据+索引已经超过500G了,数据总量超过30亿行数据,
每天会忙12小时左右。

基本上,我觉得,首先:
检查你的IO投资,不要在硬盘上吝啬。
第二,仔细分析自己的瓶颈是什么,
很多事后,我们并不一定需要database replicate。
第三,适当使用数据的切割。

简单归结一句话:
适当的硬件投资和规划加上合适的软件结构。
具体的事情需要具体分析。

介绍一下我们那个500G的大库:
单机HP DL385,16G内存和6块SCSI磁盘,20块SATA磁盘盘阵,
盘阵是HP DL320S,(MSA1500),相当便宜。
我们的构造是SCSI是RAID5,跑XFS,SATA,RAID5,跑EXT3,
目前,性能非常满意(我们的角度),有些update语句,一次
会更新几百万行数据,那么我们有些程序,一天要更新几十次,
基本上也可以在1000s之内完成。每天vacuum一次,在低负载的
时段,大概需要120min~200min,用slony做数据的备份,备份
到一台大硬盘的IDE机器上(1.5T硬盘,别惊讶,现在750G硬盘
才3500块钱。)。
这台机器是数据挖掘的,并发数不多,所以我们没有做负载方面
的均衡。

有问题可以继续讨论。
测试,mysql vs postgresql

QUOTE:
Mysql 不适应 大量数据,密集运算,重型负载应用。

至少在目前,开源数据库的质量还不能与商业数据抗衡。

在 2006-11-29 有个国外第3方服务器机构(Tweakers.net)做的 Mysql 4.1.20 ,Mysql 5.1.20a 与 PostgreSQL 8.2 的对比性能测试(在不同档次配置的机器上运行). 你可以参考.
Posted by fsluiter@gmail.com

Tweakers.net, a dutch community of online tweakers, benchmarked their potential new server with PostgreSQL 8.2 vs several versions of MySQL 4.1.20 and MySQL 5.1.20a

图文测试统计报告:
http://tweakers.net/reviews/657/6


QUOTE:
如果要求更高,推荐使用性能优异的 bizgres 集群。

参考:
http://bbs.chinaunix.net/viewthr ... page%3D1&page=1

QUOTE:
2亿的单表,slect crount(*) from table; 来全表扫描。

同配置单主机 硬件: 内存8G,每台机器是两个双核的AMD86.磁盘Raid0+1

Oracle 10g用了50秒,postgresql的普通集群用来一分40秒.

改用Bizgers 这个 PostgreSQL   高性能集群(使用)后,速度是 Oracle 的4倍。


mysql超过1亿行慢得和蜗牛一样。

你的要求恐怕最好是使用Oracle,DB2 强力商业数据库才合适.

如果非要用开源的,在Mysql与PostgreSQL之间选,更合适的是PostgreSQL:

1."海量数据","复杂业务逻辑" 这两条 PostgreSQL占绝对优势,Mysql 的确快,但只是在小数据量时很快,但如果巨量数据,性能下降很快比PostgreSQL快多了.

在巨量数据条件下Mysql可靠性成问题,今天就有朋友给我抱怨"我也就做DIscuz-BBS Mysql 库也就10GB 大,数据时不时损坏,经常需要mycheck修复数据才行.很想让系统定期check";另一个朋友也插话说他的mysql数据库到了100G后三天两头 数据损坏,搞的头大.

Postgresql 我所知道的例子是有库到了4TB 正常运行.

2."频繁的数据统计和分析,可能会运用到不少商业智能、统计模型和预测的应用" 这条也是 PostgreSQL占优势.

Mysql 只在到了5.0 时引进了,InnoBDB 数据表格式后 才具有初步的事务处理能力,目前还是很简陋,且,InnoBDB 比 默认的 MyISAM 性能差.

Mysql 如果只是查询数据(数据不多)性能不错,但其他操作就没那么出色.如果用InnoBDB 和开启 Mysql 5.0 以来添加的新的企业用途功能后,性能根本不能与PostgreSQL比.


PostgreSQL 功能很全,甚至有些功能商业数据库也不具备,用于商业事物处理的功能很久以前就很成熟.


呵呵,我也是PostgreSQL新手,只是喜欢探索和看书,看资料.

你这种要求,最好去咨询国内最著名的PostgreSQL 大牛 何伟平 -->去他的 www.pgsqldb.org 找他,他是创办人,有丰富的PostgreSQL商用经验,最近在 <<程序员杂志>>2006-6月号上发表一篇专门介绍 开源数据库的文章(Mysql,Postgresql,FireBird),也简单介绍了一个PostgreSQL商用案例.

[ 本帖最后由 likuku 于 2006-9-1 22:51 编辑 ]


gh.duowan.com,使用PostgreSQL。

27G的数据量,200W的日访问量

下面是该网站维护者Chanix给我的回复,仅作参考:

---------------------------------

我的机房是电信线路,网通访问比较慢。这几天流量突涨,效率上正在进行优化。从最前端的 squid 到最后的 数据库服务器都在不断调整和优化中。

我负责的站也有社会性软件的思想设计的社区。可以看看 http://home.duowan.com

PG不是完美的数据库,肯定是有缺点的。我认为主要的缺点就是进程模式,一个进程处理一个连接,这样的处理方式较消耗资源。不过从另外一方面来讲,就是因为使用了“落后的”进程模式所以才能达到这么稳定的效果。世上的东西总是双刃剑。。。

MYSQL的确是快,呵呵,特别是ISAM。目前使用MYSQL做SNS类型网站的成功案例也不少。例如 mixi.jp myspace.com LiveJournal.com 等等,都是上T容量,上百台数据库服务器。。。而且MYSQL支持的表的类型比较多,ISAM INNODB HEAP。。。可以按照数据的使用状态来进行灵活的使用。

说说为什么我选择PG吧。
我选择PG是因为从6系列开始我就一直在用,比较熟悉。而且我实在是不认为没有ACID的东西可以叫数据库。。。当时MYSQL还在3系列,连最基本的事 务功能也没有,更加别说什么触发器,函数了。插入记录竟然还是表锁,并发插入一多,整个系统马上和纸搭的房子一样坍塌掉(很不幸,当时我做的那个应用插入 比较多)。。。

MYSQL也有它的优点,这个不是重点,我就不多说了。

我对PG比MYSQL熟悉的多。所以我选择PG。这个是最主要的原因。到目前为止,PG还没有让我失望。我觉得你的选型也可以这样考虑的,从实际中看两者各有优劣。也各有成功案例。很难说SNS只有PG能做,或者只有PG能做。

还是那句话,没有好的数据库,只有合适的数据库。找到最合适你使用的数据库才是最好的选择 微笑 正如我虽然选择PG,但没有排斥MYSQL,在我负责的站点中,还是有很多应用是使用MYSQL的。


顺带说一句:
MYSQL要4系列以后,使用INOODB才支持事务。而INOODB与PG之间的效率差别我测试的结果不是很大。

有空可以去看看源代码。MYSQL支持事务的那段代码比起PG比较起来,PG的清晰多了(虽然,我哪个都写不出来 害羞 )。

PG的确稳定,我有个应用我正准备废掉,所以不想花时间优化了,那台数据库服务器每天UPTIME超100。我现在都懒的管了。反正只要访问的人少了,肯定能恢复过来。换成MYSQL,已经崩溃,数据库受损了。

PG一旦出问题,那就是真的出问题了。MYSQL不是,出问题了,你可以通过 repair 来修,不过修理的结果是对是错,你就自己掌握吧。我是试过一个表,系统很高兴的告诉我修理成功!结果发现唯一键字都出重复,害的我整了一通宵。

PG最大的问题我认为在于一个连接一个进程。一台机器上最大的进程数是有限制的,也就意味着可以同时处理的连接数比MYSQL小的多。

PG需要整理,虽然8系列以后出现了 auovaccum 但是还是很麻烦。这也是目前我比较头痛的问题。因为网站是24*7对外开放的,所以不可能停机去VACCUM FULL,幸好机器硬盘够大,呵呵。这个问题也是我一直想请教LARSER的。

PG的中文资料太少!用的人少,可以请教的人也不多。不象MYSQL,哪个书店里面都有什么XXX天精通MYSQL之类的书,到处都有人吹嘘自己精通MYSQL(即使他只会SELECT + UPDATE)。