Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,11 @@ The format follows Keep a Changelog and the package uses semantic versioning.

## Unreleased

- Applied every supported lower and upper bound from a conjunctive range query
before loading secondary-index candidates.
- Bounded parallel secondary-index uploads to three operations, overlapped
independent immutable Snapshot or Trie writes, and kept HEAD as the final
awaited compare-and-swap.
- Started the mutable-HEAD freshness interval when a successful fetch or
conditional revalidation completes, preventing slow 304 responses from
arriving already expired.
Expand Down
8 changes: 5 additions & 3 deletions docs/ARCHITECTURE.md
Original file line number Diff line number Diff line change
Expand Up @@ -110,9 +110,11 @@ private.
gzip-compressed when useful, and encrypted.
5. Every configured secondary index and declared covering projection is
updated or rebuilt.
6. New immutable document and index objects are created.
7. HEAD publishes the document root and all active index references with one
ETag compare-and-swap.
6. New immutable document and index objects are created. Secondary-index
uploads use a concurrency bound of three and overlap independent Snapshot
or Trie object writes.
7. After every immutable upload completes, HEAD publishes the document root
and all active index references with one ETag compare-and-swap.
8. The response includes the new HEAD, changed immutable objects, and
document.
9. The writing tab updates its cache and broadcasts the bundle to other tabs.
Expand Down
11 changes: 7 additions & 4 deletions docs/BENCHMARKS.md
Original file line number Diff line number Diff line change
Expand Up @@ -183,10 +183,13 @@ The range returned 25 documents from covering index fields.
| Medium | 473.98 ms | 1,612.96 ms | 510.99 ms | 1,919.19 ms | 1,500 |
| Large | 1,044.55 ms | 2,115.30 ms | 1,026.00 ms | 2,018.80 ms | 7,500 |

Current range planning selected every value above the lower bound before
applying the upper bound, so the 25-document large result evaluated 7,500
index candidates. Covering fields still kept the operation to two network
reads and avoided loading document pages.
At the benchmarked commit, range planning selected every value above the
lower bound before applying the upper bound, so the 25-document large result
evaluated 7,500 index candidates. The current planner applies both bounds and
the equivalent regression test selects 25 candidates. The latency table
remains the historical measurement and has not been relabelled as a
post-correction benchmark. Covering fields kept the measured operation to two
network reads and avoided loading document pages.

## Full scans

Expand Down
4 changes: 3 additions & 1 deletion docs/QUERIES-INDEXES.md
Original file line number Diff line number Diff line change
Expand Up @@ -189,7 +189,9 @@ defineIndex<Note>(
```

Range indexes contain exactly one field. Equality indexes can contain up to
four fields.
four fields. For conjunctive range queries, every supported `eq`, `lt`, `lte`,
`gt`, and `gte` comparison on the indexed field is applied before document
candidates are loaded.

Only scalar string, number, boolean, or null values are indexed. Arrays and
objects remain available to bounded local filtering.
Expand Down
Loading
Loading