2011-10-18 122 views
0

我想在Go中製作一個簡單的GAE應用程序,讓用戶用兩種方式投票和存儲他們的答案。第一種方式將是原始數據(「投票給X的數據庫存儲」),第二種方式是這些投票的計數(「X代表12票,Y代表10票)」。什麼是同時存儲這兩個值的有效方法是多人同時訪問應用程序?如果我從數據存儲中檢索數據,將其更改並將其保存回一個實例,另一個可能想要並行執行相同的操作,並且我不確定最終結果是否正確。Google App Engine Go計分和保存

回答

1

這似乎是一個很好的方法,就是將所有投票事件簡單地存儲爲單獨的實體(「投票支持X」),並使用Task Queue進行重新計算(「12票X,10票Y「方式),因此重新計算是按離線和順序完成的(沒有任何種族和其他併發問題)。然後,您必須每隔一段時間將重新計算任務置於隊列中,以便更新結果。

任務隊列不允許添加具有與現有名稱相同名稱的其他任務,但不允許檢查特定任務是否已入隊,因此可能只是嘗試將具有相同名稱的任務添加到隊列將足以確保多個重新計算任務不存在。

另一種方法是使用等待來自輸入通道的戳的goroutine來重新計算結果。我沒有在App Engine上運行這樣的goroutine,所以我不確定這種方法的一般行爲。