如何解决django-polymorphic-tree 是使用嵌套模型数据集有效检索数据的正确工具吗
我使用 django-polymorphic
如下。
MyBase
是一个多态基类,有 4 个子类 A
、'B'、'C'、'D'。
D
有 FK 到 C
,C
有 FK 到 B
,而 B
有 FK 到 A
。 A
...D
中的每一个都将具有子集关系。例如a.b_set.all()
、b.c_set.all()
和 c.d_set.all()
我还有一个普通模型 Tag
,它有一个到“MyBase”的 FK,通过分配给 A
、B
、C
或 {{1} }. 所以每一个D
...A
都会有子集关系。例如D
、a.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 举报,一经查实,本站将立刻删除。