DuckLake
DuckLake is the main storage solution for the DuckDB database engine used by Ilum.
Since embedded DuckDB by default supports only in-memory mode or local disk storage (single user), DuckLake provides a multi-user, concurrent storage layer that enables shared access to DuckDB datasets across the platform.
When to use DuckLake
Use DuckLake when:
- Multiple users or jobs need concurrent access to the same DuckDB tables
- You need persistent table storage with metadata management
- Your workload requires time travel or schema evolution
Skip DuckLake when:
- You have single-user, ad-hoc analytics workflows
- You’re prototyping and don’t need persistence
- Direct Parquet file access is enough
सुविधाऐं
- Shared dataset storage using object storage (S3/MinIO/GCS)
- ACID-like durability through snapshot isolation and cross-table transactions
- Time travel – query previous versions of your data
- स्कीमा विकास – add/modify columns without breaking existing queries
- अनुकूलता with standard DuckDB file formats and Parquet
For more on DuckLake’s capabilities, see the official DuckLake documentation.
Concurrency Model
DuckLake provides snapshot isolation for concurrent workloads:
- Readers never block writers, and writers never block readers
- Each query sees a consistent snapshot of data at transaction start
- Cross-table transactions maintain atomicity across related operations
This differs from strict serializable ACID – it’s optimized for analytic workloads where high read concurrency is prioritized over write serialization.
संरूपण
DuckLake is attached by default to all DuckDB instances in Ilum when enabled. Tables created in SQL Viewer will automatically use DuckLake.
Configure DuckLake via the Helm chart:
इलम कोर:
एसक्यूएल:
duckdb:
ducklake:
सक्षम: सच्चा # Set false to disable DuckLake entirely
location: एस 3://ilum-ducklake/ # Root path for all DuckLake data
पोस्टग्रेज़: # Metadata storage (required)
मेज़बान: "ilum-postgresql-hl" # PostgreSQL service hostname
बंदरगाह: 5432 # PostgreSQL port
database: ducklake # Database name (created automatically if missing)
उपभोक्ता: इलम # Database user
पासवर्ड: "चेंजमीप्लीज" # Database password
एस 3: # Data storage backend
समापन बिंदु: इलम-मीनो:9000 # S3 endpoint (MinIO, AWS S3, GCS, etc.)
region: us-पूर्व-1 # S3 क्षेत्र
keyId: मिनीएडमिन # Access key ID
रहस्य: मिनीएडमिन # Secret access key
urlStyle: पथ # Path-style access (use 'virtualHost' for AWS S3)
ssl: गलत # Enable TLS for S3 connections
Setting enabled: false causes DuckDB to fall back to in-memory tables only.
Use this only for single-user scenarios where persistence isn’t required.
उपयोग उदाहरण
Creating Tables
When enabled, DuckLake is automatically selected as the default storage backend for all DuckDB instances. This means any created tables in the default catalog will be stored in DuckLake.
-- Create a table (automatically stored in DuckLake)
बनाना सारणी events (
event_id बिगिंट,
event_time टाइमस्टैम्प,
user_id बिगिंट,
payload JSON
);
Limitations
- DuckDB-only: DuckLake catalogs cannot be accessed from Spark, Trino, or other engines
- No branching/tagging: Unlike Nessie or Iceberg, DuckLake doesn't support Git-like version control
- Concurrency bound by metadata DB: High-write concurrency may impact PostgreSQL performance