4
我想知道如何在Firebase中相應地更新我的數據。Firebase:原子交易和多位置更新
我的應用是一個社交網絡。假設我必須更新user
對象和post
中的查看計數,當訪問者進來時,我還必須更新同一對象中的updatedAt
值。
- 的
views
和updatedAt
領域都有在post
和user
兒童特定.write
授權,因此任何人都可以對其進行修改,不像其他孩子。 - 的
views
兒童必須使用transaction
遞增計數原子 - 的
updatedAt
孩子,另一方面,可以以任何方式更新,transaction
,set
或update
進行更新。
我想通過將這些更新放在一起來限制對Firebase的調用次數,並使整個更新原子化。 (也正因爲有更多的,我不描述這裏)
的問題是:
- 一個
transaction
同時更新views
和updatedAt
必須出現兩次:在posts
和users
對象,但一個訪客不能寫在這些不屬於他的物體上,只有兩個views
和updatedAt
的孩子可以修改。 (即使其他人未觸及)。 - 多位置事務在當前的Firebase API AFAIK中不可用,因此這也不是原子。
- 在多用戶環境中,每個孩子的多位置更新會打破
view
孩子的原子性,這是一個問題。
最後,就是我目前在做:
一對views
孩子transaction
,並在updatedAt
那些單一update
,在兩個posts
和users
對象,這使他們作業各查看各查看各訪客。很多!
這也不是原子的,除了views
孩子,這對時間戳字段不是什麼大問題,但在其他用例中仍然存在問題。
我的問題是:
任何建議爲更好地執行?
」文檔說更新會破壞在該對象上發生的所有事務,它是全局的嗎?不。這是您更新路徑上的所有交易。 –
對不起,我不明白,全球I ment:不僅是當前的用戶會話,但應用程序的任何用戶(我明白事務需要在更新的'路徑'被取消)。我想這是答案顯然是*是*。 – Pandaiolo
我的錯誤[Firebase文檔](https://www.firebase.com/docs/web/api/firebase/transaction.html)明確表示,雖然交易在同一地點被本地'set'取消,它是*不*被其他客戶端的'set'取消。如果其他客戶端訪問相同的位置,本地客戶端將重新嘗試使用最新數據的事務。 – Pandaiolo