Command在Mongodb中是一类特殊操作,它提供了强大的管理及各项操作(比如建库,索引,删除集合等)。可以说通过Command可以完成几乎 所有想做的事情。同时Mongodb开发者在Command上又做了非常清晰体系架构和设计,便于管理和高效执行各种类型的Command。
今天就专门用一篇篇幅来着重介绍一下其Command的体系架构,并用例子来介绍mongod是如何将Command引入其中的。
为了对其中大部分command对一个大致的了解,我们可以用下面指令来显示一个command列表:
这里mongod就会为我们显示command列表,大约有90多个,这是显示截图:
上面90多个类中,按其使用场景可以为分如下几类,分别是:
dbcommand.cpp :一般数据库指令,如数据库,索引的创建,重建,打开/关闭等
dbcommands_admin.cpp :管理指令,如CleanCmd,JournalLatencyTestCmd,ValidateCmd,FSyncCommand
dbcommands_generic.cpp :常用指令,ListCommandsCmd,LogRotateCmd,PingCommand,CmdSet,CmdGet等
replset_commands.cpp :复制集指令,CmdReplSetTest,CmdReplSetGetStatus,CmdReplSetReconfig等
security_commands.cpp :安全指令,CmdGetNonce,CmdLogout,CmdAuthenticate
今天就专门用一篇篇幅来着重介绍一下其Command的体系架构,并用例子来介绍mongod是如何将Command引入其中的。
为了对其中大部分command对一个大致的了解,我们可以用下面指令来显示一个command列表:
1.mongod --dbpath d:/mongodb/db --port 27017 --rest
2.在浏览器上输入链接地址:http://localhost:28017/_commands
2.在浏览器上输入链接地址:http://localhost:28017/_commands
这里mongod就会为我们显示command列表,大约有90多个,这是显示截图:
上面90多个类中,按其使用场景可以为分如下几类,分别是:
dbcommand.cpp :一般数据库指令,如数据库,索引的创建,重建,打开/关闭等
dbcommands_admin.cpp :管理指令,如CleanCmd,JournalLatencyTestCmd,ValidateCmd,FSyncCommand
dbcommands_generic.cpp :常用指令,ListCommandsCmd,LogRotateCmd,PingCommand,CmdSet,CmdGet等
replset_commands.cpp :复制集指令,CmdReplSetTest,CmdReplSetGetStatus,CmdReplSetReconfig等
security_commands.cpp :安全指令,CmdGetNonce,CmdLogout,CmdAuthenticate
commands_admin.cpp :shard管理操作,因其位于mongos项目,这里暂不介绍
commands_public.cpp :shard公用操作,因其位于mongos项目,这里暂不介绍
commands_public.cpp :shard公用操作,因其位于mongos项目,这里暂不介绍
下面是相关类图:
-----------------------------分割线--------------------------------
-----------------------------分割线--------------------------------
-----------------------------分割线--------------------------------
-----------------------------分割线--------------------------------
首先我们看一下在Command的基类,其用于定义子类要实现的方法及属性,自身也实现了一些通用方法,比如htmlHelp(用于以html方法显示该command的帮助信息),构造方法,findCommand(查询命令)等,其声明如下: