중간 데이터의 스키마를 안전하게 변경하는 단계

여기 데이터 파이프라인의 배선 연결 공사를 하고 있었습니다만, 특히 눈에 띄는 다운타임이나 장해 없이 끝났으므로, 그 기본 패턴을 메모해 둡니다.
주로 연결한 것은 데이터베이스나 스토리지 사이에 끼운 다단 배치입니다만, 스트리밍이나 서비스간 통신에서도 일방통행이라면, 대체로 이런 느낌이 되는 것은 아닐까 생각합니다.

열(필드) 추가 패턴



한 데이터베이스 (스토리지)의 테이블 (경로)에 열 (필드) a가 있고 그것을 읽고 쓰고 있다고 가정합니다. 이 흐름에 b를 추가하는 절차를 생각해 봅시다.

※ 용어는 환경에 따라 적당히 읽어주십시오.



테이블에 열 b를 NULL 권한 (선택 사항)으로 추가합니다.
이 단계에서 b는 NULL로 작성되었으며 읽을 수 없습니다.



열 b 의 값을 쓰도록 합니다.



열 b의 값을 읽으십시오.
이 때, NULL 가 되어 있는 낡은 레코드도 읽는다면 writer 로 처리하기 전에 디폴트치 메우는 등의 대응이 필요하게 될 것입니다.



열 b 에서 NULL 을 없애면 NULL 을 허용하지 않습니다.



이 reader 가 한층 더의 어딘가의 테이블에 b 의 정보를 써 넣고 있는 경우는, 이번은 writer 로서 이 패턴을 반복해 갑니다.

열(필드) 삭제 패턴



추가 패턴을 역주행합니다.
얼른 절차로서, 추가는 상류에서, 삭제는 하류에서, 라고 기억해 두면 됩니다.
이렇게 해서 데이터를 상류에서 조금씩 흘려가는/하류로부터 조금씩 거절해 가는 것으로, 부분적인 테스트나 잘라내기가 쉬워집니다

테이블(경로) 전환 패턴



a b를 읽고 쓰고 있다고 가정합니다. 이것을 완전히 c d라는 다른 열로 전환하는 것을 고려해 봅시다.



열 c d 를 가지는 새로운 테이블을 작성합니다.



이전 테이블과 새 테이블 모두에 쓰도록 합니다.
이들은 다른 데이터베이스에 있을 수 있습니다.



이전 레코드는 이전 테이블에서 새 레코드를 새 테이블에서 읽습니다.
신구의 廻別는 타임 스탬프 등의 정보를 사용하게 될 것입니다.



이전 테이블에 있는 레코드가 더 이상 필요하지 않으면 읽기를 중지합니다.
언제까지 지나도 불필요하게 되지 않는 경우는, 어딘가에서 구 레코드 상당의 것을 새로운 테이블에 써 넣는 등의 대응이 필요하게 될 것입니다.


이전 테이블에 쓰기를 중지합니다.



이전 테이블을 삭제합니다.
필요한 경우 아카이브해 둡시다.



요컨대, 이것은 추가 패턴과 삭제 패턴의 합치기군요.

좋은 웹페이지 즐겨찾기