0

我希望尽可能高效并妥善规划。由于在使用 Google App Engine 时读取和写入成本很重要,因此我希望确保将这些成本降至最低。我不理解数据存储中的“关键”概念。我想知道的是,考虑到我知道它是什么,通过键来获取实体是否比通过某种过滤器获取更有效?

假设我有一个名为 User 的模型,并且一个用户有一个 commentId 数组(列表)。现在我想得到这个用户的所有评论。我有两个选择:

  1. 用户的commentId 数组是一个键数组,其中每个键是一个Comment 实体的键。因为我有所有的钥匙,我可以通过他们的钥匙来获取所有的评论。

  2. 用户的commentId 数组是我自定义的标识符,在这种情况下,我们只是说它们是自动递增的常规整数,并且数据存储中的每个评论都有一个唯一的commentIntegerId。因此,现在如果我想获取所有评论,我会根据我的 id 数组中的所有 ID 的评论进行过滤获取。

哪种实现会更有效,为什么?

4

2 回答 2

4
  1. 按键获取是从数据存储中获取实体的最快方式,因为它是最直接的操作,不需要通过索引查找。
  2. 每次创建条目时(除非您指定 key_name),应用引擎都会生成一个唯一的(每个父实体)数字 id,您应该将其用作评论的 id。
于 2012-04-15T18:14:56.880 回答
1

您应该根据使用模式设计一个 NoSql 数据库(= GAE 数据存储):

如果您需要一次获取所有用户的评论并且永远不需要基于某些标准(例如查询它们)获得其中的一个或一些评论,那么就速度和成本而言,最有效的方法是将所有评论序列化为实体内的二进制 blob(或将其保存到 Blobstore)。

但我想情况并非如此,因为评论通常与用户和帖子相关联,对吧?在这种情况下,上述建议将不可行。

回答你的标题问题:get按键总是比query属性快,因为查询首先通过索引来满足属性条件,它在哪里获取键,然后get用这个键执行。

于 2012-04-15T19:01:11.620 回答