缓存的计算字段-有效的批次更新

时间:2019-02-05 13:21:48

标签: mysql django django-models

我正在寻找一种有效的方法,用于在批量删除Django对象时更新相关模型上的缓存计算字段-示例:

class Parent:
  child_count = IntegerField()

class Child:
  parent = ForeignKey(Parent, related_name='children')

这里,child_count.annotate(Count('children'))查找的缓存版本。

基于parent以外的字段批量删除许多子级时,会出现问题。我当前的选择是:


  1. 更新child_count的{​​{1}}和Child信号中的post_save

优点:简单且无代码重复,可正常删除和批量删除

缺点::批处理删除非常慢,因为Django必须分别为每个对象调用处理程序。

  1. 处理自己的级联并使用pre_delete

优点:快速

缺点:每个附加FK的样板代码,在删除子级的任何地方都必须小心使用此自定义实现。

我想理想的解决方案应该是“ Queryset-level”信号处理,但是我找不到实现它的好方法。

0 个答案:

没有答案