Databricks Lakebase는 Postgres에 쓰기 시 복사 데이터베이스 브랜칭을 도입하여, 데이터베이스가 개발 스택의 나머지 부분처럼 작동하도록 합니다.
작성자: 수잔 피어스
데이터베이스 브랜칭은 최신 개발 워크플로에서 누락된 기본 요소입니다. 스택의 다른 모든 부분은 빠른 반복을 지원하도록 발전했습니다. 코드는 Git을 사용합니다. 인프라는 Terraform을 사용합니다. 배포는 몇 분 안에 실행되는 CI/CD 파이프라인을 사용합니다. 그러나 관계형 데이터베이스는 여전히 10년 전과 같은 방식으로 작동합니다.
대부분의 팀은 단일 스테이징 데이터베이스를 공유합니다. 설정 후 며칠 이내에 해당 데이터베이스는 프로덕션과 동기화되지 않습니다. 개발자가 다른 순서로 마이그레이션을 적용함에 따라 스키마가 달라집니다. 시퀀스 값이 더 이상 일치하지 않습니다. 테스트 데이터가 축적되어 결과를 오염시킵니다. 결국 누군가가 전체를 다시 시드하고 주기가 다시 시작됩니다.
새 환경을 설정하는 것은 더 나쁩니다. 표준 접근 방식은 프로덕션에 대해 pg_dump를 실행하고, 완료될 때까지 기다린 다음(데이터베이스 크기에 따라 몇 분에서 몇 시간), 새 인스턴스에 로드하고, 액세스를 구성하고, 결과가 실제로 프로덕션에서 실행 중인 것을 반영하기를 바라는 것입니다. 500GB 데이터베이스의 경우 이는 500GB 복사 작업과 이를 실행하는 데 필요한 컴퓨팅 및 스토리지가 추가됩니다.
결과는 예측 가능합니다. 팀은 너무 비싸고 너무 느리기 때문에 새 환경을 만드는 것을 피합니다. 개발자는 단일 가변 스테이징 데이터베이스를 공유합니다. 마이그레이션은 오래된 데이터에 대해 테스트되거나 전혀 테스트되지 않습니다. 미리 보기 배포는 현실적인 스키마 대신 빈 고정 데이터에 대해 실행됩니다. CI 테스트는 상태를 공유하고 불안정한 결과를 생성합니다.
데이터베이스는 개발자가 만지기를 두려워하는 스택의 부분이 됩니다.
Databricks Lakebase Postgres는 데이터베이스 브랜칭으로 이를 변경합니다.
데이터베이스 브랜치는 데이터베이스 복사본이 아닙니다. 이 구별은 격리된 환경의 경제성을 완전히 변경하기 때문에 중요합니다.
데이터베이스를 복사할 때 모든 데이터와 스키마를 새롭고 독립적인 인스턴스로 복제합니다. 시간과 비용은 데이터베이스 크기에 따라 선형적으로 확장됩니다. 모든 복사본은 전체 클론이며, 모든 클론은 생성되는 순간부터 오래되기 시작합니다.
브랜치는 다르게 작동합니다. Lakebase에서 브랜치를 만들면 다음과 같은 새롭고 완전히 격리된 Postgres 환경을 얻게 됩니다.
이를 쓰기 시 복사라고 합니다. 두 브랜치가 분기되지 않는 한 동일한 저장된 데이터를 참조합니다. 브랜치에서 마이그레이션을 실행하거나, 행을 삽입하거나, 테이블을 수정하면 해당 변경 사항만 별도로 기록됩니다. 다른 모든 것은 부모와 공유됩니다.
데이터베이스 복사 (pg_dump, RDS 스냅샷) | 데이터베이스 브랜치 (Lakebase) | |
생성 시간 | 데이터베이스 크기에 따라 몇 분에서 몇 시간 | 몇 초, 데이터베이스 크기에 관계없이 일정 |
스토리지 비용 | 모든 데이터의 전체 복제본 | 변경 사항에 비례 (쓰기 시 복사) |
격리 | 전체, 그러나 유지 관리가 비쌈 | 독립적인 컴퓨팅 및 연결 문자열로 전체 |
최신 상태 | 생성되는 순간부터 오래됨 | 브랜치 시점의 부모의 정확한 상태에서 시작 |
정리 | 인스턴스 및 스토리지의 수동 해제 | 브랜치 삭제; 컴퓨팅 및 스토리지는 자동으로 회수됩니다. |
실질적으로 이는 다음을 의미합니다.
브랜치는 자유롭게 생성, 사용 및 폐기하도록 설계되었습니다. 개발자, CI 파이프라인, AI 에이전트, 자동화에 의해. 유지 관리해야 하는 귀중한 환경이 아닙니다. Git 브랜치처럼 일회용입니다.
기존 관리형 Postgres(RDS, Azure Database for PostgreSQL)는 컴퓨팅과 스토리지를 함께 묶습니다. 데이터베이스 프로세스와 해당 데이터는 동일한 인스턴스에 있으며 데이터는 단일 가변 파일 시스템으로 저장됩니다. 그렇기 때문에 두 번째 환경을 만들기 위한 유일한 옵션은 복사입니다. 파일 시스템을 복제해야 합니다.
하지만 lakebase는 다르게 구축됩니다. 컴퓨팅과 스토리지를 완전히 분리합니다. 모든 데이터는 변경 사항을 덮어쓰는 대신 새 버전으로 기록하는 분산 버전 관리 스토리지 엔진에 기록됩니다. 이 로그 구조 아키텍처는 데이터베이스 브랜칭을 기본 기능으로 가능하게 하는 것입니다.
스토리지에 버전이 있기 때문에 여러 브랜치가 충돌 위험 없이 동일한 기본 데이터를 참조할 수 있습니다. 컴퓨팅이 독립적이기 때문에 각 브랜치는 자체 Postgres 프로세스를 실행하고 자체적으로 확장됩니다. 유휴 상태인 비프로덕션 브랜치는 자동으로 0으로 축소되고 연결이 들어오면 밀리초 내에 다시 시작됩니다.
모든 데이터베이스 브랜칭 구현이 동일한 것은 아닙니다. 일부 플랫폼은 전체 인스턴스 복사본을 만들어 브랜치라고 부릅니다. 다른 플랫폼은 데이터 없이 스키마만 브랜치합니다. Lakebase 브랜치는 스키마와 데이터를 모두 포함하고, 스토리지 계층에서 쓰기 시 복사를 사용하여 복제를 피하고, 브랜치당 독립적이고 자동 확장되는 컴퓨팅을 제공합니다. 이것이 추가 인프라를 프로비저닝하지 않고도 자유롭고 대규모로 브랜치를 생성하는 것을 실용적으로 만드는 것입니다.