所以基本上有一个游戏,你拥有一个星球,你将船只发送到其他星球,稍后你可以拥有这个新星球。
PlanetB遭到船只攻击:
[PlanetA] ----> [PlanetB]
PlanetB被征服时船舶抵达的过程如下:
请注意,事务在另一台服务器上完成,我无法在一个事务中加入它们。
基本上货币和存款都存储在数据库中,因为它们很重要(在服务器上),但游戏在内存中(在服务器上)运行。
所以问题是:
我应该一遍又一遍地重试,直到什么时候,它可以阻止那艘船长时间进入这个星球。
我认为没有一个简单的答案。所有这些听起来像db系统稍微过载,应该配置为承受更大的负载。然后一切都取决于你想要的一致性。我的第一个想法是在数据库准备好之前将数据卸载到其他存储,然后保存数据。您可以添加一些消息代理(例如zeromq),它可能能够接收一定量的数据,然后在后台(例如批量)将数据加载到数据库。或者,您可以通过将不可访问的数据库中的数据保存到服务器B上的文件(日志)来执行类似的操作。并尝试在可能的情况下将数据保存到数据库。请注意,此“解决方案”会使您的数据更改最终保持一致。我的意思是如果有一些卸载的数据,例如在日志中,您查询数据库时无法保存,用户可以在该时间点观察不同的数据状态。