Skip to content

Exploring columnar simplification#685

Draft
frankmcsherry wants to merge 3 commits intoTimelyDataflow:master-nextfrom
frankmcsherry:worktree-columnar-simplify
Draft

Exploring columnar simplification#685
frankmcsherry wants to merge 3 commits intoTimelyDataflow:master-nextfrom
frankmcsherry:worktree-columnar-simplify

Conversation

@frankmcsherry
Copy link
Member

An exploration of removing DD generality in favor of columnar storage, with an eye towards removing towers of abstractions to support hypothetical generality. And Vec; it would remove support for Vec as well.

A work in progress for now, as we see how far Claude was able to get, and with which unacceptable compromises along the way.

Remove the Layout/WithLayout/LayoutExt trait tower and replace with
direct Columnar-based type constraints. All batch containers are now
Coltainer<C> (wrapping C::Container from the columnar crate).

Key changes:
- Add Data trait: Columnar + Ord + Clone + 'static with ordered refs
- Add Coltainer<C> as the sole BatchContainer for data columns
- Remove Layout, WithLayout, LayoutExt traits and Vector/TStack structs
- Remove BuilderInput trait (Columnar provides owned<->ref relationship)
- Simplify TraceReader/BatchReader/Cursor to use type Key/Val/Time/Diff
  directly instead of 12-line LayoutExt bound blocks
- Add Columnar bound to crate-level Data trait
- Update all operators, wrappers, algorithms for columnar Ref types

28 files changed, ~980 insertions, ~1610 deletions (net -630 lines).

Known TODOs:
- Enter/enter_at cursor map_times needs container for synthesized times
- join_map/reduce convenience APIs convert Refs to owned (temporary
  workaround until push-into-container API redesign)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@frankmcsherry frankmcsherry changed the base branch from master to master-next March 16, 2026 11:01
frankmcsherry and others added 2 commits March 16, 2026 07:17
…orts

Implement the container approach for enter/enter_at/frontier cursor
wrappers: synthesized times are pushed into a TInner::Container, then
replayed as columnar Refs. Diffs use a temporary container similarly.

Also removes unused imports from cargo fix.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Update dogsdogsdogs, experiments, server, and example files:
- Replace KeyOwn/ValOwn/TimeGat/DiffGat with Key/Val/Time/Diff
- Add Data bounds on Timestamp where arrangements are created
- Convert join_core/as_collection closures for columnar Ref types
- Add columnar::Columnar derives for custom types (AltNeu, Pair)
- Exclude interactive crate (recursive Value enum needs manual Columnar impl)
- Add explicit Semigroup<&Present> impl to prevent recursion overflow

Remaining: a few examples (progress.rs, pagerank.rs) and tests need
similar mechanical updates for Ref types with isize keys.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant