2014-02-24 13 views
0

首先順序,我是很新,GAE,所以我不習慣的大比例的數據存儲,最終一致性等東西,但:)職位的App Engine的順序VS插入

但是,我正在設計一個小型多人遊戲的後端。玩家/客戶發佈事件正在發生,其他客戶進行投票以獲得這些事件。事件使用auto_now_add = True(creation_time)與ndb.DateTimeProperty字段一起存儲。

但是,昨天晚上我發現了一些奇怪的東西,有時候它們的順序似乎有點混淆。即使「POST event 1」在「POST event 2」之前的一秒鐘完成,事件2可能會在事件1之前幾毫秒內被保存(或者,或者我的客戶端代碼不好:))。這是在使用dev_appserver的時候,還沒有在真正的GAE中嘗試過。

我想我的(第一個)問題是;這是正常的GAE行爲?也許不能保證一個請求在另一個請求之前被處理(保存),無論何時請求進入?

如果是這樣,是否有某種方式讓我按照自己的意願行事?以某種方式保持實體的順序?事件有相同的祖先(遊戲),並存儲在交易..至少我希望如此,我已經用@ ndb.transactional標記方法:-)

如果我手動設置日期時間事件,在保存實體之前,在POST處理程序中使用datetime.now()而不是auto_now_add,是否可行?不同的GAE實例是時間同步的嗎?

嗯..我想的越多,感覺越不可能:) ..客戶應該設置事件的時間戳嗎?他們可能會有錯誤的時間設定,但也許他們可以先與服務器同步時間或什麼。

+0

dev服務器模擬數據存儲。在得出任何結論之前,先試試真實的東西。 –

+0

使用auto_now_add,這是放置運行時的時間戳。不同實例之間可能存在時間差異。另外,如果您不使用密鑰來檢索實體,則很可能會看到檢索到的項目。通過密鑰獲取新實體並查看時間戳是否有意義。正如其他人所說,儘管在生產中進行測試,因爲dev服務器無法複製所有生產操作語義。 –

+0

對於良好的StackOverflow語義,請將「已解決」註釋轉換爲答案並將其標記爲正確。 –

回答

0

通過在發送下一個請求之前等待一個請求完成「解決」。:-P