深入学习 ODB(七):性能调优与生产最佳实践

系列导航:编译器与注解 | 连接与事务 | 对象关系 | 类型安全查询 | 继承与视图 | 迁移与多库 | 性能与实践(本文) | 实战项目 引言:万人同服的存档难题 某 MMO 游戏服务器,5000 人同时在线,每 5 分钟执行一次全服存档: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 // 朴素实现:逐个存档 void saveAllPlayers(odb::database& db, const std::vector<Player*>& onlinePlayers) { for (auto* player : onlinePlayers) { odb::transaction t(db.begin()); db.update(*player); t.commit(); } } // 5000 个玩家 × 每次 1 个事务 × 每事务 1 条 UPDATE // = 5000 次网络往返 + 5000 次事务提交 // 耗时:约 15~30 秒(取决于网络延迟) // 这期间游戏逻辑被阻塞,玩家感受到明显卡顿 这段代码有三个性能杀手: ...

July 5, 2025 · 13 min · 2726 words