热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

ET中的数据存储与终章

ET中的数据存储ET采用MongoDb进行数据存储,并将数据存储部分拆分

ET中的数据存储

ET采用MongoDb进行数据存储,并将数据存储部分拆分为单独的数据存储服务,游戏逻辑端使用数据存储代理组件处理。整体代码如下图所示:

数据库代理服务组件整体如下图所示: 

可以看出,ET按照请求类型的不同拆分到不同的Task执行。实际上,ET默认是开了32个协程(代码见: DBComponent.Awake
)来调度所有Task。当然,线程仍然是只有一个。MongoDB驱动有提供异步处理函数,所以这种方式不会阻塞主线程逻辑处理

数据库操作游戏端整体结构如下图所示:

说明:

  • 游戏逻辑服务通过数据库代理组件访问数据库代理服务

  • 游戏逻辑服务和数据库代理服务通过自定义的RPC进行通信

mongodb简介

mongodb是nosql数据库分支中的一个重要代表——文档数据库。它有如下特点:

  • 开源数据库 mongodb是一个开源数据库,但实际是分为社区版和企业版。区别只是企业版功能丰富些。

  • 支持GridFS,可以存储大文件和海量数据 GridFS是大文件存储在mongodb中的一种规范,使用分片方式存储超过16兆的文件

  • 使用Bson表示和存储数据 Bson可以理解为是json的升级版,它可以有效存储字节流数据。因为它采用Length+Data格式表示数据,所以它的检索速度比json快很多

  • 非常灵活 如果访问的数据库不存在则自动创建;如果访问的collection(相当于关系型数据库中的表)则自动创建。可以随意调整colletion中每项数据的结构,而不用做提前处理(关系型数据库表结构调整都需要用sql提前处理)

  • 支持水平扩展 网上说用两台服务器就可以将性能提升一倍,实际应该没这么夸张,但确实会提升很大的性能,具体可以简单了解下其原理就知道了

  • 单机性能比mysql要好很多 腾讯云2核4G服务器QPS(50%写%50读的情况下):5000 。mysql的TPS只有860

  • 有sql中间件 可以使用sql简单查询mongodb中的数据


当然以上并没有完全包含mongodb的所有特点。如需要具体了解可以查看最后的参考资料


mongodb才出现时,有很多人都感叹,这不就是为游戏而生的数据库么。经过反复思量,这点我也比较赞同。游戏数据存储有以下特点:


  • 写多于读 玩家的同一条数据一般最多只会读一次,但会反复更新。而这正是mongodb的长项

  • 数据间弱关系 一般玩家数据要么按照模块取出,要么直接全部取出,玩家的所有数据间的关系一般都比较弱化(特别是数据库端)


可以看出,关系型数据库的特点基本没有在玩家数据中有体现。特别是在mongodb也有很成熟的sql中间件时,它可以较好解决运营过程和问题排查过程对数据查询的sql的需求

网上也有测试说mongodb在有此情况下性能表现都不如mysql。这个不可否认,mongodb主打的是数据存储和简单访问。所以很多特殊操作可能确实不如mysql


最后,有没有心动?放弃mongodb可以,但至少作为游戏开发的你值得去好好了解下mongodb。或许就喜欢上了呢

终章

这是ET框架系列的最后一篇文章啦(以后或许会补充一些)。其中没有详解的部分包含前端部分,rpc部分。前端不在我现在熟知的范围内。rpc部分将在接下来用一系列文章详解

看了大部分ET代码后,不得不感叹作者的学识和智慧,和对知识的理解入微。好的代码就像一个艺术品。读着这篇文章的你有没有感受到呢?

参考资料
  • Cassandra简介

  • MongoDB 入门篇

  • Mysql和MongoDB性能对比及应用场景分析

  • MongoDB的真正性能-实战百万用户

  • mongodb三种存储引擎高并发更新性能专题测试

  • Mongodb 与 MySQL对比

后续计划

接下来,我会写一系列关于RPC的文章。我有用go语言实现了一个可以两边rpc的框架(还在完善中),主要借鉴了grpc和golang标准库的rpc。有兴趣的同学可以看看哈。

至于不同类型游戏的数据存储由于拆出来单看存储意义不大,所以将在后面拆解不同游戏类型的框架设计时再具体分析和设计数据存储部分。

写在最后

本公众号将持续推送游戏后端开发相关文章,大家记得扫码关注哦



推荐阅读
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • 本文将深入探讨MySQL与MongoDB在游戏账户服务中的应用特点及优劣。通过对比这两种数据库的性能、扩展性和数据一致性,结合实际案例,帮助开发者更好地选择适合游戏账户服务的数据库方案。同时,文章还将介绍如何利用Erlang语言进行高效的游戏服务器开发,提升系统的稳定性和并发处理能力。 ... [详细]
  • Panabit应用层流量管理解决方案
    Panabit是一款国内领先的应用层流量管理解决方案,提供高度开放且免费的专业服务,尤其擅长P2P应用的精准识别与高效控制。截至2009年3月25日,该系统已实现对多种网络应用的全面支持,有效提升了网络资源的利用效率和安全性。 ... [详细]
  • 前两天有位朋友邀请我回答个问题,为什么MongoDB(索引)使用B-树而Mysql使用B+树?我觉得这个问题非常好,从实际应用的角度来学习数据结构,没有比这更好的方法了。因为 ... [详细]
  • Web开发框架概览:Java与JavaScript技术及框架综述
    Web开发涉及服务器端和客户端的协同工作。在服务器端,Java是一种优秀的编程语言,适用于构建各种功能模块,如通过Servlet实现特定服务。客户端则主要依赖HTML进行内容展示,同时借助JavaScript增强交互性和动态效果。此外,现代Web开发还广泛使用各种框架和库,如Spring Boot、React和Vue.js,以提高开发效率和应用性能。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Spring Boot与Redis的高效集成方案
    本文探讨了Spring Boot与Redis的高效集成方法,详细介绍了如何在Spring Boot项目中配置和使用Redis,以提升应用性能和数据处理能力。同时,文章还涉及了Go语言社区的相关资源,为Golang开发者提供了宝贵的技术交流平台。 ... [详细]
  • JVM上高性能数据格式库包Apache Arrow入门和架构的示例分析
    小编给大家分享一下JVM上高性能数据格式库包ApacheArrow入门和架构的示例分析,希望大家阅读完这篇文章之后都有所收获,下面让我们一起去探讨吧!Apac ... [详细]
  • Redis概念
    Redis概念:redis是一款高性能的NOSQL系列的非关系型数据库什么是NOSQLNOSQL(NoSQLNotOnlySQL),意即不仅仅是SQL,是一项全新的数据库理念, ... [详细]
  • 在CentOS上部署和配置FreeSWITCH
    在CentOS系统上部署和配置FreeSWITCH的过程涉及多个步骤。本文详细介绍了从源代码安装FreeSWITCH的方法,包括必要的依赖项安装、编译和配置过程。此外,还提供了常见的配置选项和故障排除技巧,帮助用户顺利完成部署并确保系统的稳定运行。 ... [详细]
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • 为何Serverless将成为未来十年的主导技术领域?
    为何Serverless将成为未来十年的主导技术领域? ... [详细]
  • nsitionalENhttp:www.w3.orgTRxhtml1DTDxhtml1-transitional.dtd ... [详细]
  • 我从GoogleFirebase服务中看过视频并阅读了Cloudfirestore的文档,但我无法想象实时数据库.我想到了这个Web应用程序,我希望从不同类别的产品中存储我的提供程 ... [详细]
author-avatar
自由就是幸2602880665
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有