增量计数器或查询关系?

Increment counter or query relations?

假设我有一个 User 模型和一个 Favorite 模型。我想知道用户有多少收藏夹。

我看到您可以通过两种方式完成此操作。

  1. 创建收藏夹时以原子方式增加用户模型上的计数器属性。使用 user_instance.favorite_count

  2. 访问
  3. 查询用户的收藏数:user_instance.favorite_set.count()

我想随着数据库的增长,计数会变得更加昂贵。

哪个实现更具可扩展性?

我闻到这里有些不成熟的优化。数据库非常擅长计数。除非您已经测量并看到一些可识别的缓慢,否则您不应该尝试去规范化:很难做到正确并且总是有失去同步的风险。继续查询;并且不要忘记您可以使用聚合一次查询一组用户的计数。