我想知道nosql选项可以替代或与典型MMORPG的rdbms一起使用有什么好处.特别是,我很好奇如何在nosql下保留数据完整性.
我将举几个例子,我对服务器逻辑的运行方式感到困惑:
场景1:让我们说玩家A和B同时攻击玩家C. 对于任何玩家杀死玩家C,都会更新player_stats.kill_count.通常,可以通过以下方式处理此AttackPlayerRequest:
开始交易{attacker.health = newAttackerHealth
defender.health = newDefenderHealth
if defender.Health == 0 {attacker.stats.kills + = 1}}
场景2:玩家A将物品出售给NPC供应商,并迅速尝试将同一物品从库存中丢弃到地面.(即使你的UI不允许这样做,他们当然可以把事件放在线上).
这个列表显然会继续影响每个玩家 - 玩家 - 玩家 - 世界互动.最后一条信息是服务器是线程化的,因为我们不希望任何特别冗长的请求阻止其他玩家在游戏中做简单的事情.
我想这里我的大问题是,我是否误解了一些关于nosql的问题,其中这是一个微不足道的问题?如果没有,这是否超出了nosql选项要解决的范围?在典型的MMO下,可能会注入nosql选项来提高服务器性能吗?
小智 5
这一切都取决于您的游戏如何运作。
无SQL
facebook 上的 Farmville 使用 NoSQL。Farmville 就像一个巨大的服务器,每个人都在使用。假设 Farmville 在其数据库集群中使用 3 台计算机。圣地亚哥的计算机 1。纽约的计算机 2。莫斯科的计算机 3。我从圣地亚哥登录 Facebook,所以我在这里连接到数据库。我升级并注销。最终,计算机 1 会告诉计算机 2 和 3 我是如何升级的,但在俄罗斯可能需要一个小时才能看到我帐户的这些更改。
NoSQL 扩展就像将另一台计算机添加到集群并告诉该地区的网站使用该计算机一样简单。
SQL
有几种方法可以使 SQL 工作,但我将解释一种使其类似于 NoSQL 的方法
每个数据中心将有 10 个游戏服务器,每个游戏服务器都有自己的 SQL 数据库 + 1 个子主数据库。子主数据库在所有 10 个服务器之间共享信息,因此如果您登录服务器 1 并创建角色 John Doe,然后注销,如果您接下来登录该服务器,服务器 10 将拥有您的角色。
Sub Master 然后与您总部的主服务器共享其信息。然后,主服务器会将 John Doe 共享给所有其他数据中心的所有其他子主服务器,这些子主服务器将更新他们的游戏服务器。此配置将允许您登录旧金山的 Weed 服务器,播放您的角色,注销,登录莫斯科的服务器 Vodka,并且仍然可以看到您的角色。
《魔兽世界》等游戏使用 SQL,但仅共享数据库的某些部分。这允许减少每台计算机上的数据库大小并减少硬件要求。
在现实生活中,每个 Sub Master 都会有一个备用的 Sub Master,如果一台服务器出现故障,您的 Master 服务器将有一些备用服务器,您的整个网络不会锁定。
我认为 MMO 服务器可以做很多你在内存中列出的事情。我认为他们不会将所有这些内容都刷新到数据库中。我认为更多困难的事件,例如接收新装备或更改装备布局将被保存。
这是大量数据,但还没有每一次战斗交互那么多。
| 归档时间: |
|
| 查看次数: |
2456 次 |
| 最近记录: |