首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MMO引擎的概念设计

MMO引擎的概念设计
EN

Stack Overflow用户
提问于 2013-12-01 00:09:29
回答 1查看 423关注 0票数 2

我们正在构建一个HTML5 MMO,它将利用AJAX调用一个用Python编写的REST进行操作(买卖、构建、交易、发送、攻击)。

这个项目的第二部分是一个Java服务器,它每隔一次用播放器统计数据更新数据库(由于性能原因,我们的服务器滴答是每5秒一次)。

代码语言:javascript
复制
Update town SET "currency" = "currency" + "currency_rate"
//each player can own an average of 100 towns and 
//we are benchmarking with 50k for right now

这个查询将根据他们的汇率更新他们的货币。这个查询需要2.6秒才能更新50k的货币,但我们还有其他几个字段,金属、陶瓷、食品和人口。

问题:使用这种技术,我们只能让服务器每3秒至少勾一次。我们该如何解决这个问题。如何不断地更新数千个条目?

我们的第二个解决方案:我们将大部分城镇加载到并发Hashmap中,java将使用它作为临时数据库,并每分钟更新整个数据库。( API将是Java服务器)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-12-01 16:55:38

每隔一秒钟更新整个DB并不是一个好主意。一般的RDBMS (特别是Postgres )并不是为这种负载而设计的。

只在需要时尝试更新字段。类似于:

  1. 用户希望看到黄金的数量。
  2. 系统从DB获取last_gold_amountlast_gold_updated
  3. 系统计算current_gold_amount = last_gold_amount + interest_rate * (current_time - last_gold_updated)
  4. 系统将current_gold_amount存储为last_gold_amount,存储last_updated
  5. 向用户显示current_gold_amount

对于您拥有的任何“货币”都可以执行类似的计算。

此外,步骤4只能在用户使用货币或更改利率以进一步降低DB上的负载时执行。

此外,所有计算都可以隐藏在VIEW或一组存储过程中的Postgres中,这样您就可以使用简单的SQL查询获得/修改“货币”的数量。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20307211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档