【问题标题】:Increment counter or query relations? [closed]增量计数器或查询关系? [关闭]
【发布时间】:2015-10-24 06:51:48
【问题描述】:

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

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

  1. 在创建收藏夹时自动递增用户模型上的计数器属性。使用user_instance.favorite_count访问

  2. 查询用户收藏次数:user_instance.favorite_set.count()

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

哪种实现更具可扩展性?

【问题讨论】:

  • 3.添加一个favorite_count 实例方法,该方法只调用favorite_set.count(),并在出现问题时将其替换为计数器。模型可以有方法吗?它们不必是简单的柱袋。
  • @muistooshort 这样做和打电话给user_instance.favorite_set.count() 有什么区别?他们调用的是同一个东西,所以这似乎是多余的。
  • 不同之处在于您将选择的实现隐藏在方法后面。你可以改变你对你的实现的想法(缓存计数器与数据库查询),使用你的模型的任何东西都不会关心。
  • @muistooshort 我现在看到了 - 这是个好主意!

标签: sql django postgresql relational-database scalability


【解决方案1】:

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

【讨论】:

  • 听起来不错 - 谢谢!!
猜你喜欢
  • 2021-04-27
  • 1970-01-01
  • 2014-04-19
  • 2021-12-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多