zoukankan      html  css  js  c++  java
  • 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/

  • 相关阅读:
    @RequestParam注解使用:Name for argument type [java.lang.String] not available, and parameter name information not found in class file either.
    cglib动态代理导致注解丢失问题及如何修改注解允许被继承
    springboot Autowired BeanNotOfRequiredTypeException
    git根据用户过滤提交记录
    不同包下,相同数据结构的两个类进行转换
    How to use Jackson to deserialise an array of objects
    jooq实践
    java如何寻找main函数对应的类
    Python--matplotlib
    Python 和 Scikit-Learn
  • 原文地址:https://www.cnblogs.com/lexus/p/1806105.html
Copyright © 2011-2022 走看看