zoukankan      html  css  js  c++  java
  • mysql 与mongodb的特点与优劣

    首先我们来分析下mysql 与mongodb的特点与优劣。
    下面是我以前做的ppt的部分截图。






    再来分析下应用场景,
    a.如果需要将mongodb作为后端db来代替mysql使用,即这里mysql与mongodb 属于平行级别,那么,这样的使用可能有以下几种情况的考量:
    (1)mongodb所负责部分以文档形式存储,能够有较好的代码亲和性,json格式的直接写入方便。(如日志之类)
    (2)从data models设计阶段就将原子性考虑于其中,无需事务之类的辅助。开发用如nodejs之类的语言来进行开发,对开发比较方便。
    (3)mongodb本身的failover机制,无需使用如MHA之类的方式实现。

    这种情况也是不少的,我手上的游戏就是有nodejs+mongodb的,用户总量也是千万级别的,流水什么还不错。

    b.将mongodb作为类似redis ,memcache来做缓存db,为mysql提供服务,或是后端日志收集分析。
    考虑到mongodb属于nosql型数据库,sql语句与数据结构不如mysql那么亲和 ,也会有很多时候将mongodb做为辅助mysql而使用的类redis memcache 之类的缓存db来使用。
    亦或是仅作日志收集分析。

    问题2:
    楼主可能没有观察仔细。
    我做了下实验。例子如下:
    > db.a.save({"a":3});
    > db.a.save({"a":4});
    > db.a.find()
    { "_id" : ObjectId("540826eb0e83c3fb7ea07a0f"), "a" : 3 }
    { "_id" : ObjectId("5416869a9fa8a67830dfc9a8"), "a" : 4 }
    > db.a.find().sort({a:1})
    { "_id" : ObjectId("540826eb0e83c3fb7ea07a0f"), "a" : 3 }
    { "_id" : ObjectId("5416869a9fa8a67830dfc9a8"), "a" : 4 }
    > db.a.find().sort({a:-11})
    { "_id" : ObjectId("5416869a9fa8a67830dfc9a8"), "a" : 4 }
    { "_id" : ObjectId("540826eb0e83c3fb7ea07a0f"), "a" : 3 }
    > db.system.profile.find({"ns":"test.a"})
    { "op" : "query", "ns" : "test.a", "query" : { "query" : {  }, "orderby" : { "a" : 1 } }, "ntoreturn" : 0, "ntoskip" : 0, "nscanned" : 2, "scanAndOrder" : true, "keyUpdates" : 0, "numYield" : 0, "lockStats" : { "timeLockedMicros" : { "r" : NumberLong(156), "w" : NumberLong(0) }, "timeAcquiringMicros" : { "r" : NumberLong(4), "w" : NumberLong(3) } }, "nreturned" : 2, "responseLength" : 86, "millis" : 0, "ts" : ISODate("2014-09-15T06:26:36.681Z"), "client" : "127.0.0.1", "allUsers" : [ ], "user" : "" }
    { "op" : "query", "ns" : "test.a", "query" : { "query" : {  }, "orderby" : { "a" : -11 } }, "ntoreturn" : 0, "ntoskip" : 0, "nscanned" : 2, "scanAndOrder" : true, "keyUpdates" : 0, "numYield" : 0, "lockStats" : { "timeLockedMicros" : { "r" : NumberLong(120), "w" : NumberLong(0) }, "timeAcquiringMicros" : { "r" : NumberLong(4), "w" : NumberLong(3) } }, "nreturned" : 2, "responseLength" : 86, "millis" : 0, "ts" : ISODate("2014-09-15T06:26:39.125Z"), "client" : "127.0.0.1", "allUsers" : [ ], "user" : "" }

    sort的使用并不是放在query中的,而是有一个orderby的单独字段来存放。如上述红字部分。

  • 相关阅读:
    [置顶] java 通过classloader加载类再通过classforname实例化
    Linux内核源代码解析——用户发送数据包的起源之sendto
    POJ 2774 Long Long Message&&HDU 1403 Longest Common Substring&&COJ 1203
    add-two-numbers-ii
    【转载】React初学者入门须知
    【Todo】【转载】ES6的学习记录
    【转载】Java中如何写一段内存泄露的程序 & ThreadLocal 介绍和使用
    【Todo】深入理解Javascript系列
    【转载】什么是优秀技术团队
    【转载】React入门-Todolist制作学习
  • 原文地址:https://www.cnblogs.com/eternal1025/p/5419905.html
Copyright © 2011-2022 走看看