2012-12-13 264 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存储为字符串并来回解析它。你必须非常小心才能保证有效性。

相关问题