- DuckDB có thể hoạt động như một cơ sở dữ liệu ngay cả khi dữ liệu thực tế không được lưu nội bộ trong cơ sở dữ liệu
- Dữ liệu được lưu trong kho lưu trữ riêng, còn cơ sở dữ liệu hoạt động theo cách tham chiếu tới dữ liệu đó
- Tệp cơ sở dữ liệu không chứa dữ liệu thực tế mà chỉ chứa các chỉ dẫn về cách xử lý dữ liệu
Ví dụ: dịch vụ robotaxi
- Mô tả tình huống: Trong một dịch vụ robotaxi, cần chia sẻ dữ liệu được tạo ra hằng ngày với các nhà phân tích.
- Vấn đề: Dữ liệu quá lớn nên khó gửi qua email và cũng phức tạp nếu chia sẻ bằng liên kết.
- Giải pháp: Tạo một tệp cơ sở dữ liệu bằng DuckDB rồi chia sẻ tệp đó.
# 데이터베이스 생성
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()
- Kết quả: Tệp
weird_rides.db không chứa dữ liệu thực tế, nhưng chứa các chỉ dẫn về cách xử lý dữ liệu.
- Cách chia sẻ: Tải tệp này lên blob storage rồi chia sẻ liên kết.
Truy cập dữ liệu
- Kết nối cơ sở dữ liệu: Người nhận khởi động một phiên DuckDB cục bộ và kết nối tới tệp cơ sở dữ liệu đã được chia sẻ.
# 데이터베이스 연결
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")
- Tải dữ liệu: Khi chạy truy vấn, chỉ tải từ S3 phần dữ liệu cần thiết.
- Xử lý dữ liệu hiệu quả: Chỉ đọc các cột cần thiết và áp dụng bộ lọc để loại bỏ dữ liệu không cần thiết.
Ưu điểm của DuckDB
- Chịu thay đổi tốt: Ngay cả khi định dạng dữ liệu, chiến lược phân vùng hoặc schema thay đổi, cách người nhận truy cập dữ liệu vẫn không đổi.
- Trình duyệt dữ liệu đám mây: Với DuckDB, có thể dễ dàng truy cập các tập dữ liệu quan hệ thông qua siêu liên kết.
2 bình luận
Ồ, với dữ liệu lớn thì chỉ cần có catalog và đường dẫn chính xác của dữ liệu nhỏ thôi cũng có thể tiết kiệm được một ít tài nguyên máy chủ nhỉ haha
Ý kiến trên Hacker News
Xử lý hiệu quả bảng phản hồi của một SaaS form builder bằng DuckDB và duckdb-wasm: Lưu dữ liệu phản hồi trên S3, rồi truy vấn thành DB cục bộ phía client qua duckdb-wasm để tối ưu việc sử dụng mạng và bộ nhớ.
Giới thiệu MotherDuck: Một kho dữ liệu DuckDB dạng managed serverless, cung cấp clone không sao chép, chia sẻ bảo mật và chế độ hybrid với dữ liệu đám mây.
Tích hợp DuckDB vào trình soạn thảo SQL qStudio: Hỗ trợ join với nhiều cơ sở dữ liệu khác nhau và được khuyến nghị như một IDE tốt để bắt đầu với DuckDB.
Đề xuất cung cấp dữ liệu qua liên kết S3: Đặt câu hỏi về giá trị của cơ sở dữ liệu và view trung gian, đồng thời cho rằng việc để nhà phân tích dữ liệu trực tiếp xử lý dữ liệu thô có thể hiệu quả hơn.
Giới thiệu Data Tap: Giải pháp nhúng DuckDB vào hàm Lambda để lưu dữ liệu lên S3 dưới định dạng Parquet, nhấn mạnh tính hiệu quả chi phí và khả năng mở rộng.
Sự lẫn lộn về cách tiếp cận dữ liệu: Giải thích rằng kỹ sư dữ liệu có xu hướng tránh tiền tổng hợp, còn nhà phân tích dữ liệu thì thường thích truy cập dữ liệu thô.
Phản hồi về nhận định rằng hầu hết cơ sở dữ liệu không chứa dữ liệu: Cho rằng đây là một phát biểu cường điệu.
Đề xuất cách gửi truy vấn SQL cho đồng nghiệp qua email: Đặt nghi vấn về lợi ích của các tệp cơ sở dữ liệu nhị phân.
Hoài nghi về tính hữu ích của các công cụ SQL mới: Cho rằng sẽ phù hợp hơn nếu lưu dữ liệu vào một kho dữ liệu lâu dài và tạo các view cần thiết.
Sự tương đồng với Presto/Trino: Có ý kiến cảm thấy cách tiếp cận của DuckDB khá giống Presto/Trino.