2012-04-15 111 views
0

我有一个名为User的模型,并且一个用户有一个relatedUsers属性,它的一般格式是一个整数数组。现在,有些时候我想检查用户的relatedUsers数组中是否存在某个数字。我看到这样的方法有两种:Google App Engine存储为列表vs JSON

  1. 使用与索引值(或者不是)一个标准的Python列表,只需要运行IN询问,看看是否这个数字在那里。

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

哪一个更有效?数字1会比选项2花费更多的读数吗?第一个数字会比第二个数字写出更多的成本,因为索引每个数值需要花费一笔费用。如果我不索引 - 哪种解决方案会更好呢?

+0

你不需要在查询 - 你只需要一个平等查询。 – 2012-04-17 07:40:02

回答

4

这是你的成本VS能力,选择明智的:

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

  2. 这里没有额外的索引或写入成本。问题是你失去了查询功能。

如果你知道你只打算只在朋友的当前用户的名单上做检查,通过各种手段去与选项2。否则你可能在你的设计多了几分谨慎看。