#reading-and-annotate-mongodb-3.6
mongodb-4.4最新版本内核源码中文模块化注释详细分析
mongodb-3.6版本内核源码中文模块化注释详细分析
对外演讲
# | 对外演讲 | 演讲内容 |
---|---|---|
1 | Qcon全球软件开发大会分享 | OPPO万亿级文档数据库MongoDB集群性能优化实践 |
2 | 2021年度Gdevops全球敏捷运维峰会 | PB级万亿数据库性能优化及最佳实践 |
3 | 2019年mongodb年终盛会 | OPPO百万级高并发MongoDB集群性能数十倍提升优化实践 |
4 | 2020年mongodb年终盛会 | 万亿级文档数据库集群性能优化实践 |
5 | 2021年dbaplus分享 | 万亿级文档数据库集群性能优化实践 |
专栏
# | 专栏名 | 专栏内容 |
---|---|---|
1 | infoq专栏 | 《MongoDB内核源码设计、性能优化、最佳运维实践》 |
2 | oschina专栏 | 《mongodb内核源码中文注释详细分析及性能优化实践系列》 |
3 | 知乎专栏 | 《MongoDB内核源码设计、性能优化、最佳运维实践》 |
4 | itpub专栏 | 《mongodb内核源码设计实现、性能优化、最佳运维实践》 |
《mongodb内核源码设计与实现》源码模块化分析
第一阶段:单机内核源码分析
# | 单机模块名 | 核心代码中文注释 | 说明 | 模块文档输出 |
---|---|---|---|---|
1 | 网络收发处理(含工作线程模型) | 网络处理模块核心代码实现(100%注释分析) | 完成ASIO库、网络数据收发、同步线程模型、动态线程池模型等功能 | 详见infoq专栏:《MongoDB内核源码设计、性能优化、最佳运维实践》 |
2 | command命令处理模块 | 命令处理相关模块源码分析(100%注释分析) | 完成命令注册、命令执行、命令分析、命令统计等功能 | 详见oschina专栏:《mongodb内核源码中文注释详细分析及性能优化实践系列》 |
3 | write写(增删改操作)模块) | 增删改写模块(100%注释分析) | 完成增删改对应命令解析回调处理、事务封装、storage存储模块对接等功能 | 详见知乎专栏:《MongoDB内核源码设计、性能优化、最佳运维实践》 |
4 | query查询引擎模块) | query查询引擎模块(核心代码注释) | 完成expression tree解析优化处理、querySolution生成、最优索引选择等功能 | 详见知乎专栏:《MongoDB内核源码设计、性能优化、最佳运维实践》 |
5 | concurrency并发控制模块 | 并发控制模块(核心代码注释) | 完成信号量、读写锁、读写意向锁相关实现及封装 | 详见infoq专栏:《MongoDB内核源码设计、性能优化、最佳运维实践》 |
6 | index索引模块 | index索引模块(100%注释分析) | 完成索引解析、索引管理、索引创建、文件排序等功能 | 详见oschina专栏:《mongodb内核源码中文注释详细分析及性能优化实践系列》 |
7 | storage存储模块) | storage存储模块(100%注释分析) | 完成存储引擎注册、引擎选择、中间层实现、KV实现、wiredtiger接口实现等功能 | 详见知乎专栏:《MongoDB内核源码设计、性能优化、最佳运维实践》 |
8 | wiredtiger存储引擎) | wiredtiger存储引擎设计与实现专栏分析(已分析部分) | 完成KV读写、存储结构、checkpoint择等主功能,待完善 | 详见知乎专栏:《MongoDB内核源码设计、性能优化、最佳运维实践》 |
第二阶段:复制集内核源码分析(已分析部分源码,待整理,持续分析)
第三阶段:sharding分片内核源码分析(已分析部分源码,待整理,持续分析)
第四阶段:wiredtiger存储引擎源码分析(已分析部分源码,待整理,持续分析)
第五阶段:重新回顾分析mongodb内核主模块以外细节(已分析部分源码,待整理,持续分析)
<<千万级峰值tps/十万亿级数据量文档数据库内核研发及运维之路>>
其他
nginx高并发设计优秀思想应用于其他高并发代理中间件:
redis、nginx、memcache、twemproxy、mongodb等更多中间件,分布式系统,高性能服务端核心思想实现博客:
说明:
MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。
是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。他支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是他支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。
源码中文已注释代码列表如下:
boost-asio网络库/定时器源码实现注释(只注释mongodb相关实现的asio库代码)(100%注释):
- asio/include/asio/detail/impl/scheduler.ipp
- asio/include/asio/detail/impl/epoll_reactor.ipp
- asio/include/asio/detail/scheduler.hpp
- asio/include/asio/detail/impl/scheduler.hpp
- asio/include/asio/detail/timer_queue.hpp
- asio/include/asio/detail/timer_queue_base.hpp
- asio/include/asio/detail/timer_queue_set.hpp
- asio/include/asio/detail/impl/timer_queue_set.ipp
- asio/include/asio/detail/epoll_reactor.hpp
- asio/include/asio/detail/impl/epoll_reactor.hpp
- asio/include/asio/impl/read.hpp
- asio/include/asio/impl/write.hpp
- asio/include/asio/basic_socket_acceptor.hpp
- asio/include/asio/detail/reactive_socket_service.hpp)
- asio/include/asio/basic_socket_acceptor.hpp
- asio/include/asio/basic_stream_socket.hpp
- asio/include/asio/detail/reactive_socket_service_base.hpp
- asio/include/asio/detail/reactive_socket_recv_op.hpp
- asio/include/asio/detail/reactor_op.hpp
- asio/include/asio/detail/scheduler_operation.hpp
- asio/include/asio/detail/deadline_timer_service.hpp
mongodb网络传输模块(transport)处理实现(100%注释):
transport_layer传输层子模块:
- transport_layer_asio.h
- transport_layer_asio.cpp
- transport_layer_manager.h
- transport_layer_manager.cpp
- transport_layer.h
Ticket数据收发回调处理子模块(100%注释):
Session会话子模块(100%注释):
service_state_machine状态机子模块(100%注释):
service_executor服务运行(工作线程模型)子模块(100%注释):
- service_executor.h
- service_executor_adaptive.cpp
- service_executor_adaptive.h
- service_executor_synchronous.cpp
- service_executor_synchronous.h
service_entry_point_impl服务入口子模块(100%注释):
- service_entry_point.h
- service_entry_point_impl.cpp
- service_entry_point_impl.h
- service_entry_point_utils.cpp
- service_entry_point_utils.h
message/DbMessage/OpMsgRequest协议处理(100%注释):
时间嘀嗒及系统级定时器实现(100%注释):
mongod/mongos服务入口处理(100%注释):
- service_entry_point_mongod.h
- service_entry_point_mongod.cpp
- service_entry_point_mongos.h
- service_entry_point_mongos.cpp
command命令处理模块(注释完毕,命令太多,请参考前面的《command命令处理模块源码实现》):
db.serverStatus()相关统计(注释完毕):
- server_status.cpp
- server_status.h
- server_status_internal.cpp
- server_status_internal.h
- server_status_metric.cpp
- server_status_metric.h
stats相关统计(注释完毕):
- counters.cpp
- counters.h
- operation_latency_histogram.cpp
- operation_latency_histogram.h
- top.cpp
- top.h
- latency_server_status_section.cpp
- toplatency_server_status_sectionh
OpMsgRequest和写write_ops:(insert、update、delete)转换操作(100%注释): :
write写模块:
write处理入口(100%注释):
OpMsgRequest和写write_ops:(insert、update、delete)转换操作(100%注释): :
增删改处理(100%注释): :
query请求处理模块:
query_request请求解析和canonical_query规范化转换操作(核心流程注释完毕):
- query_request.cpp
- query_request.h
- canonical_query.cpp
- canonical_query.h
- parsed_projection.cpp
- parsed_projection.h
MatchExpression tree生成及优化过程(核心流程注释完毕):
- expression_parser.cpp
- expression_parser.h
- expression.cpp
- expression.h
- expression_tree.cpp
- expression_tree.h
get_executor获取PlanExecutor(核心流程注释完毕):
QueryPlannerIXSelect实现MatchExpression tree相关node关联对应RelevantTag(核心流程注释完毕):
plan_enumerator轮询枚举每个查询所有的候选索引信息(核心流程注释完毕):
index_tag相关(核心流程注释完毕):
生成QuerySolutionNode tree及querysolution(核心流程注释完毕):
- planner_access.cpp
- planner_access.h
- planner_analysis.cpp
- planner_analysis.h
- query_planner.cpp
- query_planner.h
get_executor根据querysolurion生成PlanStage(核心流程注释完毕):
PlanStage(核心流程注释完毕):
- plan_stage.cpp
- plan_stage.h
- plan_stats.cpp
- plan_stats.h
- stage_builder.cpp
- stage_builder.h
- multi_plan.cpp
- multi_plan.h
- subplan.cpp
- subplan.h
- stage_types.cpp
- collection_scan.h
- collection_scan.cpp
- collection_scan.h
- index_scan.cpp
- index_scan.h
- fetch.cpp
- fetch.h
- sort.cpp
- sort.h
- sort_key_generator.cpp
- sort_key_generator.h
- projection.cpp
- projection.h
- limit.cpp
- limit.h
- skip.cpp
- skip.h
- cached_plan.cpp
- cached_plan.h
- update.cpp
- update.h
- delete.cpp
- delete.h
- ......
storage存储模块:
catalog中间层相关实现:
database中间层接口相关(重要接口注释):
- database.cpp
- database.h
- database_impl.h
- database_impl.cpp
- database_holder.h
- database_holder.cpp
- database_holder_impl.cpp
- database_holder_impl.h
- database_catalog_entry.h (通过这里和KVStorageEngine关联)
collection中间层接口相关(重要接口注释):
- collection.cpp
- collection.h
- collection_impl.h
- collection_impl.cpp
- collection_info_cache.h
- collection_info_cache.cpp
- collection_info_cache_impl.cpp
- collection_info_cache_impl.h
- collection_options.cpp
- collection_options.h
- collection_catalog_entry.h (通过这里和KVStorageEngine关联)
index中间层接口相关(重要接口注释):
- index_catalog.cpp
- index_catalog.h
- index_catalog_impl.h
- index_catalog_impl.cpp
- index_catalog_entry.h
- index_catalog_entry.cpp
- index_catalog_entry_impl.cpp
- index_catalog_entry_impl.h (通过这里和CollectionInfoCache、CollectionCatalogEntry、IndexAccessMethod等关联)
- index_create.cpp
- index_create.h
- index_create_impl.cpp
- index_create_impl.h
storage层相关实现(重要接口注释):
- record_data.cpp
- record_data.h
- record_store.h
- sorted_data_interface.h
- storage_engine.h
- storage_engine_lock_file.cpp
- storage_engine_lock_file.h
- storage_engine_metadata.cpp
- storage_engine_metadata.h
- storage_init.cpp
- storage_options.h
- storage_options.cpp
kv引擎管理注册(重要接口注释):
- kv_storage_engine.cpp
- kv_storage_engine.h
- kv_catalog.h
- kv_catalog.cpp
- kv_collection_catalog_entry.h(通过这里和catalog中间层collection衔接)
- kv_collection_catalog_entry.cpp
- kv_database_catalog_entry.cpp
- kv_database_catalog_entry.h(通过这里和catalog中间层database衔接)
- kv_database_catalog_entry_base.cpp
- kv_database_catalog_entry_base.h
wiredtiger存储引擎接口相关(重要接口注释):
- wiredtiger_global_options.cpp
- wiredtiger_global_options.h
- wiredtiger_init.h
- wiredtiger_init.cpp
- wiredtiger_kv_engine.h
- wiredtiger_kv_engine.cpp
- wiredtiger_parameters.cpp
- wiredtiger_parameters.h
- wiredtiger_record_store.cpp
- wiredtiger_record_store.h
- wiredtiger_recovery_unit.h
- wiredtiger_recovery_unit.cpp
- wiredtiger_server_status.cpp
- wiredtiger_server_status.h
- wiredtiger_session_cache.cpp
- wiredtiger_session_cache.h
- wiredtiger_size_storer.h
- wiredtiger_size_storer.cpp
- wiredtiger_util.cpp
- wiredtiger_util.h
plan_ranker对每个候选solution打分,选出最优索引(核心流程注释完毕):
get_executor根据querysolurion生成PlanStage(核心流程注释完毕):
plan_executor执行器(核心流程注释完毕):
plan_cache plan缓存(核心流程注释完毕):
shard分片源码实现(注释进行中):
分布式锁实现源码注释分析(100%注释):
- dist_lock_catalog_impl.cpp
- dist_lock_catalog_impl.h
- dist_lock_manager.cpp
- dist_lock_catalog.h
- dist_lock_catalog_impl.cpp
- dist_lock_catalog_impl.h
- dist_lock_catalog_impl.cpp
- dist_lock_manager.cpp
- type_lockpings.cpp
- type_lockpings.h
- type_locks.cpp
- type_locks.h
- configsvr_enable_sharding_command.h
代理定期更新config.mongos实现源码注释分析(100%注释):
cfg复制集库表结构管理(config.databases、config.collections)(100%注释):
分片片建shard key(100%注释):
mongodb存储引擎wiredtiger源码分析
https://github.com/y123456yz/reading-and-annotate-wiredtiger-3.0.0