因此,基本上有一个游戏,您拥有一个星球,然后将飞船运送到其他星球,过一会儿您便可以拥有该新星球。
PlanetB被一艘船袭击:
[PlanetA] ----> [PlanetB]
PlanetB被征服后到达船的过程如下:
请注意,事务是在另一台服务器上完成的,我无法将它们都合并到一个事务中。
基本上,钱和存款很重要,因为它们很重要(在serverA上),但是游戏本身并在内存中(在serverB上)运送。
所以问题是:
如果T0由于数据库错误而失败,该怎么办,例如,我收到太多连接错误。我可以忽略它,但是不好,因为PlanetA的所有者不会收到新拥有的星球的钱。
与T1相同,事务因某些奇怪的数据库连接错误而失败。玩家甚至不会得到他的星球。需要发送另一艘船重试,这不是最佳选择。
我应该一遍又一遍地重试此操作,直到它阻止该船长时间进入行星。
答案 0 :(得分:0)
我认为没有一个简单的答案。听起来好像db系统有点过载,应该配置为承受更大的负载。 然后,这取决于您要保持的一致性。我的第一个想法是在数据库准备就绪之前将数据卸载到其他存储中,然后将数据保存在那里。您可以添加一些消息传递代理(例如zeromq),该代理可能能够接收少量数据,然后在后台(例如分批)将数据加载到数据库。或者,您可以通过在服务器B上无法访问数据库的情况下将数据保存到文件(日志)中来进行类似操作,并在可能的情况下尝试将数据保存到数据库中。 请注意,此“解决方案”使您的数据更改最终保持一致。我的意思是如果有一些卸载的数据,例如在日志中,您查询数据库后将无法保存它们,此时用户可以观察到不同的数据状态。