1. 为什么需要优化?
MongoDB
虽然灵活,但如果不加优化,可能出现:
查询性能低(扫描全表)
分片热点(某一分片压力过大)
内存占用高(缓存无效)
写入延迟大(锁竞争)
优化的核心目标是:减少扫描量,减少锁竞争,充分利用索引与缓存。
MongoDB
是一种 面向文档的 NoSQL
数据库,与传统的关系型数据库(MySQL
、PostgreSQL
)不同,它不使用表格和行,而是使用 BSON(二进制 JSON
)存储数据。
简单来说,它是一个 JSON 存储与查询引擎。
文档型存储:每条数据是一个 JSON 对象。
无固定模式(Schema-less):字段可以灵活增加或减少。
高扩展性:支持分片(Sharding
)与副本集(Replica Set
)。
强大的查询语言:支持聚合(Aggregation
)、全文检索(Full-Text Search
)。
天然适合大数据与高并发场景。
sequenceDiagram participant UserSpace as 用户空间程序 participant IOKit as IOKit框架 participant Driver as 内核驱动 participant UserClient as UserClient实例 Note over UserSpace,UserClient: 阶段1:服务发现 UserSpace->>IOKit: IOServiceGetMatchingServices(kIOMainPortDefault, matchingDict, &iterator) IOKit->>Driver: 内核遍历服务列表 Driver-->>IOKit: 返回匹配的服务对象 IOKit-->>UserSpace: 通过iterator返回服务句柄 Note over UserSpace,UserClient: 阶段2:建立连接 UserSpace->>IOKit: IOServiceOpen(service, mach_task_self(), type, &connection) IOKit->>Driver: 调用驱动的newUserClient() alt 自定义newUserClient实现 Driver->>Driver: 1. 安全检查(task_is_privileged等) Driver->>Driver: 2. 通过OSTypeAlloc创建UserClient Driver->>UserClient: initWithTask(owningTask, type...) UserClient-->>Driver: 返回初始化结果 Driver-->>IOKit: 返回UserClient实例 else 默认实现 IOKit->>UserClient: 自动创建标准UserClient UserClient->>UserClient: 默认initWithTask() UserClient-->>IOKit: 返回实例 end IOKit-->>UserSpace: 返回connection句柄 Note over UserSpace,UserClient: 阶段3:命令交互 loop 多次调用 UserSpace->>UserClient: IOConnectCallMethod(connection, selector, ...) UserClient->>UserClient: 根据sMethods分派到具体方法 UserClient->>Driver: 调用驱动方法(如performCalculation) Driver-->>UserClient: 返回数据/状态 UserClient-->>UserSpace: 返回结果 end Note over UserSpace,UserClient: 阶段4:断开连接 UserSpace->>UserClient: IOServiceClose(connection) UserClient->>UserClient: clientClose() UserClient->>Driver: 通知驱动(可选) UserClient->>UserClient: 释放资源
1 | void ControllerImpl::MsgRecvThreadFunc() { |
在 HTTPS
通信中,浏览器如何判断一个网页使用的证书是否已经 吊销(Revoked
)?证书一旦吊销,就意味着它已不再可信,但如何通知用户浏览器,是一个非常关键的安全机制。
本篇文章将全面梳理浏览器判断证书吊销状态的几种主流机制,及其优缺点和实际表现。