데이터베이스 중단의 마이그레이션 관리 동일한 응용 프로그램의 이전 버전에서 공유하는 데이터베이스로 변경

StackOverflow https://stackoverflow.com/questions/257045

문제

내 목표 중 하나는 이전 버전을 나란히 실행하는 새 버전의 웹 애플리케이션을 배포 할 수 있다는 것입니다. 캐치는 모든 것이 데이터베이스를 공유한다는 것입니다. 새 버전에서 데이터베이스 테이블에 대한 상당한 리팩토링을 포함하는 데이터베이스. 시간이 지남에 따라 사용자에게 새 버전의 응용 프로그램을 롤아웃하고 필요한 경우 이전 버전으로 다시 전환 할 수 있습니다.

오렌은 좋았습니다 게시하다 문제를 설정했지만 다음으로 끝났습니다.

"우리는 전체 시스템에 영향을 미치는 변화, 재치, 데이터베이스 변경을 중단하는 것과 관련하여 생산에 배치하는 것과 관련하여 다소 진흙 투성이의 물에 있습니다. 다음 설치 에서이 문제가 끝났다고 논의 할 것입니다. 손, 난 두려워. "

후속 게시물은 결코 오지 않았다 ;-). 동일한 응용 프로그램의 이전 버전에서 공유하는 데이터베이스 변경 데이터베이스 변경 마이그레이션을 어떻게 관리 하시겠습니까? 데이터를 어떻게 동기화 하시겠습니까?

도움이 되었습니까?

해결책

이전 버전을 유지 해야하는 경우 변경 사항은 단순히 깨질 수 없습니다. 또한 새 버전의 웹 앱을 배포 할 때도 도움이됩니다. 롤백 해야하는 경우 진짜 데이터베이스를 그대로 두는 경우 도움이됩니다.

분명히 이것은 상당한 아키텍처 핸디캡이 제공되며, 당신은 거의 확실하게 계보를 보여주는 데이터베이스로 끝날 것입니다. 그러나 배포 혜택은 일반적으로 두통의 가치가 있습니다.

관련된 각 기존 버전에 대한 확실한 통합 테스트 모음이있는 경우 도움이됩니다. 여전히 "살아있는"것으로 여겨지는 모든 버전에 대해 마이그레이션 된 테스트 데이터베이스에 대해 실행할 수 있어야합니다.이 경우 어떤 경우에는 "모든 버전"일 수 있습니다. 배포를 합리적으로 엄격하게 제어 할 수 있다면 3-4 가지 버전에 대한 호환성만으로 도망 갈 수 있습니다.이 경우 실제로 필요한 경우 쓸모없는 테이블/열 등을 단계적으로 계획 할 수 있습니다. 발생한 혜택에 대한 그러한 계획의 복잡성을 명심하십시오.

다른 팁

Scott Ambler의 책 읽기 "리팩토링 데이터베이스"; 소금 한 덩어리로 가져 가십시오. 그러나 거기에는 좋은 아이디어가 많이 있습니다.

사용 가능한 솔루션의 세부 사항은 사용하는 DBM에 따라 다릅니다. 그러나 다음과 같은 작업을 수행 할 수 있습니다.

  • 새로운 디자인을위한 새 테이블 (또는 여러 개의 새로운 테이블) 만들기
  • 새 테이블에서 데이터를 수집하는 이전 테이블 이름으로보기를 만듭니다.
  • 보기 대신 '트리거 대신'을 작성하여보기 대신 새 테이블을 업데이트합니다.

어떤 상황에서는 새 테이블이 필요하지 않습니다. 트리거가 필요할 수 있습니다.

클라이언트의 2 개 버전 만 가정하면 데이터 사본을 새 테이블에 보관합니다.

새 테이블 위에있는 기존 앱과 새로운 앱 사이의 계약을 유지할 수 있습니다. 이전/Trigger 대신 실제로 새 테이블에 쓰는 "오래된"뷰로 쓰기를 처리합니다.

2 가지 버전의 코드를 유지하고 있으며 여전히 이전 앱을 개발해야하지만 피할 수 없습니다.

이런 식으로 동기화 문제가 없으며 효과적으로 "구"와 "새로운"스키마 사이의 복제 충돌을 처리해야합니다.

언급했듯이 2 개 이상의 버전이 복잡해집니다 ...

첫째,이 문제는 매우 어렵고 완전한 대답을 찾지 못할 수도 있다고 말하고 싶습니다.

최근에 저는 레거시 비즈니스 응용 프로그램 라인을 유지하는 데 관여했으며 곧 새 버전으로 발전 할 수 있습니다. 유지 보수에는 버그 해결, 이전 코드 최적화 및 새로운 기능이 포함되며, 때로는 현재 응용 프로그램 아키텍처에 쉽게 맞을 수 없습니다. 우리의 응용 프로그램의 주요 문제는 그것이 문서화되지 않았으며, 변화의 흔적이 없으며, 기본적 으로이 프로젝트에서 일하는 5 번째 로테이션 팀입니다 (우리는 상당히 새로운 것입니다).

외부 세부 사항을 측면 (코드, 레이어 등)에 남겨두면 현재 데이터베이스 변경을 관리하는 방법을 약간 설명하려고합니다.

우리는이 순간에 우리가 따라 가려는 두 가지 규칙을 가지고 있습니다.

  1. 먼저, 이전 코드 (SQL, 저장된 Procs, 기능 등)가 사례가 없으면 너무 많이 수정하지 않고 그대로 유지하고 그대로 유지해야하며 물론 문서화하려고 노력하십시오. 가능한 한 많이 (특히 : "WTF!, 왜 대신에 그렇게 했습니까?").

  2. 둘째, 나오는 모든 새로운 기능은이 순간에 알려진 모범 사례를 사용하고 기존 데이터베이스 구조를 최대한 적게 수정해야한다는 것입니다. 이렇게하면 이전 구조 위에 편집 가능한 뷰를 사용하고 이미 기존 기존의 새로운 확장 테이블을 소개하고 구조를 정규화하며 뷰 등을 통해 이전 구조를 제공하는 것과 같은 일부 데이터베이스 리팩토링 옵션이 소개됩니다.

또한 비즈니스 분석가가 나란히 작업하고 비즈니스 규칙을 문서화 할 수있는만큼 많은 단위 테스트를 작성하려고합니다.

데이터베이스 리팩토링은 짧은 답변으로 답변하기에 매우 복잡한 필드입니다. 모든 문제에 대답하는 많은 책이 있습니다. 하나 http://databaserefactoring.com/ 하나에 지적되고 있습니다 답변.

나중에 편집 : 두 번째 규칙이 변경 사항 처리의 처리에 응답하기를 바랍니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top