2017-11-20 17 views
2

現在のプロジェクトには約620のdjangoモデルがあり、移行に約1時間かかります。 。 (移行中にgcloud上に1.2gigの30gigのRAMを持つ8コアのIntel Skylakeの12.x%のみを使用します)、このメトリックはpgとpython 2(cpython)のために組み合わされます。私は、移行中に単一のコアだけが使用されると仮定します。 [セロリプロセスは100%CPU + 50%のラムを使用します。 ]並行してdjangoで移行を実行しますか?

各移行は、彼らが同一であるが、フィールドにいくつかのマイナーな変更である、などの

class Migration(migrations.Migration): 

    initial = True 

    dependencies = [ 
     ('dist', '0001_initial'), 
    ] 

    operations = [ 
     migrations.CreateModel(
      name='model name', 
      fields=[ 
       ... 
       ... 
       60 fields 
       ... 
       ... 
      ], 
      options={ 
       'abstract': False, 
      }, 
     ), 
    ] 

です。

このデータベースをより早く移行する方法はありますか?並行して移行を実行できますか? 30以降の移行(内部アプリとdist)は互いに関連していないため、これらの移行を並行して実行できますか?

は(例えば1つの移行がモデルを作成し、別のは、それを修正したシナリオを考えてみません、移行が(正当な理由のために)連続して適用されるように設計されています

答えて

2

に感謝 - それらを並行して実行されているDjangoはしようと作ることができますまだ存在しないモデルを修正する)。物事をスピードアップすることができ移行を退治あなたのケースでは - 引用のマニュアルを:

退治はまだ同じ変化を表す1つ(または時には数)への移行まで、多くのマイグレーションの既存のセットを低減させる行為です。

Djangoは、既存のすべての移行を取り、操作を抽出してそれらをすべて順番に入れてから、リストの長さを短くしようとするオプティマイザを実行しますそのたcreateModelDeleteModelが互いに打ち消し、それはなaddFieldたcreateModelに丸めることができることを知っています。可能な量は、あなたのモデルがあり、あなたは彼らがない限りによる最適化することはできません任意のRUNSQLまたはRunPython操作を(持っている場合に絡み合っどのように密接に依存 - 動作シーケンスを極力低減された後

eladableとマークされています) - Djangoはそれを新しい移行ファイルセットに書き戻します。

移行の詳細については、hereを参照してください。

+0

私は、最初の30秒後の移行は、互いに同一であり、独立していると言いました。私が移行プロセスを壊した場合、中止したところからやり直すことができます。それで、それをパラレルに適用するのは意味がありますか? – Marty

+0

彼らはお互いに依存しています - 'Migration'クラスの' dependencies'フィールドを見てください。システムが設計されているため、並列にマイグレーションを適用する方法はありません。マイグレーションシステムを破壊する可能性があります。 – rafalmp

関連する問題