Mongodb源码分析--消息(message)
来源:互联网 发布:筑波大学 知乎 编辑:程序博客网 时间:2024/05/31 00:39
bit 名称 描述 document bit 名称 描述 考虑到稍后你可以再次使用该cursor. 暂停(times out). (no data). 当(阻塞)时间之后,通常执行返回(return)操作. Stream the data down full blast in multiple "more" packages, on the assumption that the client will fully read all data queried. Faster when you are pulling a lot of data and know you want to pull it all down. Note: the client is not allowed to not read all the data unless it closes the connection. bit 名称 描述 对于REPLY 消息,其结构如下: responseFlags 标志位向量: bit 名称 描述 失败加以描述. in which case, it needs to update config from the server. 一个Tailable 游标的两个getMore操作之间停止(sleep)一会. 在Mongod 1.6版本中支持该选项并一直设置. 其中:
客户端与服务端使用约定的消息(格式)进行通信,其消息头结构与C语言中的struct类似。具体的代码(位于message.cpp):
注:客户端可以使用除上面Reply之外的所有消息类型,因为Reply是数据库保留使用的。同时客户端可以使用QUERY和GETMORE消息来让服务端发送响应信息,其它消息类型则不会。
下面分别进行介绍。
Client 请求消息包括:
1.对于更新 (document)消息,其消息结构如下:
flags 标志位向量:
0 Upsert 如设置该位为0,同时未查询到相关document时,数据库会把提供的对象插入到集合中
1 MultiUpdate 如设置该位为1,则数据库会更新所有查询到的document,否则仅更新查询到的第一个
2-31 Reserved 必须设置为0.
2.对于插入 (document)消息,其结构如下:
3. 对于查询 (document)消息,其结构如下:
flags 标志位向量:
0 保留 必须设置为0
1 TailableCursor Tailable 表示在返回最后一条数据后,不要关闭当前 cursor。这是因为系统
2 SlaveOk 是否允许查询replica slave结点. 通过返回错误信息,除非是在"local"名空间.
3 OplogReplay 仅限内部replication时使用
4 NoCursorTimeout 服务器为了防止内存使用过量,会在一段时间(10分钟)后将空闲的cursors
5 AwaitData 与TailableCursor配合使用. 如果在数据尾部, 阻塞一会而不是返回无数据信息
6 Exhaust 个人理解:把数据作为一个包,整个下载下来。后面是英文原文说明:
7 Partial 如一些shards宕掉,为了不抛出异常,则从 mongos 那里返回部分结果
8-31 Reserved 必须设置为0
4. 对于查询更多 (document)消息,其结构如下:
5. 对于删除 (document)消息,其结构如下:
flags 标志位向量:
0 SingleRemove 如设置,则仅删除查询到的第一个document,否则删除所有查询到的document
1-31 Reserved 必须设置为0
6.对于KILL_CURSORS 消息,该消息用于在数据库里关闭一个活动(active)的游标, 其结构如下:
注意:如果游标正在读时,如果未exhausted (直到 OP_QUERY 或 OP_GETMORE 返回 zero ), 则不必关闭游标
7.对于MSG (document)消息,它是向数据库发送诊断消息(diagnostic message). 而数据库到发送确定(fixed)顺应其结构如下:
数据库响应消息(针对QUERY或GET_MORE的顺应)包括:
0 CursorNotFound 当执行getMore时,服务器上当前游标失效.返回 zero 结果信息.
1 QueryFailure 查询失败时. 在返回信息(document)中包括一个 "$err" 字段对该
2 ShardConfigStale Drivers should ignore this. Only mongos will ever see this set,
3 AwaitCapable 在服务器支持AwaitData查询选项时进行设置. 如不设置,客户端会在
4-31 Reserved 可忽略
上面是一些关于消息类型的介绍,下面让我们来看一下MongoDB的具体实现类。
在mongodb中,其提供了如下几个类对消息进行定义,封装及解析, 接收/发送等操作(位于message.h和dbmessage.h):
MsgData (struct类型):提供了对消息数据信息部分的结构定义,如操作标志位_operation,以及上面所说的flags.
Message : 对MsgData封装以及对消息的操作方法(比如:设置消息数信息(MsgData),获取消息头信息,消息信息重置,消息设置追加等)
MessagingPort :提供消息的发送,接收等。并将接收到的信息(如char *类型)进行分解,并调用消息(Message)的相关方法将分解结果作为参数传入,反之一样,这里它相当于一个转换器。
DbMessage :特别的消息类型,它是对Message封装,用于提供针对数据库操作类型消息的访问
QueryMessage : 对DbMessage中的查询请求消息进行解析封装
好了,今天的内容就先到这里了。
参考链接:http://www.mongodb.org/display/DOCS/Mongo+Wire+Protocol
原文链接:http://www.cnblogs.com/daizhj/archive/2011/04/02/2003335.html
作者: daizhj, 代震军
微博: http://t.sina.com.cn/daizhj
Tags: mongodb,message,protocol,c++
- Mongodb源码分析--消息(message)
- Mongodb源码分析--消息(message)
- Mongodb源码分析--消息(message)
- Mongodb源码分析--消息(message)
- Android消息机制源码分析--Lopper,Handler,Message
- Android 消息机制 - Handler, Looper, Message, MessageQueue 的源码分析
- Looper、Message、MessageQueue、Handler异步消息处理机制源码分析
- RTMPdump源码分析: 发送消息(Message)(8)
- RTMPdump源码分析: 处理各种消息(Message)(10)
- Message(Message Pool)源码分析
- AndRoid源码分析----------Handler消息机制(1)Handler获取Message对象及Message的复用
- [Android源码]Message分析
- Android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- Android的消息处理机制(图+源码分析)——Looper,Handler,Message
- android的消息处理机制(图+源码分析)——Looper,Handler,Message
- N-gram模型
- javascript跨框架(iframe)使用案例
- C#中Dictionary的用法及用途 (非本人之作)
- Mongodb源码分析--插入记录及索引B树构建
- C#杂八资料
- Mongodb源码分析--消息(message)
- 基于ARM-LINUX的PHP应用
- Mongodb源码分析--删除记录
- console线缆说明.txt
- Mongodb源码分析--更新记录
- Mongodb源码分析--更新记录
- 如何设置Windows扩展屏幕,扩展屏幕和主屏有何区别,如何优化使用扩展屏幕?
- 网络知识:图解交换机设备的级联
- 我的vb串口代码