django-polymorphic-tree 是使用嵌套模型数据集有效检索数据的正确工具吗

问题描述

我使用 django-polymorphic 如下。

MyBase一个多态基类,有 4 个子类 A、'B'、'C'、'D'。

D 有 FK 到 CC 有 FK 到 B,而 B 有 FK 到 AA...D 中的每一个都将具有子集关系。例如a.b_set.all()b.c_set.all()c.d_set.all()

我还有一个普通模型 Tag,它有一个到“MyBase”的 FK,通过分配给 ABC 或 {{1} }. 所以每一个D...A都会有子集关系。例如Da.tag_set.all()b.tag_set.all()c.tag_set.all()

遍历这个嵌套的层次结构似乎会产生大量的 DB 命中。我曾尝试使用 d.tag_set.all()prefetch_related() 并取得了一些成功,但没有我希望的那么多。

注意:我的数据库 django-auto-prefetch 在带有 emmC 存储的 RaspBerry Pi 类平台上运行。

sqlite3 是一种正确的工具,可以在检索嵌套数据集时减少数据库负载并减少延迟。示例:

django-polymoriphic-tree

我试图解决的问题是,一个 Web 仪表板需要大约 75 毫秒才能加载 85 个查询(这是我使用大量 for a in A.objects.all(): print( f"a = {a}" ) for tag in a.tag_set.all(): print( f"a.tag = {tag}" ) for b in a.b_set.all(): print( f"b = {b}" ) for tag in b.tag_set.all(): print( f"b.tag = {tag}" ) for c in b.c_set.all(): print( f"c = {c}" ) for tag in c.tag_set.all(): print( f"c.tag = {tag}" ) for d in c.d_set.all(): print( f"d = {d}" ) for tag in d.tag_set.all(): print( f"d.tag = {tag}" ) 装饰器所能得到的最好结果)。我有一个过程可以有效地获取相同的数据(来自 django ORM 但不使用管理框架)以显示在 LCD 上,但检索需要大约 250 毫秒。我不确定区别在哪里(可能是 web/html 缓存),但我想将数据库负载降至最低。

@cached_property 是正确的工具 - 还是有更合适的工具?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...