Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
121 commits
Select commit Hold shift + click to select a range
9c2149c
feat: add asynchronous materialized view refresh
jiangxinmeng1 Aug 12, 2026
9462396
fix: complete materialized view refresh path
jiangxinmeng1 Aug 12, 2026
f5eea55
fix: refresh materialized views without replacing relation
jiangxinmeng1 Aug 12, 2026
a28f99a
feat: incrementally refresh materialized views
jiangxinmeng1 Aug 13, 2026
8c446ac
feat: support multi-source ISCP materialized views
jiangxinmeng1 Aug 13, 2026
956e9e5
fix: preserve single-table materialized view sources
jiangxinmeng1 Aug 13, 2026
3ba3d93
fix: preserve single-source ISCP batch indexes
jiangxinmeng1 Aug 13, 2026
2568c8a
fix: resolve multi-source MV CDC batch indexes
jiangxinmeng1 Aug 13, 2026
f7aaadc
fix: reject direct DML on materialized views
jiangxinmeng1 Aug 13, 2026
c7f7e55
fix: reject queries on broken materialized views
jiangxinmeng1 Aug 13, 2026
c66e8c6
fix: stabilize materialized view refresh under load
jiangxinmeng1 Aug 20, 2026
588b4df
fix: maintain materialized views incrementally under concurrent tail
jiangxinmeng1 Aug 21, 2026
c4466e7
test: cover multi-source ISCP protocol gate
jiangxinmeng1 Aug 21, 2026
32dff54
fix: adapt materialized view rows to value representation
jiangxinmeng1 Aug 21, 2026
9263690
fix: reduce materialized view tail latency
jiangxinmeng1 Aug 25, 2026
af71ced
fix: preserve temporal precision in materialized view deltas
jiangxinmeng1 Aug 26, 2026
4b0f0d9
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Aug 26, 2026
b1bc9a7
feat: extend incremental materialized view aggregates
jiangxinmeng1 Aug 26, 2026
9b7fb18
feat: add materialized view refresh modes
jiangxinmeng1 Aug 31, 2026
42c1ded
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Aug 31, 2026
e550d61
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Aug 31, 2026
ac8569f
[RFC] incrementally maintained materialized views v1
jiangxinmeng1 Aug 31, 2026
a5da7a1
docs: link materialized view design to implementation PR
jiangxinmeng1 Aug 31, 2026
c80ec03
docs(design): document materialized view gaps in English and Chinese
jiangxinmeng1 Aug 31, 2026
9f81831
docs: expand materialized view design and fix DDL compatibility
jiangxinmeng1 Aug 31, 2026
919f63d
fix: use moerr in materialized view paths
jiangxinmeng1 Aug 31, 2026
673ac20
fix: cover materialized view tail conversion
jiangxinmeng1 Sep 1, 2026
8bab439
Merge upstream/main into feat/materialized-view-24553
jiangxinmeng1 Sep 1, 2026
c213982
test: cover materialized view refresh boundaries
jiangxinmeng1 Sep 1, 2026
9980211
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 1, 2026
620584d
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 2, 2026
50e4ce5
test: cover materialized view refresh end to end
jiangxinmeng1 Sep 2, 2026
1967f13
test: add materialized view end-to-end expectations
jiangxinmeng1 Sep 2, 2026
496d906
docs: clarify materialized view PCT status
jiangxinmeng1 Sep 2, 2026
9369c7f
docs: design broader incremental MV maintenance
jiangxinmeng1 Sep 2, 2026
79a737f
feat: incrementally maintain union all materialized views
jiangxinmeng1 Sep 2, 2026
4654570
docs: define atomic materialized view delivery
jiangxinmeng1 Sep 2, 2026
21d422c
fix: reject regressed ISCP iteration ranges
jiangxinmeng1 Sep 2, 2026
b3a6c7f
docs: clarify materialized view intermediate state
jiangxinmeng1 Sep 3, 2026
3a8b60b
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 3, 2026
bf87fb3
fix shared ISCP iteration source routing
jiangxinmeng1 Sep 3, 2026
032bcb3
fix: bound shared ISCP source union
jiangxinmeng1 Sep 4, 2026
e629f24
test: fix ISCP fanout timestamp type
jiangxinmeng1 Sep 4, 2026
a59bd49
feat: maintain having and distinct aggregates
jiangxinmeng1 Sep 4, 2026
bbf832e
fix: identify materialized views by structured markers
jiangxinmeng1 Sep 4, 2026
0cf0403
test: reject MV marker text in ordinary column comments
jiangxinmeng1 Sep 4, 2026
f468292
Merge upstream/main into materialized view PR
daviszhen Sep 5, 2026
f94d9fb
Merge remote-tracking branch 'upstream/main' into codex/auto-pr27615-…
daviszhen Sep 5, 2026
5ddf3c3
test(cdc): update ISCP SQL builder call
daviszhen Sep 5, 2026
70d6a7f
Merge remote-tracking branch 'upstream/main' into codex/auto-pr27615-…
daviszhen Sep 5, 2026
a164823
Merge remote-tracking branch 'upstream/main' into codex/auto-pr27615-…
daviszhen Sep 5, 2026
13748de
test(plan): diagnose unsupported materialized view joins
jiangxinmeng1 Sep 7, 2026
9034992
Merge main into materialized view development branch
XuPeng-SH Sep 8, 2026
20e5062
fix materialized view identity, transactional refresh and bounded cle…
XuPeng-SH Sep 8, 2026
5f629a0
merge current main and assign materialized view capability 57
XuPeng-SH Sep 8, 2026
fe73da0
fix MV aggregate state and reject untracked refresh inputs
XuPeng-SH Sep 8, 2026
d3652e7
fix: preserve MV and index consumer contracts
XuPeng-SH Sep 8, 2026
fea45e4
fix: satisfy MV CI error and refresh SQL tests
jiangxinmeng1 Sep 8, 2026
8408851
fix: resolve MV CI static analysis findings
jiangxinmeng1 Sep 8, 2026
d5e148b
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 9, 2026
efe0186
fix: classify materialized views by exact identity
jiangxinmeng1 Sep 9, 2026
260f99c
fix: restore replace expression walker after merge
jiangxinmeng1 Sep 9, 2026
06bb86d
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 9, 2026
0ec7565
fix: reject alter view on materialized views
jiangxinmeng1 Sep 9, 2026
b7beaf0
test: cover nullable materialized view delete cleanup
jiangxinmeng1 Sep 9, 2026
3d80cdd
fix: admit supported materialized view having predicates
jiangxinmeng1 Sep 11, 2026
e6be441
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 11, 2026
c8bbfe7
Merge branch 'main' into feat/materialized-view-24553
jiangxinmeng1 Sep 11, 2026
001f436
fix: resolve duplicate ISCP retriever accessor
jiangxinmeng1 Sep 11, 2026
843a4b0
Merge remote-tracking branch 'origin/feat/materialized-view-24553' in…
jiangxinmeng1 Sep 11, 2026
6eac14d
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 11, 2026
3a4890d
fix: fence materialized view protocol and state identity
jiangxinmeng1 Sep 11, 2026
5d92295
fix: fail closed on malformed MV state owners
jiangxinmeng1 Sep 11, 2026
5b3306b
Merge remote-tracking branch 'upstream/main' into feat/materialized-v…
jiangxinmeng1 Sep 14, 2026
3cc6cb8
fix parser tests after upstream extract formatting
jiangxinmeng1 Sep 14, 2026
1275173
test: improve materialized view coverage
jiangxinmeng1 Sep 14, 2026
a0fd213
Merge upstream/main into feat/materialized-view-24553
jiangxinmeng1 Sep 15, 2026
e0126da
fix(mv): allocate dedicated protocol capability
jiangxinmeng1 Sep 15, 2026
7e5ba6d
fix(mv): avoid protocol capability collision
jiangxinmeng1 Sep 15, 2026
2979f70
test(mv): align capability guard with protocol 74
jiangxinmeng1 Sep 15, 2026
c76c926
fix: fence timezone-sensitive materialized view recovery
jiangxinmeng1 Sep 15, 2026
2da0faa
Merge branch 'main' into feat/materialized-view-24553
jiangxinmeng1 Sep 15, 2026
779ceb4
approve design
jiangxinmeng1 Sep 15, 2026
6a10a23
Merge upstream/main into feat/materialized-view-24553
jiangxinmeng1 Sep 23, 2026
2e93b70
fix: regenerate plan protobuf after upstream merge
jiangxinmeng1 Sep 23, 2026
0a06473
fix: reject timezone-sensitive MV HAVING expressions
jiangxinmeng1 Sep 23, 2026
5081ae4
fix: regenerate upstream protocol and parser definitions
jiangxinmeng1 Sep 23, 2026
3eb5a8a
test: cover materialized view restore boundaries
jiangxinmeng1 Sep 23, 2026
adece0d
Merge upstream/main into feat/materialized-view-24553
jiangxinmeng1 Sep 23, 2026
7b3d12d
fix: regenerate mysql parser after upstream merge
jiangxinmeng1 Sep 23, 2026
6f1d989
fix: restore set operation char type helper
jiangxinmeng1 Sep 23, 2026
8e272d7
fix: remove unused prepared plan helper
jiangxinmeng1 Sep 24, 2026
2bcaa35
fix: restore hex protocol admission checks
jiangxinmeng1 Sep 24, 2026
93e7b1a
fix: restore query value type coercion
jiangxinmeng1 Sep 24, 2026
845d462
fix: restore prepared set-operation lineage helper
jiangxinmeng1 Sep 24, 2026
caad67f
fix: restore adaptive top plan remapping
jiangxinmeng1 Sep 24, 2026
c951bfd
Merge upstream main into materialized view PR
jiangxinmeng1 Sep 28, 2026
6cd7137
fix: restore materialized view protobuf bindings
jiangxinmeng1 Sep 28, 2026
da5b901
Merge remote-tracking branch 'upstream/main' into codex/fix-pr27615-c…
jiangxinmeng1 Sep 28, 2026
2ca5865
fix: keep prepared numeric protobuf fields
jiangxinmeng1 Sep 28, 2026
a9b49f4
fix: pass commit timestamp to merge scheduler test
jiangxinmeng1 Sep 28, 2026
bedd5bc
fix materialized view capability and restore paths
jiangxinmeng1 Sep 28, 2026
38e41ca
align MV capability documentation and gates
jiangxinmeng1 Sep 28, 2026
a80686b
Merge remote-tracking branch 'upstream/main' into codex/fix-pr27615-c…
jiangxinmeng1 Sep 28, 2026
f0e2364
test(compile): update view recovery page fixture
jiangxinmeng1 Sep 28, 2026
98bd6ce
fix(plan): restore planner compatibility guards
jiangxinmeng1 Sep 28, 2026
0c7ba56
approve design
jiangxinmeng1 Sep 28, 2026
e92bf50
Merge upstream main and reject timezone-sensitive MV refreshes
jiangxinmeng1 Sep 29, 2026
10def81
Merge remote-tracking branch 'jxm_ssh/feat/materialized-view-24553' i…
jiangxinmeng1 Sep 29, 2026
b525bfa
Merge remote-tracking branch 'upstream/main' into codex/fix-pr27615-r…
jiangxinmeng1 Sep 29, 2026
f7f0814
Merge remote-tracking branch 'fork/feat/materialized-view-24553' into…
jiangxinmeng1 Sep 29, 2026
4aeda8a
fix: reject timezone-sensitive materialized view expressions
jiangxinmeng1 Sep 29, 2026
7379585
Merge remote-tracking branch 'jxm_ssh/feat/materialized-view-24553' i…
jiangxinmeng1 Sep 29, 2026
50c33ca
fix: reject materialized view interval expressions
jiangxinmeng1 Sep 29, 2026
fb101cf
fix: reject date timestamp materialized view expressions
jiangxinmeng1 Sep 29, 2026
58d0e84
Merge remote-tracking branch 'upstream/main' into codex/fix-pr27615-c…
jiangxinmeng1 Sep 30, 2026
4dca6e0
fix: preserve SET provenance across planning boundaries
jiangxinmeng1 Sep 30, 2026
da8dfda
Merge remote-tracking branch 'upstream/main' into codex/fix-pr27615-r…
jiangxinmeng1 Sep 30, 2026
c83148d
Merge remote-tracking branch 'fork/feat/materialized-view-24553' into…
jiangxinmeng1 Sep 30, 2026
35071f8
Merge remote-tracking branch 'upstream/main' into codex/fix-pr27615-c…
jiangxinmeng1 Sep 30, 2026
42bde2b
fix: restore planner regression test synchronization
jiangxinmeng1 Sep 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
218 changes: 218 additions & 0 deletions docs/design/materialized_view_incremental.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,218 @@
# Materialized views: implemented contract (D2)

