2012-12-13 506 views
1

我有一個具有2個屬性的實體:UserId(String)和RSS訂閱(字符串)。此類的實例將存儲在App Engine數據存儲中。如何在App Engine數據存儲中存儲鍵值對?

RSSSubscriptions應該是一個鍵值對像​​

這樣以來HashMaps這樣的數據類型是不持久化,我不得不把這個數據的字符串格式。目前我已經將它存儲爲JSONArray格式的字符串類型。說,"[{"Site1: Feed1"}, {"Site2: Feed2"}]"

我的客戶端將是一個Android應用程序。所以Iam應該把這個字符串解析爲客戶端的JSON數組。但是我認爲創建一個JSON格式的字符串並附加它與現有的字符串是一個壞主意,每當用戶添加新的訂閱。任何更好的想法?

+2

Juste將兩個字符串存儲在一個實體中,並在查詢時查詢數據存儲的實體,獲取對象列表併爲您的客戶端構建JSON字符串!爲了提高效率,請使用Memcache來緩存結果,然後清除緩存或在每次添加新訂閱時進行更新。 –

+0

我與@GaëlOberson;只需簡單一點:將[db](https://developers.google.com/appengine/docs/python/datastore/entities)實體與[memcache](https://developers.google.com/appengine/)結合使用docs/python/memcache /),請使用[ndb](https://developers.google.com/appengine/docs/python/ndb/)在內部實現memcache的實體。 – onon15

+0

是的,這似乎是一個不錯的選擇。謝謝蓋爾。 – Vivek

回答

0

正確答案取決於幾個因素,其中最重要的是預期數量。重要的是要記住,將該對存儲在由查詢訪問的實體中存在相關的大量成本。做查詢有很多操作成本,並且會有很大的CPU時間。將其與使用由用戶ID鍵入的單個記錄進行比較,然後將JSON存儲在TextProperty中。這是一個小操作成本和cpu時間,可能比查詢少10倍。

當決定採用技術上更清潔的查詢實體方法時,請考慮這些因素。我自己,除非有很高的刪除率(甚至這可能是字符串方法可能會更好),否則我總是會在「成千上萬對」卷中的任何內容的TextProperty內使用序列化的字符串。考慮到其高資源成本,使用查詢通常是GAE的最後設計選擇。

1

您可以使用ndb支持的JSONProperty出於該特定原因。在我看來,它是一種「毛茸茸的」解決方案,將Json存儲爲字符串並來回解析它。你必須非常小心才能保證有效性。

相關問題