데이터 해방
-
기존 서비스들과 각각 가지고 있는 데이터 저장소의 의존성을 해방 시키는 방법이다.
-
쿼리 기반, 로그 기반, 테이블 기반 방법이 있다.
-
쿼리 기반은 하부 데이터 저장소를 쿼리해서 데이터를 추출하는 방법이다. 데이터 저장소에 관계없이 작업이 가능하다.
-
로그 기반은 하부 데이터 구조의 변경 내역을 기록한 붙임 전용 로그를 기준으로 데이터를 추출한다.
-
테이블 기반은 출력 큐로 사용할 테이블에 데이터를 푸시한다.
쿼리로 데이터 해방
-
데이터 저장소를 쿼리한 결과를 관련 이벤트 스트림에 흘려보는 방법이다.
-
데이터 세트는 최소 1번 벌크 쿼리를 한 다음 주기적으로 업데이트 하여 변경분을 출력 이벤트 스트림에 생산한다.
벌크 로딩
-
벌크 쿼리를 실행해서 전체 데이터를 로드 한다.
-
증분 데이터를 업데이트하기 직전 그리고 각 폴링 주기마다 전체 테이블을 로드할 경우에 수행하는 작업이다.
증분 타임 스탬프 로딩
-
이전 쿼리 결과의 최종 타임스탬프 이후에 쌓인 데이터를 쿼리해서 적재한다.
-
가장 마지막에서 수정된 시간을 찾아, 그 시간 이후의 레코드만 가져온다.
자동 증가 ID 로딩
- 증분 업데이트를 할 때마다. ID 값이 마지막으로 처리한 ID 보다 큰 데이터만 쿼리해서 적재한다.
쿼리 기반 업데이트의 장점
-
모든 데이터 저장소를 쿼리할 수 있고, 클라이언트가 마음것 쿼리 옵션을 지정할 수 있다.
-
관계형 DB에서는 구체화된 뷰 또는 뷰를 이용하여 내부 데이터 모델과 분리할 수 있다.
쿼리 기반 업데이트의 단점
-
최종 수정 시간 타임스탬프가 반드시 있어야 한다. 데이터가 마지막으로 업데이트된 시간에 따라서 증분 업데이트를 하는 방식이라서 필수 컬럼이다.
-
하드 삭제는 쿼리 결과에서 드러나지 않는다. 따라서 삭제를 추가하려면 삭제 여부같은 불리언 컬럼을 이용하는 플래그 기반의 소프트 삭제만 가능하다.
-
데이터 변경 때문에 성능이 오르락 내리락 한다.
데이터 저장소 로그로 데이터 해방
-
데이터를 해방하는 또 다른 패턴으로는 데이터 저장소에 내장된
CDC
로그 (MYSQL 빈 로그, POSTGRESQL WAL) 기능을 활용하는 방법이 있다. -
개별 레코드의 생성, 수정, 삭제는 물론 각 데이터 세트 및 스키마의 생성, 수정, 삭제까지 해당된다.
데이터 저장소 로그의 장점
-
삭제 추적 및 데이터 저장소 성능에 미치는 영향 최소화
-
저지연 업데이트
데이터 저장소 로그의 단점
-
내부 데이터 모델 노출
-
데이터 저장소 외부에서 반정규화, 데이터 세트 스키마와 이벤트 스키마 사이의 취약한 의존관계
아웃박스 테이블로 데이터 해방
-
아웃 박스 테이블에는 데이터 저장소 내부 데이터에 대한 중요한 업데이트가 로우 단위로 삽입된다.
-
내부 테이블의 업데이트와 아웃박스 테이블의 업데이트를 단일 트랜잭션으로 묶어서 트랜잭션 성공시에만 두 업데이트가 일어나도록 한다.
참고 문헌
>> Home