{:boundary (mst-boundary lzpl)}. The API and on-disk boundary descriptor
may still change, and it is not yet hardened for production sync workloads; the default count
B-tree is unaffected. Split points are derived from key hashes (hasch.fast,
byte-identical JVM↔cljs) instead of node fill, so the tree is a pure function of its element
set: the same elements always produce the byte-identical, content-addressed structure
regardless of conj/disj order or which platform built it. Aimed at CRDT state sync and
cross-replica dedup. Self-describing (the policy rides in the serialized blob and
self-restores with no consumer configuration). Forces diff-buffering off and rejects leaf
processors — both would break canonical addressing. Implemented on JVM + cljs, including
storage-aware durable removal (address-preserving + markFreed). See
doc/merkle-search-tree.md.CountBoundary
(IBoundary) / PBoundary policy, byte-identical to before, with the split point factored
out so MST (and future policies) plug in. No measurable performance change to the default
path (verified by an interleaved criterium A/B against the pre-seam baseline).The following also shipped in the 0.4 line but were not previously recorded here:
:diff-buf-size / -Dpss.diffBufSize; 0 is byte-identical to baseline. See
doc/diff-buffering.md.count-slice counts a range
in O(log n) without iterating, and hasSubtreeCounts() is an O(1) check before using it.get-nth reaches an element by position in O(log n) for
percentile/quantile queries (requires a :measure with a weight).:measure (IMeasure interface / protocol),
maintained incrementally; measure and measure-slice answer range aggregates (sum, count,
min/max, variance, …) in O(log n). Built-in NumericStatsOps. See
doc/statistical-queries.md.lookup (retrieve the actually-stored key) and replace
(single-traversal in-place update at the same logical position).org.replikativ.persistent-sorted-set.fressian — an optional canonical Fressian
read/write handler set for PSS nodes (pss/leaf/pss/branch) and roots (pss/set), so
konserve/kabel-backed consumers (datahike, yggdrasil, proximum, stratum) share one wire
form. JVM (clojure.data.fressian) + cljs (fress); data.fressian is a provided dep.:branching-factor/:diff-buf-size ride in the blob (a store
may hold mixed branching factors); the content-hash projection (node->map) is unchanged.IStorage, comparator, measure-ops) resolve at read via
consumer-supplied resolvers — lexical closures for a one-store serializer, or id-keyed
registries (register-storage!/registry-storage-resolver, …) for a shared/wire serializer.ref-type (the soft/weak/strong caching policy) now rides in the blob as data, so it
survives a round-trip / rootless replication (a node reconstructs with the writer's policy even
when the reader knows nothing about it); SOFT (the default) is omitted, and a read-time
:ref-type overrides what was serialized. ref-type is a JVM caching policy (cljs has no
soft/weak refs), but cljs still carries it through inertly so it round-trips losslessly
even via a cljs relay. Content addresses are unchanged.doc/serialization.md.settings and sorted-set*storage and opts args to ctorswalkAddressesAdded:
seek to jump ahead during iteration #9 via @FiV0Added:
IStorage, store, restore, restore-by, walk-addresses, set-branching-factor!Special handling of nils in slice/rslice in CLJS, matching CLJ behaviour #6
Fixed NPE in org.replikativ.persistent-sorted-set.arrays/array? #4 #5 thx @timothypratley
Throw if iterating over a transient set that has been mutated.
Recompiled for Java 8.
Initial.
Can you improve this documentation? These fine people already did:
Nikita Prokopov & Christian WeilbachEdit on GitHub
cljdoc builds & hosts documentation for Clojure/Script libraries
| Ctrl+k | Jump to recent docs |
| ← | Move to previous article |
| → | Move to next article |
| Ctrl+/ | Jump to the search field |