0

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

  1. 使用带有索引值(或者可能没有)的标准 Python 列表,然后运行一个 IN 查询并查看该数字是否在其中。

  2. 获得该用户的密钥后,获取属性 relatedUsers 的值,该值是 JSON 字符串格式的数组。解码字符串,并检查数字是否在其中。

哪个效率更高?数字 1 会比选项 2 花费更多的读取次数吗?并且第 1 次写入的成本会高于第 2 次,因为索引每个值都会花费一次写入。如果我不索引怎么办——那么哪种解决方案会更好?

4

1 回答 1

4

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

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

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

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

于 2012-04-15T03:46:48.000 回答