2011-12-23 55 views
2

我們的情況如下: 我們在schoolproject工作,其中的意圖是,多個團隊走動與smarthphones城市和玩遊戲城邊走邊。 因此,我們可以有10個活躍smarthpones在城市中散步,所有發佈他們的位置,並從谷歌appengine請求數據。如何讓全局變量在多個Google Appengine實例上保持不變?

有人是一個網頁瀏覽器的後面,看着所有這些球隊走動,並將它們發送消息等

我們使用的是谷歌的AppEngine提供存儲所有這些團隊發送數據和請求,存儲數據存儲消息和檢索他們等 然而,我們很快就發現我們在我們的讀寫的最大限度,所以我們搜索的解決方案,以便能夠檢索定期更新(這成本最多的讀取和寫入),而不使用任何谷歌提供的有限資源。顯然,因爲這是一個學校項目,我們不想爲更多的讀寫工作付費。

存儲在全局變量這一信息似乎是一個簡單快捷的解決方案,這是...但是當我們開始真正的測試中,我們發現我們的一些數據不翼而飛,然後重新出現。原來是因爲那裏有太多的請求正在對雲進行處理,以至於創建了一個新的實例,並且這些實例沒有保持這些全局變量的持久性。

所以我們的問題是: 我們可以以某種方式確保這些全局變量總是在每個正在運行的谷歌appengine實例上都是相同的。 或 我們是否可以限制運行的實例數量,無論有多少個請求都執行爲'1'。 或 是否有另一種方式可以更好地存儲這些數據,而無需使用數據存儲和不使用全局變量。

回答

3

,你應該使用內存緩存。如果您使用ndb(新數據庫)庫,則可以自動緩存查詢結果。很明顯,這不會改善你的寫作,但它會顯着改善你可以做的讀取次數。

您需要將其與數據存儲一起備份,因爲數據可隨時從memcache中彈出。如果您願意承擔丟失更新的(小)機會,您可以使用memcache。您可以執行某些操作,例如在數據存儲中僅存儲消息ID,並讓控制器定期驗證每個消息ID在memcache中都有相應的條目。如果缺少控制器將需要重新輸入。

+0

謝謝。我們將嘗試使用memcaching,這個問題主要在我們的閱讀中,所以希望能夠解決我們的問題。在我們嘗試實現Google提供的[鏈接](http://code.google.com/intl/nl/appengine/docs/python/memcache/usingmemcache.html) – user1113380 2012-01-02 16:13:10

+0

memcache機制後,我會報告回來memcaching確實解決了我們的問題!非常感謝 – user1113380 2012-01-13 12:15:35

0

有趣的問題。首先有一些壞消息,我不認爲有更好的數據存儲方式;不,你將無法阻止產生新的實例,也不會讓獨立的實例始終擁有相同的數據。

你可以做的是通過智能地選擇這個頻率並將信息一次下載/上傳,你可以限制讀/級別適合你。儘管如此,這在鹿角地區仍是堅實的。

儘管幾乎找到了其他所有配置的配額,但我無法找到免費讀/寫的限制,因此可能它們的可用性很小,但實際上只有10個智能手機給我舉起了一面紅旗。您確定智能手機正在以合理的頻率輪詢(或撥打)嗎?這聽起來像你可能會不必要地敲擊它們。

+0

每天的可用讀取數量爲0.05億次,我將嘗試使用memcaching來解決我的問題,主要是讀取數量,寫入數量更少。 (免費寫入數量爲每天0.05百萬次) – user1113380 2012-01-02 16:20:02

0

考慮對等體之間的通信的jabber協議。免費限制在相當高的水平上。

0

首先,肯定使用memcache,就像Tim Delaney所說的那樣。這本身可能會解決你的問題。

如果不是,您應該考慮推式模型。優點是,只有當事情發生了變化時,你的客戶纔會一直問你新的數據。如果更新足夠小以至於您可以在推送消息中提供更新,那麼對於所有這些客戶端,您將不必擔心數據存儲讀取的memcache未命中或任何其他重複的工作:在數據更改時讀取數據一次推送給每個人。

推送的第一個選項是C2DM(Android)或APN(iOS)。這些數據發送的數據量和更新頻率有限。

如果您想獲得更多技巧,可以使用XMPP。這可以讓你做更頻繁的更新(我相信)更大的有效載荷,但可能需要更多的工程。有關起點,請參閱有關AndroidiOS的Stack Overflow問題。

玩得開心!