| 关键词: 处理 线程 对象 一个 开销 词语 方法 客户端 MyMessageHandler PortMessageServe |
Mongodb多存储引擎支持机制 介绍了Mongodb存储层创建数据库、创建集合、插入文档等数据库操作接口,本文将介绍mongodb处理客户端请求的模型。
Mongod在启动时会调用createServer创建一个PortMessageServer对象,其继承MessageServer和Listener两个类,并依赖MyMessageHandler来处理请求。 PortMessageServer
handleIncomingMsg
MyMessageHandler::process调用assembleResponse方法,从Message对象里获取请求类型( 参考Mongdb协议 ),根据请求类型进行响应的处理。
上述各种请求最终会调用Database类的接口来处理;比如receivedInsert,会先根据Database回去对应的Collection对象,最后调用insertDocument往集合中插入文档。请求处理完后,给客户端发送应答消息。 问题分析select的使用mongod调用select时,fdset里只会加入禁用词语fd,而禁用词语的地址通常很少,故不存在效率问题。 thread per client模型mongod为每个连接创建一个线程,创建时做了一定优化,将栈空间设置为1M,减少了线程的内存开销。当线程太多时,线程切换的开销也会变大,但因为mongdb后端是持久化的存储,切换开销相比IO的开销还是要小得多。 |
|
声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系
[邮箱地址] 删除
|