MongoDB操作与管理简介


  • 註冊用戶

    1. 前言

    • 在上一章中介绍 shell 的时候已经对DB的基本操作(插入、更新、删除、查询) 做了一些简单的说明,本章将不再做重复介绍。本章主要对数据库操作原理,以及管理方面做一些介绍。

    2. 数据库基本操作介绍

    • 插入、删除、更新、查询 数据库操作原理和作用介绍。

    2.1 插入

    • 执行插入操作的时候,MongoDB 会先将其转换成 BSON 的形式以后再进行解析。检验是否包含“_id”键且文档小于4MB,除此之外不做其他的数据验证,而是将文档原样存入数据库中。这种原理有好有坏:好处是它可以让数据库的加载变得更快,并可以防止注入式攻击。坏处是它允许插入无效的数据,可能会导致今后大量脏数据的产生。
    • MongoDB 在插入时并不执行代码,正因为这个与传统关系数据库的区别,传统的注入式攻击可以说对 MongoDB 是无效的,就算是类似的注入式攻击也是可以很轻松的避开。
    //插入示例代码
    > db.person.insert({"name":"jason","age":30})
    

    2.2 更新

    • 更新有两个参数,一个是查询文档,用来找出需要更新的文档,一个是修改器文档,用来描述对找到的文档做了哪些修改。
    • 更新的操作具有原子性,当两个更新同时发生的时候,采用先进先出原则来执行。所以,可有效的避免更新的时候发生冲突,以及死锁的产生,并在最大程度上降低数据相互干扰的风险。
    //更新示例代码
    //db.person.update({参数1},{参数2})
    > db.person.update({"name":"jason","age":30},{"name":"loraine","age":25})
    

    2.3 删除

    • 删除可以支持一个查询文档作为可选参数。输入这个参数以后,只有符合条件的文档才会被删除。
    • 删除数据动作一旦发生就是不可逆的,因此每次在决定做删除动作的时候需要小心谨慎。
    //删除示例代码
    //db.person.remove({参数})
    > db.person.remove({"name":"loraine","age":25})
    

    2.4 查询

    • 查询就是返回一个集合在文档的子集,范围从0个文档到整个集合,第一个参数决定了要返回哪些文档,其形式也是一个文档,说明要执行的查询细节。
    • 查询在使用的时候也存在一些限制,查询文档的值必须是常量,不能引用文档中其他键的值。
    //查询示例代码
    // db.person.find({参数})
    > db.person.find({"name":"jason"})
    

    3. 数据库命令介绍

    • 前面的章节我们已经介绍了数据库中的基本操作。MongoDB 还支持大量的高级操作,这些操作都是通过命令的方式来实现。

    3.1 数据库命令原理

    • 命令的响应是作为结果的一个文档,它包含了命令是否成功执行,还可能有些其他的命令输出信息。命令的响应总是有一个 键来判断命令是否成功执行,我们假设这个键的值为 true,如果不为 true 就代表命令的执行出了某些问题。
    • 命令其实是作为一种特殊类型的查询来实现的,这些查询针对 $cmd 集合来执行,runCommand 仅仅是接受命令文档,执行等价查询。当 MongoDB 服务器得到查询 $cmd 集合的请求时,会启动一套特殊的逻辑来处理,而不是交给普通的查询代码来执行。几乎所有 MongoDB 驱动程序都提供一个类似与 runCommand 的帮助方法来执行命令。但是如果有必要,总是可以使用一个简单查询的方式来执行命令。
    • 访问有些命令需要拥有管理员权限,且必须在 admin 数据库里面运行。如果在其他数据库里面运行这些命令,可能会报拒绝访问的错误。

    3.2 命令参考

    • MongoDB 支持接近100个命令,要获得最新的所有命令列表,有两种方法:
      (1) 在 shell 中运行 db.listCommands() ,或者从驱动程序中运行等价命令 list-Commands
      (2) 打开管理员浏览器地址:http://localhost:28017/_commands

    4. MongoDB 管理

    • 尽可能的简化系统操作是当初 MongoDB 的设计理念,所以管理 MongoDB 相对还是比较容易的,无论是备份还是多节点的系统操作都有快捷的方式。系统会尽量自动完成各种配置,需要手工干预的任务很少。

    4.1 MongoDB 启动和停止

    • 要启动 MongoDB 服务器需要先运行 mongod 可执行文件,如果之前没有配置数据库目录参数,会默认将数据库文件写到/data.db (windows 下为:C:\data\db) ,并占用 27017 端口,还需要确保目录权限为可写,否则会启动失败。
    • mongod 还会启动一个 HTTP 服务器,监听比默认端口高 1000 ,换算出来就是 28017,也就是通过浏览器访问 http://localhost:28017 来查看数据库管理信息。
    • 数据库在已启动的状态时,在 shell 中输入 Ctrl+C 可以完全停止MongoDB 数据库。另外一种比较安全的方法是使用 showdown 命令,需要在 admin 数据库下并输入:db.shutdownServer()。

    4.2 MongoDB 的监控

    • 监控 MongoDB 的状态和性能,对于管理员来说是一个非常重要的工作,还好 MongoDB 提供了很多功能,让监控变得很容易。
    • 虽然通过 shell 可以查看一些 MongoDB 的基本信息,但是通过 HTTP接口查看到的信息更加全面且易读。
    • 如果要获取运行中的 MongoDB 服务器统计信息,可以使用 serverStatus 命令:
    > db.runCommand({"serverStatus" : 1})
    
    • 除了 serverStatus 还可以利用第三方插件来监控服务器运行情况,例如 Nagios、Ganglia、Cacti、Munin。登陆 http://dochub.mongodb.org/core/monitoring 查看与监控相关文档。

    4.3 MongoDB 备份与恢复

    • 数据库默认目录为 /data.db/ (Windows 下C:\data\db) 。所有的数据都存放在数据目录下,想要备份 MongoDB 也就是只需要实现对数据目录中的文件创建副本即可。
    • 当 MongoDB 在运行的时候,备份数据目录是非常不安全的,建议先将服务器关闭再进行备份工作,这一点与很多数据库的冷备份方式的原理是基本一致的。
    • 在实际的工作中大部分时候数据库不能采取冷备份的方式,这个时候就需要使用 mongodump 这是一个 MongoDB 自带的热备份工具,具体使用方可以参考帮助文档。
    D:\mongodb\bin>mongodump --help
    Usage:
      mongodump <options>
    Export the content of a running server into .bson files.
    Specify a database with -d and a collection with -c to only dump that database or collection.
    See http://docs.mongodb.org/manual/reference/program/mongodump/ for more information.
    general options:
          /help                                                 print usage
          /version                                              print the tool version and exit
    verbosity options:          
    /v, /verbose:<level>       more detailed log output (include multiple times for more verbosity, e.g. -vvvvv, orspecify a numeric value, e.g. --verbose=N)
          /quiet                                               hide all log output
    
    connection options:
      /h, /host:<hostname>                    mongodb host to connect to (setname/host1,host-2 for replica sets)
          /port:<port>                                 server port (can also use --host hostname:port)
    
    authentication options:
      /u, /username:<username>               username for authentication
      /p, /password:<password>                                  password for  authentication
          /authenticationDatabase:<database-name>               database that holds  the user'scredentials
          /authenticationMechanism:<mechanism>                  authentication mechanism to use
    
    namespace options:
      /d, /db:<database-name>                                   database to use
      /c, /collection:<collection-name>                         collection to use
    
    query options:
      /q, /query:                                               query filter, as aJSON string, e.g.,  '{x:{$gt:1}}'
          /queryFile:                                           path to a filecontaining a query   filter (JSON)
          /readPreference:<string>|<json>                  specify either a preference name or a preference json  object
          /forceTableScan                                       force a table scan
    
    output options:
      /o, /out:<directory-path>                                 output directory, or '-' for stdout   (defaults to 'dump')
    
          /gzip                                                 compress archive our collection output with Gzip
          /repair                                               try to recover documents from damaged data files (not supported by
                                                                all storage engines)
    
          /oplog                                                use oplog for taking a point-in-time  snapshot
          /archive:<file-path>                                  dump as an archive to the specifiedpath. If flag is specified without a
                                                                value, archive is  written to stdout
          /dumpDbUsersAndRoles           dump user and role definitions for the specified database
          /excludeCollection:<collection-name>                  collection to exclude from the dump (may be  specified multiple   times to exclude   additional  collections)
          /excludeCollectionsWithPrefix:<collection-prefix>     exclude all  collections from  the dump that have  the given prefix  (may be specified multiple times to  exclude additional  prefixes)
      /j, /numParallelCollections:           number of  collections to dump  in parallel (4 by  default)
    
    • MongoDB 还提供了一个从备份中恢复数据的工具 mongorestore 。

    5. 总结

    • MongoDB 实际上就是一个通过 mongod 来调用普通的命令行程序。
    • 提供了内置的管理接口和监控功能,方便与第三方插件集成。
    • 拥有丰富的备份方式,用户可以根据不同的应用场景来选择。

登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待