Status: implementation contract for this PR. The persisted definition is format
1 and requires the dedicated protocol 102 capability. This document describes the implemented aggregate
and UNION ALL variants; it does not specify a future operator-graph format.

## Design traceability and approval

- Owning issue: [matrixorigin/matrixone#24553](https://github.com/matrixorigin/matrixone/issues/24553)
- Implementation PR: [matrixorigin/matrixone#27615](https://github.com/matrixorigin/matrixone/pull/27615)
- Approval decision: approved

## SQL and refresh policy

`CREATE MATERIALIZED VIEW ... REFRESH FAST|FORCE|COMPLETE ON CHANGE AS SELECT ...`
creates a physical result maintained by ISCP. `INCREMENTAL` aliases FAST and
`FULL` aliases COMPLETE. The default is FORCE ON CHANGE. COMPLETE ON DEMAND
creates a result refreshed explicitly by `REFRESH MATERIALIZED VIEW` in the
caller's transaction. FAST and FORCE ON DEMAND are rejected.

FAST supports the planner's deterministic direct-source grouped aggregates and
compatible UNION ALL branches. The supported state includes COUNT, SUM, AVG,
MIN/MAX, DISTINCT aggregates and HAVING. Nullable groups and inputs follow SQL
semantics. Unsupported expressions, set operations or incompatible branch state
are rejected for FAST. FORCE selects COMPLETE when the definition is outside the
incremental subset. COMPLETE supports up to 16 direct base sources, including
joins. Temporary, external and view sources are rejected.
All refresh modes reject subqueries, CTEs, session variables/parameters and
volatile or time-dependent functions before binding. Their inputs are not
represented by the direct-source scheduling and snapshot contract.

A UNION ALL branch has an explicit branch identity even when two branches read
the same table. Sources are deduplicated for scheduling, while each matching
branch consumes a source change. Output aliases and hidden state layouts are
aligned before admitting incremental maintenance.

## One authoritative definition

`pkg/catalog/mvdefinition` owns the shared codec and identity checks. A target's
catalog-owned `mv_definition` envelope contains:

- Format and capability, tenant, target database/table IDs and names, generation.
- Canonical CREATE and refresh SQL, refresh method/timing and visible columns.
- Deduplicated source database/table IDs, names and present schema versions.
- Optional incremental description and exact auxiliary relation identity.

Generation 1 is immutable. DROP/CREATE allocates a different target ID. There is
no in-place definition alteration or inferred migration by table name. Direct
incremental descriptions use version 2; UNION ALL uses version 3. Unknown,
incomplete and oversized definitions are rejected before execution.

The ISCP job stores only an MV reference (target ID, generation and SHA256 digest)
and the derived scheduling sources. It does not duplicate refresh SQL or state
layout. The consumer loads the authoritative definition in its refresh
transaction and verifies the reference, tenant, sources and auxiliary owner.

Read planning and every cached-plan execution validate source identity and schema
version. DROP/recreate, TRUNCATE, rename and schema-version-changing ALTER
invalidate the dependent generation. Reads and refreshes then fail with a
recreation diagnostic. DROP MV remains available to retire the invalid object.

An unrestricted DELETE remains a row deletion when a source has an MV dependent,
including ON DEMAND views. After acquiring the source catalog lock, compilation
checks the account's view definitions before using the normal truncate shortcut.
This lookup is proportional to the account's views and adds no dependency cache.

Public writes and ALTER/rename/TRUNCATE on a result or its auxiliary state are
rejected. An ordinary comment has no ownership meaning. Public CREATE TABLE
rejects reserved `mv_*` properties and `__mo_mv_state_` names. Internal refresh
uses a private context capability containing exactly the tenant, target ID,
generation and optional state ID. A general internal-executor flag grants no
write authority.

## Creation, refresh and cleanup

CREATE resolves and locks sources, creates the target and optional auxiliary
relation in the same transaction, then persists their final IDs. The auxiliary
owner records the tenant, target ID/generation and state ID. Creation publishes
an ON CHANGE job only after these identities are complete. Consumers never run
`CREATE TABLE IF NOT EXISTS` to recover state by name.
Finalization replaces the envelope across every property block, leaving one
authoritative definition. A CREATE whose source changes while waiting for a
catalog lock aborts and can be retried against the current definition.

Initial snapshot replacement publishes target and auxiliary data atomically.
Initial watermark finalization can follow this transaction; a crash in that gap
repeats replacement. Tail refresh publishes result, state and watermark CAS in
one transaction. Every generated delta DML advances the statement boundary so
later statements observe preceding workspace writes.
AVG and AVG(DISTINCT) persist sums and counts; the visible quotient is never used
as additive state. VALUES column nullability includes every row so NULL groups
survive transport into ordinary and DISTINCT delta aggregates.

A refresh holds shared locks on the same database/relation catalog keys used by
DDL, in a stable order. Generation CAS fences stale workers. A recoverable delta
error may enter FORCE replacement only after its transaction rolled back
successfully. Cancellation, deadline, invalid identity/format, resource limits,
CAS loss, failed rollback and uncertain commit outcomes do not permit fallback.

Deleted-row values are read immediately before each tombstone commit, rather
than at the beginning of the whole iteration. This handles inserts and repeated
updates within one interval. Historical lookup owns copied variable-width data,
uses historical object ranges, and excludes tombstones committed after the
requested snapshot. Missing historical data is an error, never a partial delta.

DROP retires all active job generations by target ID before deleting owned
relations. Source rename cannot rewrite the target name. In-memory tombstone GC
compares timestamps in the same units. Malformed job payloads are quarantined
individually so unrelated log replay can continue.

## Resource and cancellation bounds

- At most 16 direct sources/branches; catalog decoding is limited to 1 MiB.
- Incremental rows are decoded in chunks before copying, with at most 32,768
rows and 8 MiB of accounted scratch per chunk. Historical snapshot groups
share one lookup budget. A single oversized value fails before copying.
- Generated SQL has an 8 MiB bound. Chunks are released before advancing the
borrowed batch. Iteration and row scans check cancellation; iterators, batches,
SQL results and transaction cleanup retain their existing effective owners.
- Async refresh inherits the finite iteration deadline; manual refresh has a
one-hour timeout. Worker fanout and shared-stream references use ISCP's bounded
admission, cancellation and drain lifecycle.
- Persistent DISTINCT multiplicities and affected-group state use database
storage quotas. Zero multiplicities and affected markers are removed. There
is no arbitrary global row-count limit or full state COUNT scan on each delta.

## Upgrade and rollback

All creation, including ON DEMAND, requires protocol 102. Admission is a rollout
check; safety also relies on representations understood by predecessor readers.
On disk, the job uses the existing IndexSync discriminator with an empty index
selector and an additive MVReference. A predecessor's writer registry rejects
that selector before constructing a consumer or executing SQL. New decoding
validates the reference and restores the in-memory MV consumer discriminator.

Targets and auxiliary relations retain physical view kind and a MATERIALIZED
CREATE syntax barrier. Current catalog readers project authenticated metadata as
physical target/state relations. Predecessors retain the view definition and
reject its syntax for reads and its view kind for DML. This also covers ON DEMAND
objects, which have no background job.

Mixed-version MV availability is unsupported. Protocols 99 through 101 are
predecessors without the MV consumer; none may create, claim, refresh, or
recover MV jobs. Use capable binaries for reads,
refresh and cleanup, and drop materialized views before a binary rollback.
Pre-envelope metadata from earlier revisions of this unreleased PR requires
recreation. Component compatibility tests exercise the actual predecessor's
job decode/consumer construction and syntax parser; they do not claim a supported
whole-cluster downgrade or an automatic migration of those earlier revisions.

## Validation and performance gates

Focused tests cover codec/version/tenant/generation boundaries, exact authority,
job replay isolation, historical row ownership and snapshot deletion visibility,
chunk limits/cancellation, transaction routing and cleanup timing. SQL BVT
compares physical results with independent source aggregates through snapshot,
append, delete, update, flush, UNION ALL and full replacement. Identity tests
cover ordinary comments, reserved properties, prepared reads, source DDL, manual
transaction rollback and rename/drop cleanup. Restart validates persisted target
and job references. Shared lifecycle changes require targeted race validation.

Reference-host acceptance requires a source control sustaining 6,000 rows/s,
6,000 rows/s steady ingestion with one algebraic MV, p99 freshness at most 5 s,
maximum freshness at most 10 s, source throughput reduction at most 20%, and burst
drain at most twice the burst duration. Logical auxiliary state must stop growing
when the live groups/values stop growing. Record measured data and host/config
with the PR; these are acceptance gates, not guarantees derived from unit tests.

On a Ryzen 9 7900X with GOMAXPROCS=4, three paired 60,000-row runs measured median
source throughput of 55,339 rows/s without a view and 58,100 with one COUNT/SUM
view (no measured reduction in this run). At 6,500 offered rows/s, 170 commit observations measured
p99 freshness 1.166 s and maximum 1.267 s; a 2 s burst drained in 0.205 s.
Six insert/delete cycles with NULL and ordinary groups returned logical auxiliary
row counts to zero every time. These measurements describe this harness, not a
general capacity guarantee.

## Public benchmark mapping

There is no single industry benchmark that covers asynchronous incremental view
maintenance, SQL correctness, and dashboard freshness at the same time. The
validation therefore uses public workloads and records the maintenance mode
separately from ordinary query throughput:

- Materialize's public ingestion benchmark is the primary freshness reference
for the firehose scenario. It measures snapshot time, sustained ingestion,
p99 freshness, vertical scaling, and horizontal scaling. Its methodology uses
ten-minute ingestion runs and marker rows to measure database freshness:
<https://materialize.com/docs/reference/performance/>.
- ClickBench is the primary scan/query-throughput reference for observability
shaped data. It compares persisted aggregate queries with source scans, but
does not define incremental MV maintenance semantics:
<https://benchmark.clickhouse.com/>.
- TPC-H SF1/SF3 is used for complete-refresh and multi-source JOIN regression.
It is not an append-tail benchmark and its standard queries do not by
themselves measure asynchronous freshness.
- The SQL MV BVT is the correctness workload. Each case compares the physical
result with an independently recomputed source query after snapshot, append,
delete, update, NULL grouping, DISTINCT, MIN/MAX, HAVING, UNION ALL, and
multi-source COMPLETE/FORCE refresh. A case is not admitted to the
performance table unless the independent-result comparison passes.

The feature-to-workload mapping is:

| Feature | Correctness workload | Performance metric |
| --- | --- | --- |
| COUNT/SUM/AVG, NULL groups | single-table firehose | source rows/s, freshness p50/p95/p99/max |
| INSERT/DELETE/UPDATE | mixed tail rounds | freshness by operation and failed-group count |
| DISTINCT, MIN/MAX, HAVING | adversarial group churn | refresh CPU, tail freshness, auxiliary-state rows |
| UNION ALL | two-branch append/update/delete | branch routing cost and freshness |
| multi-source JOIN | TPC-H-shaped complete/force refresh | full refresh duration and result query latency |
| ON DEMAND COMPLETE | explicit refresh after bulk load | refresh duration and result availability |

For every run record host model, vCPU/memory, GOMAXPROCS, source row count,
offered rows/s, MV definition, refresh mode, run duration, correctness result,
source throughput, refresh throughput, and freshness quantiles. Results from a
small shared host must not be compared directly with Materialize's published
cloud-cluster numbers; they are only a reproducible baseline until host
capacity is matched.
Loading
Loading