- 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 ไม่มีข้อมูลจริงอยู่ภายใน แต่มีคำสั่งเกี่ยวกับวิธีประมวลผลข้อมูล
- วิธีแชร์: อัปโหลดไฟล์นี้ไปยัง blob storage แล้วแชร์ลิงก์
การเข้าถึงข้อมูล
- การเชื่อมต่อฐานข้อมูล: ผู้รับเริ่มต้นเซสชัน 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 เพื่อเข้าถึงชุดข้อมูลเชิงสัมพันธ์ผ่านไฮเปอร์ลิงก์ได้อย่างง่ายดาย
2 ความคิดเห็น
โอ้ ถ้ามีแค่แคตตาล็อกกับพาธที่ถูกต้องของข้อมูลขนาดเล็กจากข้อมูลขนาดใหญ่ ก็อาจช่วยประหยัดทรัพยากรเซิร์ฟเวอร์ได้บ้างเหมือนกันนะครับ ฮ่าๆ
ความเห็นจาก Hacker News
ใช้ DuckDB และ duckdb-wasm เพื่อจัดการชีตคำตอบของ SaaS ตัวสร้างฟอร์มอย่างมีประสิทธิภาพ: จัดเก็บข้อมูลคำตอบไว้ใน S3 และให้ไคลเอนต์คิวรีเป็นฐานข้อมูลภายในเครื่องผ่าน duckdb-wasm เพื่อเพิ่มประสิทธิภาพการใช้เครือข่ายและหน่วยความจำ
แนะนำ MotherDuck: คลังข้อมูล DuckDB แบบจัดการให้และไร้เซิร์ฟเวอร์ ที่มีฟีเจอร์อย่างการโคลนแบบไม่ต้องคัดลอก การแชร์อย่างปลอดภัย และโหมดไฮบริดกับข้อมูลบนคลาวด์
ผสาน DuckDB เข้ากับ qStudio SQL editor: รองรับการ join กับฐานข้อมูลหลากหลายประเภท และแนะนำว่าเป็น IDE ที่เหมาะสำหรับการเริ่มต้นใช้งาน DuckDB
ข้อเสนอให้ให้ข้อมูลผ่านลิงก์ S3: ตั้งคำถามต่อคุณค่าของฐานข้อมูลและวิวที่อยู่ตรงกลาง และมองว่านักวิเคราะห์ข้อมูลอาจทำงานได้มีประสิทธิภาพกว่าหากจัดการข้อมูลดิบโดยตรง
แนะนำ Data Tap: โซลูชันที่ฝัง DuckDB ไว้ในฟังก์ชัน Lambda และบันทึกข้อมูลลง S3 ในรูปแบบ Parquet โดยเน้นเรื่องความคุ้มค่าและการขยายระบบ
ความสับสนเกี่ยวกับแนวทางการเข้าถึงข้อมูล: อธิบายว่าวิศวกรข้อมูลมักหลีกเลี่ยงการสรุปผลล่วงหน้า ขณะที่นักวิเคราะห์ข้อมูลมักชอบการเข้าถึงข้อมูลดิบ
ปฏิกิริยาต่อข้ออ้างที่ว่าฐานข้อมูลส่วนใหญ่ไม่ได้เก็บข้อมูลไว้: มองว่าคำกล่าวนี้เกินจริง
ข้อเสนอวิธีส่ง SQL query ให้เพื่อนร่วมงานทางอีเมล: ตั้งข้อสงสัยเกี่ยวกับข้อดีของไฟล์ฐานข้อมูลแบบไบนารี
ตั้งคำถามต่อประโยชน์ของเครื่องมือ SQL แบบใหม่: มองว่าการเก็บข้อมูลไว้ในคลังข้อมูลถาวรและสร้างวิวตามต้องการน่าจะเหมาะสมกว่า
ความคล้ายกับ Presto/Trino: มีความเห็นว่าแนวทางของ DuckDB ให้ความรู้สึกคล้ายกับ Presto/Trino