[英]What to do if a transaction fails?
因此,基本上,有一個游戲,您擁有一個星球,然后將飛船運送到其他星球,然后您便可以擁有該新星球。
PlanetB正在被一艘船攻擊:
[行星A] ----> [行星B]
當PlanetB被征服后,到達船的過程如下:
請注意,事務是在另一台服務器上完成的,我無法將它們都合並到一個事務中。
貨幣和存款基本上很重要,因為它們很重要(在serverA上),但游戲本身並在內存中(在serverB上)運送。
所以問題是:
如果T0由於數據庫錯誤而失敗,該怎么辦,例如,我收到太多連接錯誤。 我可以忽略它,但是不好,因為PlanetA的所有者不會收到新擁有的星球的錢。
與T1相同,事務因某些奇怪的數據庫連接錯誤而失敗。 玩家甚至不會得到他的星球。 將需要派另一艘船重試,這不是最佳選擇。
我應該一遍又一遍地重試,直到它阻止那艘船長時間進入地球為止。
我認為沒有一個簡單的答案。 聽起來好像db系統有點過載,應該配置為承受更大的負載。 然后,這取決於您要保持的一致性。 我的第一個想法是在數據庫准備就緒之前將數據卸載到其他存儲中,然后將數據保存在那里。 您可以添加一些消息傳遞代理(例如zeromq),該代理可能能夠接收少量數據,然后在后台(例如分批)將數據加載到數據庫。 或者,您可以通過在服務器B上無法訪問數據庫的情況下將數據保存到文件(日志)中來進行類似操作,並在可能的情況下嘗試將數據保存到數據庫中。 請注意,此“解決方案”使您的數據更改最終保持一致。 我的意思是,如果日志中有一些卸載的數據(例如,如果您查詢數據庫),則無法保存它們,此時用戶可以觀察到不同的數據狀態。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.