Show HN: Data Diff – 모든 규모의 데이터베이스 간 테이블 비교
요약
Data Diff는 다양한 규모의 데이터베이스 간 데이터를 빠르고 효율적으로 비교할 수 있는 오픈 소스 도구입니다. 체크섬과 이진 탐색 알고리즘을 사용하여 네트워크 부하를 최소화하면서 대규모 데이터셋의 차이점을 식별합니다.
핵심 포인트
- 서로 다른 데이터베이스 간의 데이터 복제 정확성 검증 가능
- 체크섬 및 이진 탐색을 통한 대규모 데이터셋의 빠른 비교
- 네트워크 I/O 및 데이터베이스 워크로드 오버헤드 최소화
- Airflow, Dagster 등 데이터 오케스트레이터와 연동 지원
Gleb, Alex, Erez, Simon입니다. 저희는 어떤 규모에서든 데이터베이스 내부 및 데이터베이스 간의 데이터를 비교할 수 있는 오픈 소스 (open-source) 도구를 구축하고 있습니다. 저장소(repo)는 다음 위치에 있으며, 저희 홈페이지는 다음과 같습니다.
https://github.com/datafold/data-diff
기업으로서 Datafold는 데이터 엔지니어들이 현대적 데이터 스택 (modern data stack)의 틈새에서 발생하는 가장 지루하고 오류가 발생하기 쉬운 작업들, 예를 들어 데이터 테스트 (data testing) 및 리니지 (lineage) 등을 자동화할 수 있는 도구를 구축합니다. 저희는 2년 전, ETL 코드의 변경 사항에 대한 회귀 테스트 (regression-testing)를 위한 도구와 함께 시작했습니다. https://news.ycombinator.com/item?id=24071955. 이 도구는 코드 변경 전후에 생성된 데이터를 비교하여 값, 집계 지표 (aggregate metrics), 그리고 다운스트림 (downstream) 데이터 애플리케이션에 미치는 영향을 보여줍니다.
많은 고객과 함께 데이터 엔지니어링 경험을 개선하는 과정에서, 저희는 시스템 간의 데이터 복제 (data replication)를 검증하기 위해 데이터베이스 간의 데이터를 디프 (diff) 해야 한다는 요구를 지속적으로 들었습니다.
이러한 복제에는 세 가지 주요 사용 사례가 있었습니다:
(1) OLAP 엔진에서 트랜잭션 데이터에 대한 분석 수행 (예: PostgreSQL > Snowflake)
(2) 트랜잭션 저장소 간의 마이그레이션 (예: MySQL > PostgreSQL)
(3) 특화된 엔진에서 데이터 활용 (예: PostgreSQL > ElasticSearch)
데이터 복제 (data replication)를 해결하는 여러 벤더 (예: Fivetran, Stitch)와 오픈 소스 제품 (Airbyte, Debezium)이 있음에도 불구하고, 이러한 복제의 정확성을 검증하기 위한 툴링 (tooling)은 없었습니다. 팀들이 이 문제를 어떻게 해결하고 있는지 조사했을 때, 대부분 다음 중 하나를 수행하고 있음을 발견했습니다:
- 수동 체크 실행: 예를 들어, COUNT(*)로 시작하여 불일치 사항을 파헤치는 방식이며, 불일치를 정확히 찾아내는 데 종종 몇 시간이 걸립니다.
- Spark 또는 Trino와 같은 분산 MPP 엔진을 사용하여 양쪽 데이터베이스에서 전체 데이터 세트를 다운로드한 다음 메모리 내에서 비교하는 방식 – 이는 복잡한 인프라를 요구하는 비용이 많이 드는 프로세스입니다.
저희 사용자들은 다음과 같은 기능을 가진 도구를 원했습니다:
(1) 서로 다른 데이터베이스 간에 대규모(수백만/수십억 개의 행) 데이터셋을 빠르게(초/분 단위로) 비교할 수 있음 (2) 네트워크 I/O 및 데이터베이스 워크로드 오버헤드를 최소화함. (3) 기본적인 통계와 차이가 있는 행이 무엇인지 알려주는 직관적인 결과 제공. (4) 복제(Replication) 프로세스 직후에 실행될 수 있도록 Airflow와 같은 데이터 오케스트레이터(Data Orchestrator)에 내장될 수 있음.
그래서 저희는 pip를 통해 사용할 수 있는 오픈 소스 패키지로 Data Diff를 구축했습니다. Data Diff는 CLI(Command Line Interface)로 실행하거나 Airflow, Dagster 등과 같은 모든 데이터 오케스트레이터에 포함시켜 사용할 수 있습니다.
최소한의 오버헤드로 대규모 환경에서의 속도 문제를 해결하기 위해, Data Diff는 양쪽 데이터베이스의 데이터에 체크섬(Checksumming)을 수행하고 이진 탐색(Binary Search)을 사용하여 서로 다른 레코드를 식별합니다. 이러한 방식을 통해 네트워크를 통해 데이터의 아주 작은 부분만 전송하면서도, 로그 시간(Logarithmic time) 및 I/O 복잡도로 임의의 대규모 데이터셋을 비교할 수 있습니다. 예를 들어, 일반적인 노트북에서 실행하면서 물리적으로 분리된 두 개의 PostgreSQL 데이터베이스 간에 2,500만 개의 행을 가진 테이블은 약 10초 만에, 10억 개 이상의 행을 가진 테이블은 약 5분 만에 비교할 수 있습니다.
저희는 모든 개발자가 사용할 수 있고 다른 데이터베이스 커넥터(Connector)의 기여를 장려하기 위해 이 도구를 MIT 라이선스로 출시했습니다. 저희는 엔지니어들에게 이러한 근본적인 유스케이스(Use case)에 대해 비용을 청구하고 싶지 않았습니다. 저희는 컬럼 수준의 데이터 리니지(Column-level data lineage), CI 워크플로우 자동화, ML 기반 알림과 같은 고급 솔루션에 대해 라이선스 비용을 청구함으로써 수익을 창출합니다.
AI 자동 생성 콘텐츠
본 콘텐츠는 HN OpenAI Codex의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기