2017-11-20 12 views
2

현재 프로젝트에는 약 620 개의 장고 모델이 있으며, 마이그레이션하는 데 약 1 시간이 걸립니다. . (마이그레이션 중에 gcloud의 1.2gigs와 8 코어 인텔 skylake의 12.x % 만 사용합니다.)이 메트릭은 pg와 python 2 (cpython)에 결합됩니다. 마이그레이션하는 동안 단 하나의 코어 만 사용된다고 가정합니다. [셀러리 프로세스는 100 % CPU + 50 %의 RAM을 사용합니다. 각 마이그레이션이 같은입니다병렬 django에서 마이그레이션을 실행 하시겠습니까?

,

class Migration(migrations.Migration): 

    initial = True 

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

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

그들은 동일하지만 필드에 약간의 변화이다.

이 데이터베이스를 더 빨리 마이그레이션 할 수있는 방법이 있습니까? 병렬로 마이그레이션을 실행할 수 있습니까? 30 (내부 앱과 배포판) 이후의 이전은 서로 관련이 없으므로 이러한 마이그레이션을 병렬로 실행할 수 있습니까?

당신을 감사

답변

2
없음은 마이그레이션은 (좋은 이유) 순차적으로 (예를 들어, 하나의 마이그레이션이 모델을 만들고 또 그것을 수정하는 시나리오를 고려해 적용 할 수 있도록 설계되었습니다

- 병렬로 실행 장고하려고 만들 수를 아직 존재하지 않는 모델을 수정하십시오.) 일을 빠르게 할 수있는 마이그레이션을 부수 귀하의 경우에는 - 인용 문서 :

부수는 여전히 같은 변화를 대표하는 하나 (또는 ​​때때로 약간) 마이그레이션에 이르기까지 많은 마이그레이션 기존 세트를 줄이는 행위이다.

Django는 기존 마이그레이션을 모두 취하여 작업을 추출하여 순서대로 처리 한 다음 최적화 도구를 실행하여 목록의 길이를 줄이거 나 시도하도록합니다 (예 : 알고있는 경우). 그 CreateModel요소 편집은 서로 상쇄, 그리고 AddFieldCreateModel에 출시 될 수 있다는 것을 알고있다. 연산 과정을 한 번

은 가능한 한 많이 감소되었습니다 - 가능 금액과 가장 근접한 모델이 얽혀 방법에 따라 달라집니다 당신은 그들이하지 않는 통해 최적화 할 수없는 RUNSQL 또는 RunPython 작업 (있는 경우 eladable으로 표시됨) - Django는 새로운 마이그레이션 파일 세트로 다시 작성합니다.

스쿼시 마이그레이션에 대한 자세한 내용은 here을 참조하십시오.

+0

처음 30 대 이후의 마이그레이션은 동일하고 서로 독립적이라고합니다. 마이그레이션 프로세스를 중단하면 중단 한 지점부터 계속 진행할 수 있습니다. 그러면 병렬로 적용하는 것이 의미가 있습니까? – Marty

+0

그들은 ** 서로 의존합니다 ** Migration' 클래스의'dependencies' 필드를보십시오. 시스템이 설계된 방식 때문에 병렬로 마이그레이션을 적용하는 bulit-in 방법이 없습니다. 이러한 방법을 스스로 작성해야하며 대부분 프로세스에서 마이그레이션 시스템을 위반했을 수 있습니다. – rafalmp