M3: spike DuckLake vs Iceberg for concurrent reference-data storage #512
Reference in New Issue
Block a user
Delete Branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Evaluate the two concurrent-read/write options for CMS reference data
(OPPS/PFS/etc.), both on the already-deployed RustFS object store:
(
stack.toml [context.lake]): snapshot isolation, optimistic concurrency.keeping the DuckDB SQL interface (lighter than full Iceberg/Trino).
Deliver a decision record: which becomes the concurrent store, and why.
Background:
docs/superpowers/specs/2026-07-08-duckdb-concurrency-streaming.md(options E, F). Feeds M4.Spike complete — decision: DuckLake (postgres catalog + Parquet on RustFS). Full decision record:
docs/superpowers/specs/2026-07-10-ducklake-vs-iceberg-decision.md(b4b25a3bc2).Hands-on results (prod notebooks container, real OPPS data):
Bonus finding: the Nessie Iceberg REST endpoint had never worked — two compose config bugs (warehouse must be a defined name, not the s3 URI; S3 creds must be a secrets-manager URN). Both fixed and verified in the same commit, so the Iceberg path now genuinely works as the fallback.
Feeds M4 (#513): implement the
aco.lakewrite path against DuckLake,ducklakecatalog db in the existing postgres, pilot OPPS Addendum B.