6
我在下面發現了一些討論此場景的線索。Firebase:在單筆交易中更新多個對象
- Firebase: How do I update multiple resources atomically
- Firebase data consistency across multiple nodes
- How to store users and groups for a chat using Firebase
但是仍然在努力尋找,如果有任何建議的數據結構設計這一點。 我看到一個多寫庫firebase-multi-write其中說你可能不需要在大多數情況下。
但是我覺得我需要這個,我的方案是:3個用戶
/users/A : {credit:20}
/users/B : {credit:3}
/users/C : {credit:10}
而且每個用戶可以相互都在同一時間偷學分,
- 一來自B學分的搶斷看起來像{21,2}
- B從C學分的搶斷看起來像{3,9}
- 來自A學分的C搶斷看起來像{11,2 0}
現在我需要更新每個用戶的信用來保持這種一致性,以便每個竊取操作本質上是原子性的。
什麼是最好的方式來處理這種情況,同時保持數據的完整性Java?
你的第一個連接線程會談有關的另一種方法(事件採購 - http://martinfowler.com/eaaDev/ EventSourcing.html)。您會編寫一個捕獲所有三個盜竊事件的事件,然後當您需要查找當前的貸方餘額時,您可以加載初始狀態(可能爲0個貸記),然後播放事件歷史記錄,直到最終狀態結束。積分 - 你有所有「搶斷」的歷史。有沒有理由不接受? –
謝謝,我提到的場景是我設想的工作流程的簡化版本。這是簡單的遊戲應用程序的一部分,其中A搶斷形式B,並在下一刻B搶斷它與C和D球員的混合。所以它對於一個簡單的原子更新只是太多的計算? – duskandawn
我不知道你的場景是否知道原子操作是否會起作用 - 但是你描述的對我來說聽起來不像是原子操作。如果A從B拿走然後「在下一個時刻」B將其偷回......那不是原子的。這是發生在彼此附近的兩種截然不同的操作。 –