数据库选择历程

我们的项目一直使用MySQL作为数据库。无论是从C++的服务器,还是到Golang服务器。 当年搞服务器时,看大部分人都是用SQL(MySQL/SQLServer),而Mongo感觉像邪教一样,再加上服务器还是Linux比较正统,所以果断选了MySQL。

刚开始感觉,游戏服务器的数据存储其实应该是蛮神圣的过程。那么多的数据, 需要按照MySQL一样分表,分字段存储,为了查询,还要乖乖的学一下SQL的语法。

就这么折腾了几年,在云DB的蒙蔽下,一直认为MySQL就是做游戏服务器存储的专业技术。分布式和存储压力一定交给云DB来做。直到真正试了下NoSQL在游戏服务器开发里的思路。

用了Golang,才发现同步写逻辑是多么的优雅。

用了NoSQL系列的数据库,才意识到: 游戏服务器的数据存储和游戏服务器的存盘两个概念差异其实蛮大的。

MySQL中,背包其实跟角色完全没有关系,只是通过1个角色id映射过去,人为的割裂了数据的关联性。还硬生生的整出个概念叫结构化查询让你学。

NoSQL中,只是把数据库当成是存储点,每个角色的数据是完整的一块。里面怎么存随你便。每个角色通过id来查询,其他都没有了。

于是乎,游戏开发变得异常简单。MySQL角色进门查询4~5次才能搞定要的数据。而NoSQL一口气全查出来,手机号出售平台存盘也无需增量,直接存盘就可以了。

所以现在觉得,NoSQL的思路对于游戏服务器存储来说简直是完美的!

NoSQL数据库方案对比

NoSQL下实现方案很多,游戏常用的就这么3家: mongo, redis, memcached

下面说下优缺点

mongo

磁盘映射内存数据库

value为document类型,基于BSON的value序列化

应用场景:

适合多写少读,例如日志和备份

redis

内存数据库

单核

value限制512M

多种value类型,游戏用途使用私有的序列化协议(例如protobuf)

支持落地(bgsave)

用户: 新浪,淘宝,Flickr,Github

应用场景: 适合读写都很高,数据处理复杂等

memcached

内存数据库

多核

value限制1M

不支持落地(持久化)

用户: LiveJournal、hatena、Facebook、Vox

应用场景: 动态系统中的缓冲,适合多读少写

个人评价

memcached 适合网页缓冲,游戏里很少有使用。目前只有腾讯云支持云memcached。

redis非常适合游戏的内存数据库,但是落地策略会比较复杂,需要具体分析,可以参考后面的链接看下云风怎么处理这个问题。

mongo数据库在早期还是非常不错的NoSQL的数据库。工具比较方便,可视化。但是随着近年来游戏的并发度越来越高, 所以为了一次到位,很多人还是选择了redis。

