sla*_*acy 15 python mysql django
我正在开发一个简单的Web应用程序,存储一些非规范化数据很有意义.
想象一下跟踪评论的博客平台,BlogEntry模型有一个"CommentCount"字段,我想跟上它的最新状态.
这样做的一种方法是使用Django信号.
另一种方法是将钩子直接放在我的代码中,该代码创建和销毁Comment对象,以同步调用BlogEntry上的某些方法来增加/减少注释计数.
我想还有其他pythonic方法可以用装饰器或其他伏都教来实现这一点.
在Django中进行非规范化的标准设计模式是什么?在实践中,您是否还必须在出现错误时编写一致性检查程序和数据修复程序?
S.L*_*ott 18
您在Django有经理.
使用自定义管理器来创建和维护FK关系.
经理可以在更新子集时更新计数.
如果您不想制作自定义管理器,只需扩展该save方法即可.你想要做的非规范计数和总和的一切都可以完成save.
你不需要信号.只是延伸save.
第一种方法(信号)具有消除模型之间耦合的优点.
然而,信号在某种程度上更难以维护,因为依赖性不太明确(至少在我看来).
如果评论计数的正确性不那么重要,您还可以考虑一个每n分钟更新一次的cron作业.
但是,无论解决方案如何,非正规化都会使维护变得更加困难 ; 出于这个原因,我会尽可能地避免使用它,而是使用缓存或其他技术来解决 - 例如,with comments.count as cnt在模板中使用可能会提高性能.
然后,如果其他一切都失败了,并且只有在这种情况下,请考虑什么是特定问题的最佳方法.
| 归档时间: |
|
| 查看次数: |
4277 次 |
| 最近记录: |