私はdjango-pistonを使用して内部クライアントにXMLフィードを送信するDjangoアプリを持っています。一般的に、これらはうまくいきますが、現在15分以上実行されているXMLフィードがあります。これによりタイムアウトが発生し、フィードが信頼できなくなります。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のリストを持つと、信頼性がなくなりタイムアウトになります。
- はすべて
MetadataItem
年代を取得するために、単一の大きなクエリをやって、その後、すべてのデータIDのコレクションを取得:私が試した何。最後に、私のループのそれらをフィルタリングします。これは、減少したクエリを保持するためです。
.values()
を使用して、モデルインスタンスのオーバーヘッドを削減しました。私はこれまで1つの簡単な解決策を考えている
ひとつのアイデアはステップでキャッシュに書き込むことです。タイムアウトを減らすには最初の50個のデータセットを書き、キャッシュに保存したり、カウンタを調整したり、次の50個などを書き込んだりするなど、これを熟考する必要があります。
誰かが私に正しい方向にこれを導くのを助けることができます願っています。
サブクエリを実行する必要がないようにデータを再構築する機会はありますか? – Evgeny