
duckdb-differential은 DuckDB 데이터베이스에 스냅샷, 과거 시점 조회, 쓰기 가능한 브랜치, 복제와 복원을 추가하는 실험적 확장 기능이다. 데이터 가져오기를 검증하거나 보고서 입력을 고정하고, 마이그레이션과 분석 실험을 별도 작업 공간에서 시험할 수 있다. 대상은 DuckDB 1.5.6이며 Linux와 macOS를 지원한다.
확장은 GitHub 저장소에서 제공된다. 로컬 데이터베이스의 변경되지 않은 데이터는 버전끼리 공유한다. S3를 설정하면 보관한 버전을 다른 컴퓨터에서 조회하거나 새 쓰기 가능 데이터베이스로 복구할 수 있다. S3에 데이터를 게시하려면 데이터베이스를 처음 만들 때 DATA_PATH를 지정해야 한다.
스냅샷은 체크포인트된 데이터베이스 상태를 보존하고, 브랜치는 그 상태에서 쓰기 가능한 작업을 이어간다. 클론은 별도의 데이터베이스 식별자와 스냅샷 이력을 만든다. 따라서 원본을 그대로 둔 채 가져온 데이터를 검증하거나, 같은 기준 데이터에서 여러 분석 시나리오를 비교할 수 있다. 복원은 분기된 이력을 자동으로 병합하지 않는다. 대상 브랜치를 분리한 뒤 데이터베이스 전체 상태를 선택해 복원하며, 기존 상태도 보존한다. 원본이 그사이 바뀌었다면 후보 상태를 채택하기 전에 SQL로 변경 사항을 직접 조정해야 한다.
보고서 입력을 재현할 때는 데이터베이스 식별자와 스냅샷 번호, 보고서 코드 버전을 함께 기록하는 것이 중요하다. 스냅샷에는 저장된 스키마와 데이터가 포함되지만, 뷰가 참조하는 외부 파일이나 자격 증명, 세션 상태까지 고정하지는 않는다. 재현성이 필요하다면 입력을 구체화하고 쿼리와 코드 버전도 보관해야 한다. 데이터가 같다는 사실만으로 비결정적 계산을 재현할 수 있는 것은 아니다.
브랜치와 클론은 작업 공간을 빠르게 만들 수 있지만, 생성 비용은 데이터 매핑 크기에 비례한다. 대부분의 청크는 64KiB이며, 네이티브 12KiB 헤더 영역은 별도 패딩 객체로 저장한다. 행 하나의 변경도 여러 청크에 영향을 줄 수 있다. 버전 관리에는 메타데이터, 해싱과 동기화에 따른 비용이 추가된다. 성능 측정은 특정 워크로드에 한정되며 일반적인 성능 보장은 아니다. 관련 내용은 벤치마크 문서에 공개돼 있다.
S3 게시가 완료된 데이터만 S3에서 복구할 수 있다. 업로드가 실패하면 로컬 데이터는 재시도를 위해 남으며 differential_retry_export를 사용할 수 있다. 로컬 스냅샷만으로는 모든 사본이 있는 볼륨의 손실에 대비할 수 없다. 여러 호스트가 한 데이터베이스에 쓰는 WRITERS 'shared' 모드는 S3의 조건부 브랜치 헤드 갱신을 사용하고 충돌 작업을 보존하지만, 별도의 게시 설정과 조정 절차가 필요하다. 각 호스트는 자체 로컬 저장소를 유지한다. 자세한 내용은 공유 데이터베이스 안내를 참고할 수 있다.
브랜치는 데이터 작업을 분리할 뿐 보안 경계를 제공하지 않는다. 저장소에 접근할 수 있는 작업자는 다른 브랜치와 데이터베이스에도 접근할 수 있으므로, 신뢰할 수 없는 작업자는 필요에 따라 운영체제나 컨테이너 수준에서 격리해야 한다. request_id는 관리 작업의 재시도를 지원하지만 임의의 에이전트 SQL을 멱등하게 만들지는 않는다.
기존 .duckdb 파일을 가져오려면 먼저 체크포인트를 만들고 파일을 닫아야 한다. WAL 보조 파일이 있는 경우에는 먼저 복구와 체크포인트를 마친 뒤 닫아야 한다. 가져오기는 원본을 바꾸지 않고 관리 저장소에 복사·검증한 다음 첫 스냅샷을 만든다.
Differential은 네이티브 데이터베이스 버전 관리에 초점을 둔다. DuckLake 스냅샷은 레이크하우스 카탈로그를, Iceberg 브랜치와 태그는 테이블 이력을 관리한다. 레이크하우스 상호운용성이 중요하다면 이들이 다른 선택지가 될 수 있다. 일반 DuckDB도 읽기 전용 S3 연결을 지원하며, Differential은 네이티브 저장소에 보관 이력과 쓰기 가능한 작업 공간, 증분 게시를 더한다.
프로젝트는 아직 실험 단계다. macOS arm64와 Linux amd64에서 로컬 통합 테스트가 통과했고, S3 테스트는 MinIO를 이용한 macOS에서 가장 폭넓게 진행됐다. 실제 AWS에서는 내보내기와 읽기, 브랜치 헤드를 수동으로 시험했다. 전체 승인 테스트와 물리적 전원 손실 테스트, AWS 장애 상황 전체 검증은 아직 남아 있다. 근거와 제약은 호환성 문서와 내구성·복구 문서에 설명돼 있다. 스냅샷 만료와 정리 정책은 수명 주기 안내에서 확인할 수 있다. SQL 기능은 SQL 참조 문서에 정리돼 있다.
댓글 (0)
로그인하면 이 기사에 내 생각을 남길 수 있어요