2020-09-21 10:05:48
1. mongos节点 收到用户 insert 请求
mongos 收到一个 insert 请求后,会经过如下流程处理将请求发送给 shard 节点:
ServiceEntryPointMongos::handleRequest() --> Strategy::clientCommand() --> runCommand() --> execCommandClient() --> ClusterWriteCmd::InvocationBase::run() --> ClusterWriteCmd::InvocationBase::runImpl() --> ClusterWriter::write() --> BatchWriteExec::executeBatch() --> MultiStatementTransactionRequestsSender()
在 ClusterWriter::write() 中会准备一个 ChunkManagerTargeter 来维保存目标 namespace 在 CatalogCache 中的路由信息,方便后续请求处理。
主要代码逻辑在 BatchWriteExec::executeBatch() 中,主要是封装 BatchWriteOp 的几个核心方法来完成具体的请求处理工作:
首先,根据请求的目标shard、order 等参数来将请求分成多个批次。
Status targetStatus = batchOp.targetBatch(targeter, r版权声明:本文为wangxin201492原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。