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的单独字段来存放。如上述红字部分。

  • 相关阅读:
    轻松自动化---selenium-webdriver(python) (八)
    Ubuntu 18.04 LTS 启用 WakeOnLAN
    lower_bound 和 upper_bound
    [LeetCode 201.] Bitwise AND of Numbers Range
    [LeetCode 162.] Find Peak Element
    [LeetCode 33. 81. 153. 154.] 旋转数组中的二分查找
    C++ unordered_map 的一个疑问
    [LintCode 386.] 最多有k个不同字符的最长子字符串
    [LintCode 550.] 最常使用的K个单词II
    [LintCode 1029.] 寻找最便宜的航行旅途(最多经过k个中转站)
  • 原文地址:https://www.cnblogs.com/eternal1025/p/5419905.html
Copyright © 2011-2022 走看看