游戏道具存储mysql_游戏服务器存储系统设计
本文内容源自腾讯游戏学院程序公开课_服务器第四节
一、数据存储基础
什么是数据存储?
运行数据保存到硬盘上形成持久化数据。
data——>file(database)——>file system——>hard driver
数据变为文件,存入文件系统,文件系统通过OS这一层落到硬盘上面。
数据库 - 关系型数据库
数据库表设计与范式
1NF,2NF,3NF
优点
减少数据冗余
保证数据完整性
SQL语言提供了强大的查询功能
问题
数据结构复杂情况下表结构难以维护
性能一般,容易产生性能瓶颈
可扩展性较差
数据库 - NoSQL数据库
NoSQL数据库特点
Key - Value结构
支持结构化查询
优点
易于维护
性能较高
可扩展性好
问题
容易产生数据冗余
不支持SQL查询
二、游戏服务器架构与数据存储设计
游戏业务的特点
响应速度要求非常高
100ms以上的延迟玩家就会有感知
数据更新频率高
玩家数据每时每刻都在变化
获取经验,获取金钱,获取成就
update > read > insert > delete
解决方案
为了实现高速响应,玩家数据全部在内存中
在登录时从DB加载进内存
游戏过程中的数据变更通过操作内存数据完成
游戏服务器架构介绍
分区分服服务器架构(天涯明月刀、梦幻西游)
Player 1——>Game Server 1——>Database 1
Player 2——>Game Server 2——>Database 1
Player 3——>Game Server 3——>Database 1
每个玩家可以选择不同的服务器进行游戏,每个服务器后面的存储都是相互独立的,这样每个服务器的存储压力也会变得比较小。
全区全服服务器架构(王者荣耀、皇室战争、吃鸡)
Player 1——>Game Server Cluster——>Database
Player 2——>Game Server Cluster——>Database
Player 3——>Game Server Cluster——>Database
游戏服务器数据库选型
分区分服存储特点——>选择 RDBM(关系型数据库)
单服数据量较少
请求量少
无需动态在线扩容
全区全服存储特点——>选择 NoSQL
数据量大
请求量大
需要动态在线扩容
使用MySQL作为游戏数据库
软件工程思想:分离稳定和不稳定
稳定,使用MySQL表字段,例如:NAME、职业、角色的性别、等级;
不稳定,打包放入GAMEBLOB里面,再通过DR技术进行版本控制和管理,例如:道具、学会的技能;
混合式存储设计
REDIS高速缓存,MySQL真实落地。
游戏服务器存盘策略设计
Player——>Game Server 1(Player Runtime Data)
游戏存盘需求特点:update > read > insert > delete
定期自动存盘:3分钟自动存盘
重要操作即时存盘:升级/下线/关服;获得高价值道具
存储缓冲队列:削峰填谷
游戏服务器存储容灾介绍
热备:主从热备,自动切换
冷备:每日全量备份;关键操作前全量备份
注:此模型较简单,真正设计时会比这个复杂的多。
运营日志存储
什么是运营日志?
游戏中玩家重要行为的记录
诸如登录记录,等级变更,财产变化流水,交易记录等信息
运营日志的用途有哪些?
运营分析游戏中玩家的动态,做出运营决策的数据基础
当发生异常时,追查玩家在游戏内的活动轨迹的重要依据
运营日志的存储
数据量巨大,单服每日约5~10G(未压缩)
永久存档,涉及到游戏收入,需要永久存档备查
需要便于分析统计
存储流程:Game Server——>Database——>磁带。
游戏道具存储mysql_游戏服务器存储系统设计相关推荐
- 华为服务器存储系列,华为 服务器 存储相关资料(示例代码)
防火墙设备包链接:https://pan.baidu.com/s/1oBB6PDEJBGa8rap2C0qumQ 提取码:ocp0 添加本地连接:hdwwiz windows 2012 R2安装序列号 ...
- Unity打包安卓如何存储本地游戏数据?
一.前言 平时项目得数据文件文件一般都使用Resources.Load或者Application.streamingAssetsPath这两中方式读取,但是项目打包成Android或IOS时这些路径获 ...
- Unity(游戏)中五种数据存储的方法
Unity(游戏)中五种数据存储的方法 一.PlayerPrefs unity3d提供了一个用于本地持久化保存与读取的类-------PlayerPrefs.工作原理很简单,以键值对的形式将数据保存在 ...
- 游戏服务器技能系统,MMORPG游戏服务器技能系统设计【上篇】 - 踏踏实实,认真工作 - CSDN博客...
MMORPG游戏服务器技能系统设计[上篇] 收藏 本文主要从一个程序员的角度阐述一下mmorpg服务器技能系统的程序框架设计,最近在做这个,就当做一个总结吧,其中某些概念可能没有解释清楚,欢迎大家拍砖 ...
- 第十三课 斗地主项目课③游戏音乐与音效及本地存储
一.动态加载资源 1.静态加载 通过把资源挂载在场景上节点上或者场景节点的组件上 cc.director.load("hallScene")//场景切换的同时加载场景资源 静态加载 ...
- 【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储)...
对于数据的存储,Android 提供了4种保存方式. (1)SharedPreference 此方法适用于简单数据的保持,文如其名,属于配置性质的保存,不适合比较大的情况,默认存放在手机内存里 (2) ...
- Springboot游戏道具在线交易平台毕业设计源码171956
Springboot游戏道具在线交易平台 摘 要 现今人们的生活方式逐渐丰富,电脑和网络已经融入了人们生活中的滴滴点点,无时不刻的影响着我们的日常生活,网络游戏已经进入到了大多数人的生活之中.在游戏的 ...
- (附源码)springboot游戏道具在线交易平台 毕业设计171956
Springboot游戏道具在线交易平台 摘要 现今人们的生活方式逐渐丰富,电脑和网络已经融入了人们生活中的滴滴点点,无时不刻的影响着我们的日常生活,网络游戏已经进入到了大多数人的生活之中.在游戏的世 ...
- (附源码)springboot游戏道具在线交易平台 毕业设计171956
Springboot游戏道具在线交易平台 摘要 现今人们的生活方式逐渐丰富,电脑和网络已经融入了人们生活中的滴滴点点,无时不刻的影响着我们的日常生活,网络游戏已经进入到了大多数人的生活之中.在游戏的世 ...
最新文章
- 默认访问首页 || 国际化||设置全局字符编码的默认设置
- ElasticStack系列之十六 ElasticSearch5.x index/create 和 update 源码分析
- Java-Java I/O流解读之基于字节的I / O和字节流
- java 生产配置文件管理_JAVA基础——使用配置文件
- AIX下RAC搭建 Oracle10G(六)dbca建库
- 94级计算机科学,清华大学计算机科学与技术系
- php怎么表示合数,什么是合数 合数的定义
- 微软 Powertoys 推出新的实用程序,自定义键盘快捷管理
- 在opencv3中的机器学习算法
- Unity Asssetbundle问题记录
- 基于 FPGA 的智力抢答器设计
- 排错技能:任务管理器中追踪某w3wp.exe是哪个IIS站点的application pool
- php实现禁止缓存,高手莫来
- 结合element-ui封装的一个分页函数
- 运行QTP测试脚本后,将编译结果写入指定文件(四)
- Qt高级编程完整源码
- 算法导论第三版习题及答案
- python源代码被解释器转换后的格式_python源代码被解释器转换后的格式是什么?...
- VS2010 C++单元测试之gtest与OpenCppCoverage实践
- Oracle中如何查询CLOB字段类型的内容
热门文章
- 开源免费代码_01_基于Arduino的ESP-NOW,ESP32发送指令、ESP-01S接收指令,通过ESP-01S继电器实现LED灯开关控制_公羽兴
- 一个女孩子买什么房?把自己搞得那么辛苦,房子男人有
- 华为设备linux ssh登录失败,在华为设备上配置一个SSH登录案例
- Android 11.0 12.0USB鼠标右键改成返回键
- 访问https网站显示“你的连接不是专用连接”解决方法
- 男人会等一个女人多久
- 3D 快速行进算法(Fast Marching Method in 3D case)
- java小马哥springboot_小马哥Spring Boot 系列Java微服务实战视频教程
- 【原】Qone Mysql性能优化-实战篇
- 2019人工智能发展趋势阅读笔记 (原创: 浦东改发院金融研究室主任刘斌)