我们正在构建一个HTML5 MMO,它将利用AJAX调用一个用Python编写的REST进行操作(买卖、构建、交易、发送、攻击)。
这个项目的第二部分是一个Java服务器,它每隔一次用播放器统计数据更新数据库(由于性能原因,我们的服务器滴答是每5秒一次)。
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服务器)
发布于 2013-12-01 16:55:38
每隔一秒钟更新整个DB并不是一个好主意。一般的RDBMS (特别是Postgres )并不是为这种负载而设计的。
只在需要时尝试更新字段。类似于:
last_gold_amount和last_gold_updated。current_gold_amount = last_gold_amount + interest_rate * (current_time - last_gold_updated)current_gold_amount存储为last_gold_amount,存储last_updated。current_gold_amount。对于您拥有的任何“货币”都可以执行类似的计算。
此外,步骤4只能在用户使用货币或更改利率以进一步降低DB上的负载时执行。
此外,所有计算都可以隐藏在VIEW或一组存储过程中的Postgres中,这样您就可以使用简单的SQL查询获得/修改“货币”的数量。
https://stackoverflow.com/questions/20307211
复制相似问题