核心数据对关系'delete rule'不是在后端中继?



我使用 sqlite 作为核心数据作为后端。似乎当您将实体关系的"删除时"设置为"级联"时,核心数据不会使用后端进行删除。核心数据简单删除一个周期中的所有相对数据。当我尝试删除具有大量相对对象的对象时,它会给我额外的延迟。首先,它满足所有相对的错误对象,然后逐个删除它们。我可以从日志中看到它。

我认为如果我使用 sqlite 作为核心数据的后端,"级联"删除规则将在 sqlite "创建表语句"的帮助下完成。

我想念吗?是否有可能强制核心数据在 sqlite 后端上使用级联删除?

上级:

正如@Mundi所建议的那样。我通过以下方式解决了它:

  1. 将实体的删除规则设置为"无操作"(称为项目)它有很多相对对象(超过 10K)
  2. 扩展实体项目与道具被删除。
  3. 我没有删除,而是将Project.isDelete设置为1。
  4. 所有视图都使用谓词 isDelete eq 0 进行过滤。
  5. 创建一个每 10 秒运行一次的后台任务(可调),并删除带有 prop is 的项目删除等式 1 及其相关对象

后台任务通过以下方式删除:

  1. Exec fetch (isDelete = 1) 使用 setLimit eq 3 获取要删除的项目(可调)
  2. Exec 批处理获取以获取要删除的所有相关对象。
  3. 删除一个周期中的所有相对对象 + 批量大小后保存。如果这里发生不好的事情,我们可以继续另一次运行。在这里,如果用户想要关闭应用程序,我什至会停止任务。
  4. 删除项目并保存。

正确、大量的删除和插入操作可能会对性能造成压力。这些删除是否由删除规则引起并不重要。

最好的解决方案是自己"手动"删除项目。重写父托管对象子类中willSave的方法,检查 deleted 标志并自行删除子项。

如果要删除的记录很多(检查有多少条),您应该能够通过删除一批记录(一次可能几百条)并在每批后保存来摆脱性能问题。

最新更新