我们用一个做手游的故事来聊聊数据层不断优化提升的演进过程。
10:简单设计
有一天,老板突然说做个山寨版的糖果传奇手游,你接到任务后,分析出游戏的交互频率不大,都是点查询,用mysql能简单搞定。对游戏来说,你很少有机会用orcale这种上流货,mysql是物美价廉的选择。建个表,设好主键和索引,你轻松搞定数据库设计,惬意的泡了杯茶边喝边敲代码。
这里说的“点查询”,是指基于指定主键的查询,例如查询指定用户的信息,因为是基于指定主键,查询结果有限且较少,点查询的效率非常高。另一种叫“面查询”,是基于主键或索引的范围查询,例如查询昨天所有的订单,这种查询虽然有主键或索引,但结果数量不确定,有时处理不好时会出现严重性能问题。
游戏删档内测上线了,用户数不多,请求的响应也很及时,老板拍了拍你的肩膀。
100:数据库调优
游戏上线反响不错,精美的画面给了玩家不少惊喜,更多玩家蜂拥而入,你从监控系统上发现mysql的压力有点大,当初只是对数据库表结构做了设计,现在你开始review数据库优化了:创建表时默认的MyISAM存储引擎换成InnoDB存储引擎,修改mysql参数加大InnoDB的cache,不使用事务提交。
做了这些优化后,db性能提升明显,整个系统跑得很欢,你又惬意的去泡茶了。
1000:分库分表
你们游戏山寨得比较牛叉,用户持续增加,作为有风险意识的你,肯定不会等到系统告警了才去优化,于是你在想更大访问量时怎么办?
单台db的性能有极限,必须有扩展到多台db的能力,于是你重新修改了数据库表结构和后台代码,把主键按规则做了分库分表,目前用户增长迅猛,假定单台db存放500万用户,最终可能有上亿用户,那么可能有20台DB,于是你分了32个库,每个库里有32张表,共1024张表。
初始时这1024张表都在一台db上,当用户数增加时,分裂成2台、4台、8台、16台。涉及好分库分表策略后,db压力能通过扩容来解决,你放心了。
关于读写分离
有不少介绍mysql读写分离已提升mysql并发性能的文章,在游戏项目中用得比较少,主要是读写比例的原因。像网站那种读多写少的应用场景可以采用读写分离,而游戏的读和写差不多多,读写分离的用处不大;而且用户可能是海量的,分多台db是常事,如果分库后再搞读写分离,整个db就过于复杂了。
mysql读写分离是基于mysql主从复制功能的,游戏项目如果对数据安全有要求,一般会用mysql主从复制功能做热备。如果项目有GM或经分系统需要直接查询mysql,往往也是在slave上查询,不直接操作master,避免低效查询降低master性能影响业务。这种做法也是OLDP(On-Line Transaction Processing,联机事务处理)和OLAP(On-Line Analytical Processing,联机分析处理)分离的常见做法。
10000:缓存
有了分库分表来平滑扩容,项目安稳了较长一段时间,直到某一天,运维说db机器增长比较快,4个月就增加到了64台(master+slave),希望后台能提升单台db的性能,以应对后续的业务增长。
OK,你祭出你留的后手——memcached,麻利的操起机械键盘,咔哒咔哒的改起后台的代码,加入缓存逻辑:读的时候从memcached读,如果没有就从mysql查询并写入memcached。写的时候同时写入mysql和memcached。
好吧,你终于使用了NoSQL。NoSQL泛指非关系型数据库,是Not Only SQL(有多少人和我一样搞错的~~!)。
搞定这个问题后,成本下降了,项目收入可观,拿奖金好happy!
未完待续~
相关推荐
2023-04-06-项目笔记-第四百三十七阶段-课前小分享_小分享1.坚持提交gitee 小分享2.作业中提交代码 小分享3.写代码注意代码风格 4.3.1变量的使用 4.4变量的作用域与生命周期 4.4.1局部变量的作用域 4.4.2全局变量的作用域 4.4.2.1全局变量的作用域_1 4.4.2.435局变量的作用域_435- 2025-03-14
X810基于MATLAB的森林生物声音分析系统
荜拔检验表格(食品香辛料质量验收记录表)检验表格(食品香辛料质量验收记录表).docx
统计数据主要包括全球的4G(LET)、3G(UMTS)、2G(GSM)、2G(CDMA)的基站数据,我国5G基站数据并没有统计到。SHP格式,大小有126M,记录了474万多个点,数据可以直接在GIS软件中打开。
核心内容与优势: 一站式知识体系:覆盖SpringBoot核心功能(自动配置、Starter依赖)、Web开发(RESTful API设计)、数据库集成(MyBatis/JPA)、安全框架(Spring Security)及企业级实战项目搭建。 深度项目驱动:通过电商后台系统案例,分步拆解环境配置、多模块工程架构、日志监控、单元测试等关键环节,附带可运行的源码模板。 效率提升工具:提供Maven/Gradle依赖冲突解决方案、整合IDEA高效插件配置、包含常见报错排查手册 适用人群: Java后端入门者快速掌握SpringBoot技术栈 需要完善知识体系的进阶开发者 毕业设计/企业级项目搭建参考
C++数据结构与STL容器总结
该项目背后的想法是为视频创建一个标签,它完全基于 Python + OpenCV,因此非常易于定制。可以很容易地更换整个贴标管道,或者可以更换或添加部件
蓝色简约大学生职业生涯规划PPT模板.pptx
基于单片机的音乐律动播放器音乐盒串口远程控制(LCD1286 1100056-基于单片机的音乐律动播放器音乐盒串口远程控制(LCD12864、六首音乐、PWM调频、音频编码、源代码、仿真、流程图、物料清单、Proteus) 功能描述:基于单片机的音乐律动播放器音乐盒实现的功能有:在单片机内提前对音乐编码后,选择需要播放的音乐,使用蜂鸣器实现音乐的播放。 根据不同的音频信号输入软解码实现音乐律动,通过LED灯展示出来。 可通过串口实现远程控制,通过输入1-8的数字即可对应1-8号按键的功能控制系统的功能运行。 使用按键和串口均可直接控制音乐播放器进行音乐播放的功能。 有哪些资料: 1、仿真工程文件 2、源代码工程文件 3、原理图工程文件 4、流程图 5、元器件清单 6、汉字字模提取软件 7、简谱编码教程 8、流程图(visio版本与word版本) ,核心关键词:单片机;音乐律动播放器;串口远程控制;LCD12864;六首音乐;PWM调频;音频编码;仿真;流程图;物料清单;Proteus;按键控制;音乐播放。,单片机电控音乐盒:串口远程控制与音乐律动展示
岩石裂缝渗透过程模拟 地下中的水受高压的影响,进入岩层中裂缝向侧边渗透,在此过程中由于温度及液体与岩土层的作用导致岩层的性质改变,内应力增加,可以通过仿真分析此过程中岩层的应力、应变、温度等分布情况 《长期寻找仿真技能的大神加入工作室》 #comsol#仿真模拟#岩层#岩石裂缝#渗透#模型 ,关键词:岩石裂缝;渗透过程;模拟;高压;温度;内应力;仿真分析;岩层应力;岩层应变;温度分布;Comsol仿真。,《岩石裂缝渗透过程仿真模拟与岩层性质变化分析》
泡萝卜检验表格(食品企业农副产品质量验收记录表).docx
固定翼无人机行业剖析:中无人机占最大的中国市场份额,约为29%.pdf
13届蓝桥杯嵌入式省赛真题2+代码.zip
内容概要:本文介绍了一种新的端到端可训练方法——局部自适应变形模型(LAMM),用于直接操纵3D网格形状并进行高效重建。通过对稀疏控顶点的置换输入来转换几何编码器,LAMM能够在一次前向传播过程中同时实现局部细节的精细控制与整体外观保持一致。实验表明LAMM在人脸3D头部和手部数据集上均展示了卓越的空间解缠能力和高效推理性能,在内存占用和运行速度上大幅优于现有方法。此外,该架构支持高分辨率3D网格建模,实现了高效的单线程CPU推理。它还提供了一系列高级编辑操作,如对象区域的互换和样本抽取等功能。最后作者开放了源代码供未来研究使用。 适合人群:从事计算机视觉领域的研究人员和技术人员;特别是关注3D物体生成与编辑方向的人群。 使用场景及目标:可用于面部雕刻应用中的表情增强以及数字人物动画的制作工具。此外还可应用于医学影像生成、影视特效等领域内的虚拟人偶建模任务当中,以提高工作效率并降低成本。由于LAMM能够在普通CPU上快速运行,因此可以广泛适用于不同硬件配置环境下的高性能3D模型开发需求。 其他说明:本项目已开源,感兴趣的开发者可以在GitHub上获取更多资料并参与到后续工作中去。
HTCC陶瓷基板市场剖析:HTCC陶瓷外壳是最大的细分市场.pdf
复配着色剂(柠檬黄)检验表格(食品添加剂食用香精质量验收记录表).docx
三相异步电机矢量控制调速系统,附赠参考文献 1)采用转速、转矩、磁链、电流4+闭环控制; 2)转速环采用PI控制; 3)转矩环采用PI控制; 4)磁链环采用PI控制; 5)电流环采用PI控制; 6)采用SVPWM矢量控制; 7)跟踪性能良好,当转矩发生变化时能够快速跟踪稳定转速; 8)各个模块功能分类明确,容易理解 ,三相异步电机; 矢量控制调速系统; 4+闭环控制; PI控制; SVPWM矢量控制; 跟踪性能; 模块功能分类
原型快速注塑服务市场调查报告:全球前23强生产商排名及市场份额.docx
RPA赋能流程智能化升级,自主研发推动数字员工规模化制造
2023140距阵-@β.xlsx