经常进行数据库计算

时间:2017-09-04 22:37:43

标签: php mysql

我正在构建一个浏览器php游戏。

将有金属,木材,食品等资源。玩家将一直获得资源(根据建筑物/矿场/农场水平获得资源的速度)。

资源数量保存在数据库resources表中。 让我们说现在每个人每小时会得到5万金属。 将这些值保存到数据库或重新计算它们的最佳方法是什么?

将这些值每秒添加到resources表以保持更新会很疯狂。如何做到最好?

1 个答案:

答案 0 :(得分:1)

如果您能负担得起有状态的设计,我发现通常最好在会话中保留和维护它们,并汇总更改并按设定的时间间隔(比如说10分钟)将其写入数据库,或者会议结束。

高更新率可能会导致数据库性能下降:当您写入的表具有任何重要索引时,此影响会成倍增加。不同的数据库可以支持不同的事务处理速率,如果您有多个用户,则每秒一次的更新只会 kill 性能。

另一种方法是将这些更新写入本地或临时队列表,仅包含自动增量字段的索引,并定期清理它以将这些更新以低优先级添加到最终目标表中。这样可以降低更新开销,并减少对关键表的争用,但这也意味着您的应用程序逻辑必须读取数据库值,并添加" pending"在收到可用值之前进行更改。

上面两个中间点的最后一个替代方法是使用队列来存储挂起的数据库更改,但是当仍有未写入的更改时,它会使计算时间点值更加困难队列。