2014-11-25 65 views

回答

4

不是直接的,但可以使用transactions來模擬原子增量操作。在最簡單的情況下,您使用單個實體並使用事務性讀寫增量。如果有一個併發增量,這樣的事務將會失敗,所以計數器不能很好地擴展。相反,您可以在n個實體上使用[('Counter', 'MyCounterX'), ('Elt', 'k')]形式的密鑰(對於某些數字k)和屬性'Count':

要遞增,請選擇1到n之間的隨機數,並嘗試事務性讀寫。如果密鑰不存在,請在count = 1的給定密鑰上編寫一個新實體。如果交易失敗,您可以重試一個新的隨機數。您還可以包含應用程序的邏輯,以便隨時增加n開始頻繁競爭的時間。

要檢索計數,請在Count屬性上使用根[['Counter','MyCounterX')]進行祖先查詢,然後合計所有計數。

你可以看到代碼在第二個塊here中實現它。

+0

太好了,謝謝你的回答。如果n足夠大,它可以很好地擴展嗎?或者是否使用Datastore做了很多這樣的事情,例如統計/分析? – 2014-11-25 19:04:32

+0

閱讀能力很好:投影查詢速度快,價格便宜,使用祖先提供了很強的一致性。 寫作並沒有擴展,因爲每個實體組的每秒1 txn有一個規定的限制,實際上每秒約10-20個。無論您製作多大n,都會達到此限制。 – Isaac 2014-12-05 06:25:09

相關問題