2

理論場景:我有一個ecomerce網站,用於在GAE數據存儲庫中保存庫存。每個記錄包含項目的名稱和計數。這家商店流量很少,庫存量很大,因此多家客戶不可能同時購買同一商品;這是在這裏,以便我們不關注數據存儲限制,即關於每秒更新一次相同記錄一段時間的持續時間。GAE數據存儲同時更新記錄的字段

如果兩位顧客在同一時間購買同一商品的情況不太可能發生,我該如何正確更新商品的記錄?保持每件產品的正確數量至關重要。

在mongo世界中,我會使用類似$ inc操作的東西。您如何解決GAE Datastore的這種情況?

感謝

+1

沒有原生的方式。谷歌使用memcached內置增量方法結合數據存儲。不是100%完美,但只有在memcached對象被使用後才被驅逐(不太可能)並且兩個用戶同時增加時,它纔會失敗。 –

+0

這是一個有趣的方法。非常感謝。 –

回答

2

雲存儲事務使用樂觀併發,所以你可以在同一時間嘗試2個交易。如果實體發生更改,則會失敗 - 此時您只需重試失敗的事務。

例如,在Python NDB中,您可以在事務修飾器中進行特定次數的重試嘗試。

示例代碼:

from google.appengine.ext import ndb 

... 

@ndb.transactional(retries=5) 
def inc_item_count(item_key, count_purchased): 
     item = item_key.get() 
     item.count_purchased += count_purchased 
     item.put() 

     return True 

網絡規模有多大?

如果您擴展的範圍超出此解決方案的工作範圍,您將需要探索基於任務隊列的系統,或者朝sharding counters移動每個項目的計數器。