2017-10-21 12 views
0

私は現在、DjangoとMySQLで作業していますが、言語やSQLデータベースの変更が必要なソリューションがある場合は、サーバーで処理するのに30分かかるレポートを改善する方法を探しています。それを開いている。レポート処理時間を改善する方法(Django/MySQL)?

複数のExcelファイルを読み込み、それらのファイルからすべての行を12K〜15Kレコードの範囲のテーブル(レポートテーブル)に挿入すると、テーブルには約50個の列があります。この部分はあまり時間がかかりません。

私はこのような何かを持っ終わるので、ビジネスロジックの複数のフェーズの適用を開始、レポートテーブル上のすべてのレコードを持っていたら:

def create_report(): 
    business_logic_1() 
    business_logic_2() 
    business_logic_3() 
    business_logic_4() 

business_logic_Xの各機能は非常に似た何かを、それReportModel.objects.all()を実行して開始し、日付、数量などの確認などの複数の計算を適用してレコードを更新します。 12Kのレコードテーブルであるため、すぐに完全なレポートに時間を追加し始めます。

なぜ私は別々に複数の関数を処理しているので、次の関数のロジックが機能するように、最初の関数のロジックが完了する必要があるためです(例:最初の関数はすべての関連するレコード

私が知っている最初のことは、どういうわけか、各関数で呼び出すのではなく、objects.all()をキャッシュすることですが、どのようにそれを渡すかわかりませんレコードを保存せずに次の関数を呼び出す

関数の保存メソッドでupdate_fieldsを使用してレポートを少し最適化し、少し時間を節約しました。

私の質問は、この種の問題に対してより良いアプローチがありますか? Django/MySQLはこれに適したスタックですか?

+0

を与えることはできません。 –

答えて

0

Djangoでやっているビジネスロジックは何時間かかります。したがって、データベースとアプリケーションの間で数回の往復を行います。

いくつかのテーブルが含まれているように聞こえるので、あなたはraw SQLでクエリを書くことをお勧めします。

ormには "raw"というメソッドがあります。または、より低いレベルにドロップして、データベースと直接インターフェースすることもできます。

私はあなたがより多くのものを見ていない限り、私はのは、SQLが関与して見てみましょう任意のより具体的なアドバイス

関連する問題