zoukankan      html  css  js  c++  java
  • MongoDB的使用

    MongoDB的使用

    1、使用navicat连接

          为了方便开发,采用navicat连接。需要注意的是navicat只有新版才能连接mongodb,我这里用的最新版本v15。没有安装最新版navicat的盆友,阔以参照下面链接下载安装:

    https://www.jianshu.com/p/3af7fccc22c7

         

         测试连接:

         

         查看文档时,有几个很有用的功能按钮:

         

     

         基础的使用比较简单,可查看相关使用教程,比如菜鸟教程:https://www.runoob.com/mongodb/mongodb-tutorial.html

        2、注意事项

        针对使用中遇到的问题,这里列出几点注意事项:

        1)索引

        a.  合理创建索引

        一定要合理创建索引, 有很多人都被宣传片迷惑,认为mongo的读取速度本身就应该很快,所以从mysql转过来后,就连创建索引都忘了,当表(collection) 很大时,不创建索引是非常影响性能的。

    比如:db.users.createIndex({open: 1, close: 1}, {background: true})

        b.  创建索引导致数据阻塞

        在前台建索引时需要占用一个写锁(而且不会临时放弃),如果集合的数据量很大,建索引通常要花比较长时间,特别容易引起问题。

        解决的方法很简单,MongoDB 提供了两种建索引的访问,一种是 background 方式,不需要长时间占用写锁,另一种是非 background 方式,需要长时间占用锁。使用 background 方式就可以解决问题。

        例如,为超大表 users 建立索引

        千万不要使用:

        db.users.createIndex({open: 1, close: 1})

        而应该使用:

        db.users.createIndex({open: 1, close: 1}, {background: true})

        2)只返回想要的列

        大表查询时,只返回你想要的列。特别是单collection字段数据量比较大时,非常容易引起性能问题。

    db.inventory.find( { status: "A" }, { item: 1, status: 1 } )

        3)避免使用array

        MongoDB 的 Array 字段是比较独特的一个特性,它可以在单个 document 里存储一些简单的一对多关系。

        但是,我们尽量避免在model里面使用Array类型的字段,因为使用了Array,查询时,不可避免的会使用in操作,in操作无法利用索引,这个在关系型数据库里面也是存在的,大表操作一定要避免。

        比如:这里的value就是一个Array类型的字段

     1 {
     2     "_id": ObjectId("60ae5841e72f0000e3001c74"),
     3     "level": 2,
     4     "pid": "60ae5116e72f0000e3001c51",
     5     "value": [
     6         {
     7             "key": "v1",
     8             "name": "法院名称",
     9             "value": "法院"
    10         },
    11         {
    12             "key": "v2",
    13             "name": "指标名称/值",
    14             "value": "余额(万元)"
    15         },
    16         {
    17             "key": "v3",
    18             "name": "指标名称/值",
    19             "value": "到账/发放总额(万元)"
    20         }
    21     ],
    22     "type": "json",
    23     "isDelete": NumberInt("0")
    24 }

        4)一次返回所有数据

        尽量一次返回所有需要的数据,避免GET_MORE,避免游标操作,当用户进行查询迭代时,mongo会首先返回一个数据块供你迭代,当你迭代的数据超过这个数据块时,mongoid 发起 GET_MORE 命令移动游标获取下一个数据块,而就是这个移动游标的操作就非常慢,特别是你返回的列比较多的时候,性能非常低。每次返回的数据块的大小是由batchSize控制的,可以通过修改它的默认值进行控制。

        5)事务

        mongodb不支持事务,所以你一定要考虑清楚,权衡利弊。

     

        参考链接: https://www.cnblogs.com/l1pe1/p/7871859.html 

  • 相关阅读:
    为IIS启用ASP.NET 2.0
    使用css技术代替传统的frame技术
    So you want to replay an IIS web server log?
    令人疑惑的defaultValueAttribute
    关于 Web 测试中的 JavaScript 和 ActiveX 控件 【转载】
    如何控制浏览器打印效果
    Google Chart Api
    VSTS负载测试——如何:使用 SQL 创建结果存储区
    在windows service的代码中得到当前的目录
    CAN I WRITE AN ISAPI FILTER USING MANAGED CODE?
  • 原文地址:https://www.cnblogs.com/hld123/p/15002578.html
Copyright © 2011-2022 走看看