GN⁺: 데이터 없이도 데이터베이스가 되는 DuckDB
(nikolasgoebel.com)- DuckDB는 데이터가 실제로 데이터베이스에 내부적으로 저장하지 않아도 데이터베이스처럼 작동할 수 있음
- 데이터는 별도의 저장소에 저장되고, 데이터베이스는 이를 참조하는 방식으로 동작
- 데이터베이스 파일에는 실제 데이터를 포함하지 않고, 데이터를 어떻게 처리할지에 대한 지침만 포함함
예시: 로보택시 서비스
- 상황 설명: 로보택시 서비스에서 매일 생성되는 데이터를 분석가와 공유해야 하는 상황.
- 문제점: 데이터가 너무 커서 이메일로 보내기 어렵고, 링크로 공유하기도 복잡함.
- 해결책: DuckDB를 사용하여 데이터베이스 파일을 생성하고 이를 공유함.
# 데이터베이스 생성
import duckdb
db = duckdb.connect("weird_rides.db")
db.sql("""
CREATE VIEW weird_rides
AS SELECT pickup_at, dropoff_at, trip_distance, total_amount
FROM 's3://robotaxi-inc/daily-ride-data/*.parquet'
WHERE fare_amount > 100 AND trip_distance < 10.0
""")
db.close()
-
결과:
weird_rides.db
파일은 실제 데이터를 포함하지 않지만, 데이터를 어떻게 처리할지에 대한 지침을 포함함. - 공유 방법: 이 파일을 블롭 저장소에 업로드하고 링크를 공유함.
데이터 접근
- 데이터베이스 연결: 수신자는 로컬 DuckDB 세션을 시작하고 공유된 데이터베이스 파일에 연결함.
# 데이터베이스 연결
import duckdb
conn = duckdb.connect()
conn.sql("""
ATTACH 's3://robotaxi-inc/virtual-datasets/weird_rides.db'
AS rides_db (READ_ONLY)
""")
conn.sql("SELECT * FROM rides_db.weird_rides LIMIT 5")
- 데이터 다운로드: 쿼리를 실행할 때 필요한 데이터만 S3에서 다운로드함.
- 효율적인 데이터 처리: 필요한 열만 읽고, 필터를 적용하여 불필요한 데이터를 제외함.
DuckDB의 장점
- 변경에 강함: 데이터 형식, 파티셔닝 전략, 스키마 변경에도 수신자의 데이터 접근 방식은 변하지 않음.
- 데이터 클라우드 브라우저: DuckDB를 사용하면 관계형 데이터셋을 하이퍼링크를 통해 쉽게 접근할 수 있음.
Hacker News 의견
-
DuckDB와 duckdb-wasm을 사용하여 폼 빌더 SaaS의 응답 시트를 효율적으로 처리함: 응답 데이터를 S3에 저장하고, 클라이언트에서 duckdb-wasm을 통해 로컬 DB로 쿼리하여 네트워크와 메모리 사용을 최적화함.
-
MotherDuck 소개: 서버리스 관리형 DuckDB 데이터 웨어하우스로, 무복사 클론, 보안 공유, 클라우드 데이터와의 하이브리드 모드 등을 제공함.
-
DuckDB를 qStudio SQL 에디터에 통합: 다양한 데이터베이스와의 조인을 지원하며, DuckDB를 시작하기 좋은 IDE로 추천함.
-
S3 링크를 통해 데이터 제공 제안: 중간 데이터베이스와 뷰의 가치를 의문시하며, 데이터 분석가가 원시 데이터를 직접 다루는 것이 더 효율적일 수 있다고 주장함.
-
Data Tap 소개: Lambda 함수에 DuckDB를 내장하여 데이터를 S3에 Parquet 형식으로 저장하는 솔루션으로, 비용 효율성과 확장성을 강조함.
-
데이터 접근 방식에 대한 혼란: 데이터 엔지니어는 사전 집계를 피하고, 데이터 분석가는 원시 데이터 접근을 선호하는 경향이 있다고 설명함.
-
대부분의 데이터베이스가 데이터를 포함하지 않는다는 주장에 대한 반응: 이 주장이 과장되었다고 생각함.
-
SQL 쿼리를 동료에게 이메일로 보내는 방법 제안: 바이너리 데이터베이스 파일의 장점에 대해 의문을 제기함.
-
새로운 SQL 도구의 유용성에 대한 의문: 영구적인 데이터 웨어하우스에 데이터를 저장하고 필요한 뷰를 생성하는 것이 더 적절하다고 생각함.
-
Presto/Trino와의 유사성: DuckDB의 접근 방식이 Presto/Trino와 유사하다고 느끼는 의견.