2016-02-17 25 views
4

我想知道如何在Firebase中相應地更新我的數據。Firebase:原子交易和多位置更新

我的應用是一個社交網絡。假設我必須更新user對象和post中的查看計數,當訪問者進來時,我還必須更新同一對象中的updatedAt值。

  • viewsupdatedAt領域都有在postuser兒童特定.write授權,因此任何人都可以對其進行修改,不像其他孩子。
  • views兒童必須使用transaction遞增計數原子
  • updatedAt孩子,另一方面,可以以任何方式更新,transactionsetupdate進行更新。

我想通過將這些更新放在一起來限制對Firebase的調用次數,並使整個更新原子化。 (也正因爲有更多的,我不描述這裏)

的問題是:

  1. 一個transaction同時更新viewsupdatedAt必須出現兩次:在postsusers對象,但一個訪客不能寫在這些不屬於他的物體上,只有兩個viewsupdatedAt的孩子可以修改。 (即使其他人未觸及)。
  2. 多位置事務在當前的Firebase API AFAIK中不可用,因此這也不是原子。
  3. 在多用戶環境中,每個孩子的多位置更新會打破view孩子的原子性,這是一個問題。

最後,就是我目前在做:

一對views孩子transaction,並在updatedAt那些單一update,在兩個postsusers對象,這使他們作業查看查看訪客。很多!

這也不是原子的,除了views孩子,這對時間戳字段不是什麼大問題,但在其他用例中仍然存在問題。

我的問題是:

任何建議爲更好地執行?

+0

」文檔說更新會破壞在該對象上發生的所有事務,它是全局的嗎?不。這是您更新路徑上的所有交易。 –

+0

對不起,我不明白,全球I ment:不僅是當前的用戶會話,但應用程序的任何用戶(我明白事務需要在更新的'路徑'被取消)。我想這是答案顯然是*是*。 – Pandaiolo

+0

我的錯誤[Firebase文檔](https://www.firebase.com/docs/web/api/firebase/transaction.html)明確表示,雖然交易在同一地點被本地'set'取消,它是*不*被其他客戶端的'set'取消。如果其他客戶端訪問相同的位置,本地客戶端將重新嘗試使用最新數據的事務。 – Pandaiolo

回答

0

至少,您應該能夠使用data fan-out method撥打一個update()來更新用戶和帖子上的updatedAt字段。

您可能擁有的任何增量計數器仍然需要單獨的事務才能正確處理。 「