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