游戏服务器存储数据库选型相关推荐

  1. 游戏道具存储mysql_游戏服务器存储系统设计

    本文内容源自腾讯游戏学院程序公开课_服务器第四节 一.数据存储基础 什么是数据存储? 运行数据保存到硬盘上形成持久化数据. data-->file(database)-->file sys ...

  2. 游戏服务器存储数据怎么修改,修改游戏服务器数据的教程

    修改游戏服务器数据的教程 内容精选 换一换 华为云数据安全中心帮助中心,为用户提供产品简介.用户指南.API和常见问题等技术文档,帮助您快速上手使用数据安全中心服务. 体验馆提供了各场景下的无服务器构 ...

  3. 攻击游戏服务器 修改数据库,游戏服务器数据库修改器

    游戏服务器数据库修改器 内容精选 换一换 应用容器化改造有三种方式,您可单击这里查看.本教程以某游戏为例,将该游戏进行微服务的架构改造,再进行容器化.本教程不对改造细节做深度讲解,仅讲解大致的建议.如 ...

  4. 游戏服务器存储数据怎么修改,游戏服务器数据修改

    游戏服务器数据修改 内容精选 换一换 本教程旨在演示使用GDS(General Data Service)工具将远端服务器上的数据导入GaussDB(DWS)中的办法,帮助您学习如何通过GDS进行数据 ...

  5. online游戏服务器架构--数据库及事件相关 .

    Online服务器的第三部分就是数据层,send_request_to_db开始了数据层的处理逻辑: int send_request_to_db(int cmd, sprite_t* p, int ...

  6. 当我设计游戏服务器时,我在想些什么?(1)

    机缘巧合的机会,我有幸能够从头开始设计一个游戏的服务器.中间遇到很多欢声笑语和悲伤泪水,这里分享一下. 我之前所在项目组的游戏服务器架构如下图: 这款游戏是一款MMO的端游,GateWay网关的任务是 ...

  7. 如何学习java游戏服务器开发?

    为什么游戏服务器很多都用Java开发 Java 做游戏服务器开发的优势还是很多的,<我的世界>的服务器就是Java开发的.Java技术比较成熟,大数据,云计算,网站App后台,基本都采用J ...

  8. go hive skynet_MMORPG游戏服务器技术选型参考-Go语言中文社区

    游戏服务器一般追求稳定和效率,所以偏向于保守,使用的技术手段也是以已经过验证.开发人员最熟悉.能HOLD为主要前提. 1.典型按场景分服设计 开发语言: c++ 数据库:mysql 架构: 多个网关: ...

  9. 分布式的客户端-服务器结构_MMORPG游戏服务器技术选型参考

    游戏服务器一般追求稳定和效率,所以偏向于保守,使用的技术手段也是以已经过验证.开发人员最熟悉.能HOLD为主要前提. 1.典型按场景分服设计 开发语言: c++ 数据库:mysql 架构:多个网关:维 ...

  10. ce能修改服务器数据吗,ce修改游戏服务器数据库

    ce修改游戏服务器数据库 内容精选 换一换 数据安全中心与周边服务的依赖关系如图1所示.对象存储服务(Object Storage Service,简称OBS)是一款稳定.安全.高效.易用的云存储服务 ...

最新文章

  1. relu与maxpool
  2. react useRef()函数
  3. This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its de 错误解决办法
  4. Halcon初学者知识 【13】如何在MFC中调用Halcon代码
  5. ITK:将图像翻转到指定的轴上
  6. 高效实用Kafka-入门介绍
  7. Python3之数据类型
  8. Java设计模式学习总结(15)——行为型模式之责任链模式
  9. java xml binding_JAXB(Java Architecture for XML Binding)
  10. 成绩单表格html,【Web前端HTML5CSS3】15-表格
  11. pandorabox 潘多拉固件路由器作为无线打印机服务器记录
  12. C#中提供了三种类型的计时器的比较实验(转自百度文库)
  13. winpe加载raid_winpe里添加raid驱动
  14. Google退出中国的影响分析
  15. 从入门到放弃:微信小程序入门个人指南Day 4
  16. bomb和mysql_Bigger Bomb
  17. 监控时代,那无处安放的隐私
  18. PaddlePaddle 波斯顿房价预测训练结果
  19. asp医院病历管理系统
  20. android nfc公交,安卓手机怎么刷公交、地铁 移动NFC手机交通业务介绍

热门文章

  1. ShopTalk第19集
  2. 支付宝付款弹窗 被浏览器拦截
  3. matlab quadratic,请教几个quadratic programming的问题
  4. 编译原理 自下而上分析题型
  5. C语言 负数对正数取余,负数取余/整除,Python和C语言的不同
  6. python打开文件方式
  7. 一刹那,是幡然悔悟的一刹那
  8. Python:实现pollard rho大数分解算法(附完整源码)
  9. 做一个视频通话给自己用吧
  10. 阴阳师1月服务器维护,阴阳师1月15日更新维护公告 鬼童丸降临平安京