我们用一个做手游的故事来聊聊数据层不断优化提升的演进过程。
这里说的“点查询”,是指基于指定主键的查询,例如查询指定用户的信息,因为是基于指定主键,查询结果有限且较少,点查询的效率非常高。另一种叫“面查询”,是基于主键或索引的范围查询,例如查询昨天所有的订单,这种查询虽然有主键或索引,但结果数量不确定,有时处理不好时会出现严重性能问题。
游戏删档内测上线了,用户数不多,请求的响应也很及时,老板拍了拍你的肩膀。
做了这些优化后,db性能提升明显,整个系统跑得很欢,你又惬意的去泡茶了。
10:简单设计
有一天,老板突然说做个山寨版的糖果传奇手游,你接到任务后,分析出游戏的交互频率不大,都是点查询,用mysql能简单搞定。对游戏来说,你很少有机会用orcale这种上流货,mysql是物美价廉的选择。建个表,设好主键和索引,你轻松搞定数据库设计,惬意的泡了杯茶边喝边敲代码。这里说的“点查询”,是指基于指定主键的查询,例如查询指定用户的信息,因为是基于指定主键,查询结果有限且较少,点查询的效率非常高。另一种叫“面查询”,是基于主键或索引的范围查询,例如查询昨天所有的订单,这种查询虽然有主键或索引,但结果数量不确定,有时处理不好时会出现严重性能问题。
游戏删档内测上线了,用户数不多,请求的响应也很及时,老板拍了拍你的肩膀。
100:数据库调优
游戏上线反响不错,精美的画面给了玩家不少惊喜,更多玩家蜂拥而入,你从监控系统上发现mysql的压力有点大,当初只是对数据库表结构做了设计,现在你开始review数据库优化了:创建表时默认的MyISAM存储引擎换成InnoDB存储引擎,修改mysql参数加大InnoDB的cache,不使用事务提交。做了这些优化后,db性能提升明显,整个系统跑得很欢,你又惬意的去泡茶了。