當他驗證他的郵件地址時,我正在使用優惠券系統上的 Cloud Functions 為用戶分配優惠券。
對于我的設計,我有一個 /coupons 集合,其中預裝了很多優惠券。
用戶驗證他的郵件地址呼叫 HTTP firebase 函式,為此我想將優惠券分配給用戶從優惠券集合中選擇一個,通過優惠券集合上名為“userId”的欄位查詢。
查詢示例:
const pickOne = () => {
return firestore
.collection('coupons')
.where('userId', "==", 'none')
.limit(1)
}
我知道 Firestore 交易。
我的想法(如果可能的話)是呼叫 pickOne 作為事務 get() 函式的引數,并在其上寫入值“userId”,然后關閉并提交事務。
我的疑問與鎖定系統有關:是否可以避免并發用戶擁有相同的優惠券?
uj5u.com熱心網友回復:
是的,您可以在事務中執行此類查詢,以有效地為用戶找到單個檔案,在其中寫入他們的 ID,并防止它在具有相同查詢的其他事務中再次使用。它僅適用于后端 SDK(如 nodejs),不適用于客戶端 SDK。我在其他專案中也做過這種事情。
有關詳細資訊,請參閱API 檔案。
您唯一應該注意的是,在高寫入壓力下,事務可能由于重試次數過多而失敗。在這種情況下,您將不得不在代碼中顯示錯誤或手動重試。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/421182.html
標籤:
