gpt4 book ai didi

python - Django ORM : Organizing massive amounts of data, 正确的方法

转载 作者:行者123 更新时间:2023-11-30 23:56:25 26 4
gpt4 key购买 nike

我有一个 Django 应用程序,它使用 django-piston 向内部客户端发送 XML 提要。一般来说,这些工作得很好,但我们有一些 XML 提要目前运行时间超过 15 分钟。这会导致超时,并且提要变得不可靠。

我正在尝试思考改进此设置的方法。如果需要对数据进行一些重组,那也是可能的。

以下是数据收集当前的样子:

class Data(models.Model)
# fields

class MetadataItem(models.Model)
data = models.ForeignKey(Data)

# handlers.py
data = Data.objects.filter(**kwargs)

for d in data:
for metaitem in d.metadataitem_set.all():
# There is usually anywhere between 55 - 95 entries in this loop
label = metaitem.get_label() # does some formatting here
data_metadata[label] = metaitem.body

显然,该程序的核心做得更多,但我只是指出问题所在。当我们的 data 列表为 300 时,它就会变得不可靠并超时。

我尝试过的:

  • 获取所有数据 ID 的集合,然后执行单个大型查询来获取所有 MetadataItem。最后,过滤我的循环中的那些。这是为了保留一些确实减少的查询。
  • 使用 .values() 减少模型实例开销,这确实加快了速度,但幅度不大。

一个想法我认为一个更简单的解决方案是分步写入缓存。所以要减少超时;我会写入前 50 个数据集,保存到缓存,调整一些计数器,写入接下来的 50 个数据集,等等。仍然需要考虑这一点。

希望有人能帮助引导我走向正确的方向。

最佳答案

您发布的代码片段中的问题是,Django 不包含自动通过反向关系连接的对象,因此您必须对每个对象进行查询。有一个很好的解决方法,如 Daniel Roseman points out in his blog !

如果这不能很好地解决您的问题,您还可以尝试在一个原始 SQL 查询中获取所有内容...

关于python - Django ORM : Organizing massive amounts of data, 正确的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4260851/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com