mysql vs postgresql vs sqlite vs mysql

对mysql没有什么发言权。
就对postgresql谈一点使用的感受吧。
用postgresql也有快一年了。碰到问题主要是当一个表的数据量超过50w条记录的时候,select速度就变的很慢。对数据库和系统做了优化都不行,一个普通的select语句就要执行很久。所以经常导致连接数不够,这点很让人郁闷。

这个论坛有个存储关键词的表已经有283万条记录了,目前也基本上是这个数据库经常发生lock的地方。phpbb有个地方很不好,她在你发新贴 的时候检索关键词往这个表里面插入,所以会导致时不时发贴点击提交以后,要过很久很久才能成功。原来使用MyISAM的时候table level lock,经常会发生提交以后过了好久,页面不响应了,白提交了;现在改成了InnoDB,是row level lock,情况已经好多了,但是有时候还是感觉挺慢的,偶尔会出现错误。

reference:http://www.javaeye.com/topic/13042?page=3      

innodb: 15.19
myiasm: 14.34
pgsql: 23.41
sqlite3: 锁住了
sqlite3(单线程): 300+
mongodb: 3.82
couchdb: 90
couchdb(单线程):66

作为一个MySQL黑,看到这组测试数据我表示压力很大。在SQL数据库中,mysql意外地取得了最佳的成绩,好于pgsql,远好于 sqlite。更令人意外的是myisam居然优于号称insert比较快的innodb。不管如何,对我的应用来说,用mysql保存评论数据是一个更 为明智的选择。我对mysql彻底改观了,我宣布我是mysql半黑。以后select-intensive的应用我还是会选择sqlite,但是 insert/update-intensive的应用我就会改用mysql了。

MongoDB和CouchDB同为NoSQL,表现却截然相反,MongoDB性能很高,CouchDB的并发性能我只能ORZ,这种性能实在太抱歉了。

NoSQL的碎碎念

其实我本来还打算测试cassandra的,可是cassandra用的是java,这首先让我眉头一皱,内存大户我养不起啊,其次看了 cassandra的文档,立刻崩溃,这简直就是没有文档么。(BTW,CouchDB也好不到哪里去,我都是用python-couchdb然后 help(couchdb.client)看用法的)

至于CouchDB,可能是因为采用http方式发送请求,所以并发性能糟糕的一塌糊涂,很怀疑它是否有存在的理由。

MongoDB是我用下来最讨人喜欢的一个NoSQL。不但文档丰富,使用简单,性能也非常好,它的Map/Reduce查询(很多NoSQL都 有)让我惊叹,数据库可以非常简单地就扩大规模,完全不用理会什么分区分表之类繁琐的问题,可惜这方面我暂时没有需求。但是MongoDB有两大致命问 题。

第一是删除锁定问题,当批量删除记录时,数据库还是会锁定不让读写。这意味着进行数据清理时会让网站应用失去响应。见locking problems

第二是内存占用问题,MongoDB用了操作系统的内存文件映射,这导致操作系统会把所有空闲内存都分配给MongoDB,当MongoDB有这个 需要时。更可怕的是,MongoDB从来不主动释放已经霸占的内存,它只会滚雪球一样越滚越大,除非重启数据库。这样的上下文环境下,MongoDB只适 合一台主机就一个数据库,而没有其他应用的环境,否则一会儿功夫MongoDB就会吃光内存,然后你都fork不出新进程,彻底悲剧。见memory limit

总之NoSQL虽然让我眼前一亮,可是目前尝试的一些产品都让人望而生畏,现在的NoSQL都把目光放在了巨型网站上,而没有一个小型的,可以在 VPS里面应用的高性能NoSQL,令我有点失望。NoSQL尚未成熟,很期待它的将来发展,目前来说MySQL还是更好的选择。

reference:http://508206df.blog.chinabyte.com/2010/03/19/48/

原文地址:https://www.cnblogs.com/lexus/p/1806105.html