【问题标题】:How to store key value pairs in App Engine datastore?如何在 App Engine 数据存储区中存储键值对?
【发布时间】:2012-12-13 05:47:43
【问题描述】:

我有一个具有 2 个属性的实体:UserId(String) 和 RSSSubscriptions(String)。此类的实例将存储在 App Engine Datastore 中。

RSSSubscriptions 应该是一个键值对,例如 "Site1: Feed1", "Site2: Feed2".

由于像 Hashmaps 这样的数据类型是不可持久的,我不得不将这些数据保存为字符串格式。目前我已将其存储为 JSONArray 格式的字符串类型。说,"[{"Site1: Feed1"}, {"Site2: Feed2"}]"

我的客户端将是一个 Android 应用。所以我应该在客户端将此字符串解析为 JSON 数组。但我认为每次用户添加新订阅时,创建一个 JSON 格式的字符串并将其附加到现有字符串是一个坏主意。有更好的想法吗?

【问题讨论】:

  • 只需将两个字符串存储在一个实体中,并在查询时查询数据存储中的实体,获取对象列表并为您的客户端构建 JSON 字符串!为了提高效率,请使用 Memcache 缓存您的结果,然后在每次添加新订阅时清除缓存或更新它。
  • 我和@GaëlOberson 在一起;只是一种简化:将db 实体与memcache 结合使用,使用在内部实现memcache 的ndb 实体。
  • 是的,这似乎是一个不错的选择。谢谢盖尔。

标签: google-app-engine


【解决方案1】:

您可以使用 ndb 支持的 JSONProperty ,因为该特定原因。在我看来,将 Json 存储为字符串并来回解析它是一个“毛茸茸”的解决方案。您必须非常小心以保证有效性。

【讨论】:

    【解决方案2】:

    正确答案取决于几个因素,其中预期的对数是最重要的。重要的是要记住,将配对存储在通过查询访问的实体中会产生大量成本。进行查询有很多操作成本,并且会占用大量 CPU 时间。将此与使用由用户 ID 键入的单个记录进行比较,并将 JSON 存储在 TextProperty 中。这是一个很小的操作成本和 cpu 时间,可能比查询少 10 倍。

    在决定采用技术上更简洁的查询实体方法时,请考虑这些因素。我自己,我总是在 TextProperty 中对“数千对”卷中的任何内容使用序列化字符串,除非删除率非常高(即使这样,字符串方法可能会更好)。考虑到 GAE 的高资源成本,使用查询通常是最后的设计选择。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-12
      • 1970-01-01
      • 1970-01-01
      • 2011-12-24
      • 1970-01-01
      • 1970-01-01
      • 2011-09-04
      相关资源
      最近更新 更多