Google App Engine存储为列表与JSON

时间:2012-04-15 01:43:21

标签: database google-app-engine

我有一个名为User的模型,用户有一个属性relatedUsers,它的通用格式是一个整数数组。现在,有时我想检查User的relatedUsers数组中是否存在某个数字。我看到两种方法:

  1. 使用带有索引值的标准Python列表(或者可能不是),然后运行IN查询并查看该号码是否在那里。

  2. 拥有该用户的密钥后,返回属性relatedUsers的值,这是一个JSON字符串格式的数组。解码字符串,并检查数字是否在那里。

  3. 哪一个效率更高?数字1会比选项2花费更多吗?并且数字1的写入成本会超过数字2,因为索引每个值会花费写入。如果我没有索引怎么办 - 哪种解决方案会更好呢?

1 个答案:

答案 0 :(得分:4)

这是您的成本与能力,选择明智:

  1. 将值放在索引列表中会更加昂贵。您将为列表中的每个值产生一次写入的成本,这可能会爆炸,具体取决于您的用户拥有多少朋友。如果您有某些类型的复合索引,这种成本爆炸可能会更糟。好的一面是,您可以对此信息运行查询:例如,您可以查询与特定用户成为朋友的用户列表。

  2. 此处无额外索引或写入费用。问题是您丢失了查询功能。

  3. 如果您知道您只会在当前用户的朋友列表上进行检查,请务必使用选项2.否则您可能需要更仔细地查看您的设计。