我有一個Django應用程序,它使用django-piston向內部客戶端發送XML提要。通常,這些工作非常好,但是我們有一些XML Feed,目前運行時間超過15分鐘。這會導致超時,並且提要變得不可靠。Django ORM:組織海量數據,正確的方式
我在想方法,我可以改善這種設置。如果它需要重新構造數據,那也是可能的。
下面是數據收集目前的樣子:
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個數據集等。還需要思考這一點。
希望有人能幫助我帶着這個方向走向正確的方向。
有沒有機會重組您的數據,以便您不必運行子查詢? – Evgeny 2010-11-23 23:22:15