From 8e52e75f62db5c1831d7410d09fabcdd41dc1549 Mon Sep 17 00:00:00 2001 From: MPCoreDeveloper Date: Fri, 4 Sep 2026 16:45:36 +0200 Subject: [PATCH] release: 2.0.0.2 (patch) - version bump + full release documentation - Bump all projects/tests/tools/examples and Directory.Packages.props to 2.0.0.2 (4-part patch on the 2.0.0.x line). - docs/CHANGELOG: move [Unreleased] (the perf/hardening batch #376-#388 and earlier unreleased items) to [2.0.0.2] - 2026-09-04; new [Unreleased] on top. - docs/2.0.0.2_WHAT_CHANGED.md: release notes with the consolidated 2.x-vs- 1.9.x major steps (storage/format, performance engine, measurement discipline, reliability/compat/hardening) + honest default-config caveats. - NuGet.README.md: retitled to v2.0.0.2 with a What's New section + updated install/latest lines. - docs/INDEX.md + docs/manual/upgrade-and-downgrade.md link the new release notes. Full suite 1770 tests, 0 failed. --- Directory.Packages.props | 2 +- .../OrderManagement.CqrsDemo.csproj | 2 +- .../OrderManagement.PersistentDemo.csproj | 2 +- .../OrderManagement/OrderManagement.csproj | 2 +- .../SharpCoreDB.FluentMigratorDemo.csproj | 2 +- docs/2.0.0.2_WHAT_CHANGED.md | 72 +++++++++++++++++++ docs/CHANGELOG.md | 5 ++ docs/INDEX.md | 5 ++ docs/manual/upgrade-and-downgrade.md | 9 ++- .../SharpCoreDB.Analytics.csproj | 2 +- src/SharpCoreDB.CQRS/SharpCoreDB.CQRS.csproj | 2 +- .../SharpCoreDB.Client.Protocol.csproj | 2 +- .../SharpCoreDB.Client.csproj | 2 +- .../SharpCoreDB.Data.Provider.csproj | 2 +- .../SharpCoreDB.Distributed.csproj | 2 +- .../SharpCoreDB.EntityFrameworkCore.csproj | 2 +- .../SharpCoreDB.EventSourcing.csproj | 2 +- .../SharpCoreDB.Extensions.csproj | 2 +- .../SharpCoreDB.Functional.Dapper.csproj | 2 +- ...reDB.Functional.EntityFrameworkCore.csproj | 2 +- .../SharpCoreDB.Functional.Linq2DB.csproj | 2 +- .../SharpCoreDB.Functional.csproj | 2 +- .../SharpCoreDB.Graph.Advanced.csproj | 2 +- .../SharpCoreDB.Graph.csproj | 2 +- .../SharpCoreDB.Identity.csproj | 2 +- .../SharpCoreDB.Projections.csproj | 2 +- .../SharpCoreDB.Provider.Sync.csproj | 2 +- .../SharpCoreDB.Provider.YesSql.csproj | 2 +- .../SharpCoreDB.Serilog.Sinks.csproj | 2 +- .../SharpCoreDB.Server.Core.csproj | 2 +- .../SharpCoreDB.Server.Protocol.csproj | 2 +- .../SharpCoreDB.Server.csproj | 2 +- .../SharpCoreDB.VectorSearch.csproj | 2 +- src/SharpCoreDB/NuGet.README.md | 28 ++++++-- src/SharpCoreDB/SharpCoreDB.csproj | 6 +- src/SharpCoreDB/build/SharpCoreDB.props | 2 +- .../SharpCoreDB.Benchmarks.csproj | 2 +- .../SharpCoreDB.CQRS.Tests.csproj | 2 +- ...arpCoreDB.EntityFrameworkCore.Tests.csproj | 2 +- .../SharpCoreDB.EventSourcing.Tests.csproj | 2 +- .../SharpCoreDB.Identity.Tests.csproj | 2 +- .../SharpCoreDB.Profiling.csproj | 2 +- .../SharpCoreDB.Projections.Tests.csproj | 2 +- .../SharpCoreDB.Tests.csproj | 2 +- .../QuickZvecTest/QuickZvecTest.csproj | 6 +- .../SharpCoreDB.Benchmarks.Comparative.csproj | 2 +- .../SharpCoreDB.Benchmarks.csproj | 6 +- .../SharpCoreDB.CQRS.Benchmarks.csproj | 2 +- .../SharpCoreDB.DebugBenchmark.csproj | 2 +- .../SharpCoreDB.Demo/SharpCoreDB.Demo.csproj | 2 +- 50 files changed, 160 insertions(+), 61 deletions(-) create mode 100644 docs/2.0.0.2_WHAT_CHANGED.md diff --git a/Directory.Packages.props b/Directory.Packages.props index ad70ee41..94967e37 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -2,7 +2,7 @@ true true - 2.0.0.1 + 2.0.0.2 diff --git a/Examples/CQRS/OrderManagement.CqrsDemo/OrderManagement.CqrsDemo.csproj b/Examples/CQRS/OrderManagement.CqrsDemo/OrderManagement.CqrsDemo.csproj index 8256d89a..57bfb09d 100644 --- a/Examples/CQRS/OrderManagement.CqrsDemo/OrderManagement.CqrsDemo.csproj +++ b/Examples/CQRS/OrderManagement.CqrsDemo/OrderManagement.CqrsDemo.csproj @@ -6,7 +6,7 @@ 14.0 enable enable - 2.0.0.1 + 2.0.0.2 false true false diff --git a/Examples/EventSourcing/OrderManagement.PersistentDemo/OrderManagement.PersistentDemo.csproj b/Examples/EventSourcing/OrderManagement.PersistentDemo/OrderManagement.PersistentDemo.csproj index c8583dbf..4f8b001f 100644 --- a/Examples/EventSourcing/OrderManagement.PersistentDemo/OrderManagement.PersistentDemo.csproj +++ b/Examples/EventSourcing/OrderManagement.PersistentDemo/OrderManagement.PersistentDemo.csproj @@ -6,7 +6,7 @@ 14.0 enable enable - 2.0.0.1 + 2.0.0.2 false true false diff --git a/Examples/EventSourcing/OrderManagement/OrderManagement.csproj b/Examples/EventSourcing/OrderManagement/OrderManagement.csproj index b26c5416..56773732 100644 --- a/Examples/EventSourcing/OrderManagement/OrderManagement.csproj +++ b/Examples/EventSourcing/OrderManagement/OrderManagement.csproj @@ -6,7 +6,7 @@ 14.0 enable enable - 2.0.0.1 + 2.0.0.2 false true false diff --git a/Examples/FluentMigrator/SharpCoreDB.FluentMigratorDemo/SharpCoreDB.FluentMigratorDemo.csproj b/Examples/FluentMigrator/SharpCoreDB.FluentMigratorDemo/SharpCoreDB.FluentMigratorDemo.csproj index 876ef5eb..7550ca69 100644 --- a/Examples/FluentMigrator/SharpCoreDB.FluentMigratorDemo/SharpCoreDB.FluentMigratorDemo.csproj +++ b/Examples/FluentMigrator/SharpCoreDB.FluentMigratorDemo/SharpCoreDB.FluentMigratorDemo.csproj @@ -6,7 +6,7 @@ 14.0 enable enable - 2.0.0.1 + 2.0.0.2 false true diff --git a/docs/2.0.0.2_WHAT_CHANGED.md b/docs/2.0.0.2_WHAT_CHANGED.md new file mode 100644 index 00000000..b9b9fdd3 --- /dev/null +++ b/docs/2.0.0.2_WHAT_CHANGED.md @@ -0,0 +1,72 @@ +# SharpCoreDB 2.0.0.2 — What changed & the 2.x engine vs the 1.9.x line + +- **Release:** `2.0.0.2` (2026-09-04) — 4-part patch release on the 2.0.0.x line. +- **Quality gate:** full suite **1770 tests / 0 failed**, CI green on Windows/Ubuntu/macOS + + CodeQL + SonarCloud + Server Compatibility Smoke for every merged PR. +- **Contents:** everything merged since 2.0.0.1 — the perf/hardening batch of PRs #376-#388 — + plus the consolidated 2.x-vs-1.9.x overview below. +- See `docs/CHANGELOG.md` → `[2.0.0.2]` for the detailed change list and + `docs/2.0.0.0_WHAT_CHANGED.md` for the full 2.0.0.0 report (this document is the short, + forward-looking summary). + +## The major steps: 2.x engine vs the 1.9.x engine + +### 1. Storage & on-disk format (directory + single-file) +| Step | 1.9.x | 2.x | +|---|---|---| +| Record layout | variable-length length-prefixed rows only | **Fixed-width record layout** (constant stride + out-of-line `.ovf` overflow arena) for columnar PK tables; **default for new PK tables** since B7; per-table flag **persisted in metadata** (authoritative on reopen) with **1.x → 2.0 auto-migration** (opt-in via `FixedWidthRecordLayout`) | +| DELETE durability | logical delete + full-file rewrite at flush | **Commit-time tombstone markers** (in-place negative length-prefix) → durable in O(delete), no full-file rewrite | +| In-place writes | only same-length patches, buffered later | **Buffered in-place overwrites flushed per storage page** (C6); markers also batched per page (C5) | +| Single-file (`.scdb`) | fixed-layout registry, compression bugs | **Format v2** (block registry/FSM/table directory), crash-safe auto-migration, block-level Brotli/GZip/Zstd, envelope encryption, concurrent-write corruption fix (2.0.0.1) | + +### 2. Performance engine (the “performance-first” rewrite) +- **Single-pass contiguous UPDATE/DELETE (B8/B9):** strictly ascending `pk = literal` batches on + plaintext fixed-width PK tables are resolved and applied as ONE contiguous range — and since M3 + the probe verifies the span by decoding each record’s PK slot instead of doing ~10K B-tree + searches per batch; PK entries are removed with one descending `DeleteBulk`. +- **Whole-file DML resolution & key-only decode (B1/W1):** batch UPDATE/DELETE resolve all targets + from a single in-memory snapshot decoding only PK/hash columns (no per-row preads). +- **Legacy variable-length fast path (#380):** strictly-ascending INTEGER-PK batches resolve with a + sequential decode pass + early exit (unordered files fall back safely). +- **Index maintenance:** PK deletes via `IIndex.DeleteBulk` (descending); duplicate-key hash removal + no longer quadratic (P5). +- **Batch INSERT (WP14, 2.0.0.1):** column-ordered `object[]` inserts — no per-row dictionaries. +- **Structured canonical batch parsing (B3/B9)** and, from 2.0.0.1, in-place field patches (WP11). + +### 3. Measurement discipline +- Fair-PK harness reports **median of 3 per phase** (D1) and gained a **same-window interleaved + A/B mode** (`--pk-ab`) so config comparisons are attributable; a **pure-default-config arm** + (`--pk-default`) exists to guard the out-of-the-box story. + +### 4. Reliability, compatibility & hardening +- **1.x reads, 2.x writes forward-compat guarantee documented**, including the **downgrade policy** + (files with commit-time tombstone markers are not readable by pre-marker binaries) and the + recommended read-only-first upgrade order — see `docs/manual/upgrade-and-downgrade.md`. +- **Default engine selection hardened:** `StorageEngineType.Auto` never silently lands on + PageBased (not yet OLTP-ready: ~26K UPDATE ops/s vs ~245K on the fixed-width Columnar path); + PageBased remains explicit opt-in. +- 4-part patch versioning (`n.n.n.n`) since 2.0.0.0. + +## Benchmark snapshot (fair-PK, tuned harness config, median-of-3, same machine) + +| | SharpCoreDB (Columnar fixed-width) | SQLite | gap | +|---|---:|---:|---:| +| UPDATE | ~163-245K ops/s | ~270-315K | ~0.8-1.7x of SQLite (layout/run dependent) | +| DELETE | ~106-172K ops/s | ~353-420K | ~2.1-3.5x | +| INSERT | ~125-152K ops/s | ~186-190K | competitive | +| READ | ~72-110K ops/s | ~95-107K | competitive | + +**Honest caveats for this release:** +- The **default config** (`NoEncryptMode=false`) runs ~1.3-1.6x slower than `NoEncryptMode=true` + on ALL phases: `Storage` keeps two encryption layers and the default still pays AES work in the + file-level read/page-cache wrappers even though per-record at-rest encryption + (`EnableAtRestRecordEncryption`) is off. Root cause quantified with same-window A/B (P3d) and + tracked as the next optimization; **FullSync was ruled out** as a cause. +- These numbers are synthetic ascending-PK batches; other shapes fall back to correct but slower + generic paths. + +## Upgrade & downgrade + +Follow `docs/manual/upgrade-and-downgrade.md`: back up → read-only open → read-write open → +verify. **Downgrading below the marker-introducing 2.x release is not supported** for databases +that already contain commit-time tombstone markers. diff --git a/docs/CHANGELOG.md b/docs/CHANGELOG.md index bf607264..f275e223 100644 --- a/docs/CHANGELOG.md +++ b/docs/CHANGELOG.md @@ -7,6 +7,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] + +## [2.0.0.2] - 2026-09-04 + +> Full release notes incl. the 2.x-vs-1.9.x major steps: [`docs/2.0.0.2_WHAT_CHANGED.md`](2.0.0.2_WHAT_CHANGED.md). + ### Hardening - **NoEncryptMode root cause quantified + explained (P3d)** - definitive 3-rep same-window `--pk-ab` diff --git a/docs/INDEX.md b/docs/INDEX.md index eb914d3a..bcada197 100644 --- a/docs/INDEX.md +++ b/docs/INDEX.md @@ -145,6 +145,11 @@ guide explaining when SharpCoreDB is fastest. ## 10. Benchmarks & Performance +- `2.0.0.2_WHAT_CHANGED.md` — ⭐ **release notes (2.0.0.2)**: the 2.x-vs-1.9.x major steps + the + 2.0.0.2 hardening/perf batch +- `CHANGELOG.md` — full per-version change log (`[2.0.0.2]`, new `[Unreleased]` on top) +- `manual/upgrade-and-downgrade.md` — compatibility matrix & downgrade policy +- `benchmarks/default-config-pk.md` — default-config fair-PK benchmark + NoEncryptMode root cause - `manual/performance.md` — ⭐ **Performance Guide**: when SharpCoreDB is fastest + v2.0 results - `performance/V2_PERFORMANCE_PLAN.md` — v2.x performance roadmap, root-cause analysis, .NET 11 plan - `benchmarks/SHARPCOREDB_COMPARATIVE_BENCHMARKS.md` — comparative report vs SQLite/LiteDB/BLite diff --git a/docs/manual/upgrade-and-downgrade.md b/docs/manual/upgrade-and-downgrade.md index f3568ea8..13daa28d 100644 --- a/docs/manual/upgrade-and-downgrade.md +++ b/docs/manual/upgrade-and-downgrade.md @@ -37,7 +37,10 @@ Recommended upgrade order: - Planned (CI): a true **cross-version** job that writes a database with a pinned older commit and reads it with `master` (requires an old-binary generator; tracked as follow-up). -## Changelog +## Changelog & release notes -See `docs/CHANGELOG.md` → `[Unreleased]` → **Hardening** for the marker/downgrade notes that -accompanied the tombstone work (PRs #367/#368) and this policy document. +- `docs/CHANGELOG.md` → `[2.0.0.2]` → **Hardening** for the marker/downgrade notes that accompanied + the tombstone work (PRs #367/#368) and the 2.0.0.2 hardening batch. +- `docs/2.0.0.2_WHAT_CHANGED.md` — full release notes incl. the consolidated + **2.x-vs-1.9.x major steps** table. +- `docs/2.0.0.0_WHAT_CHANGED.md` — the original 2.0.0.0 report. diff --git a/src/SharpCoreDB.Analytics/SharpCoreDB.Analytics.csproj b/src/SharpCoreDB.Analytics/SharpCoreDB.Analytics.csproj index 409cb2c3..0e2bb65e 100644 --- a/src/SharpCoreDB.Analytics/SharpCoreDB.Analytics.csproj +++ b/src/SharpCoreDB.Analytics/SharpCoreDB.Analytics.csproj @@ -4,7 +4,7 @@ net10.0 enable enable - 2.0.0.1 + 2.0.0.2 SharpCoreDB.Analytics diff --git a/src/SharpCoreDB.CQRS/SharpCoreDB.CQRS.csproj b/src/SharpCoreDB.CQRS/SharpCoreDB.CQRS.csproj index d16569e0..a922c92f 100644 --- a/src/SharpCoreDB.CQRS/SharpCoreDB.CQRS.csproj +++ b/src/SharpCoreDB.CQRS/SharpCoreDB.CQRS.csproj @@ -11,7 +11,7 @@ $(NoWarn);1591;SA1101;SA1633;SA1309 SharpCoreDB.CQRS - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.CQRS diff --git a/src/SharpCoreDB.Client.Protocol/SharpCoreDB.Client.Protocol.csproj b/src/SharpCoreDB.Client.Protocol/SharpCoreDB.Client.Protocol.csproj index f2ef99e0..e1deb1c2 100644 --- a/src/SharpCoreDB.Client.Protocol/SharpCoreDB.Client.Protocol.csproj +++ b/src/SharpCoreDB.Client.Protocol/SharpCoreDB.Client.Protocol.csproj @@ -9,7 +9,7 @@ SharpCoreDB.Client.Protocol - 2.0.0.1 + 2.0.0.2 Client-side protocol implementation for SharpCoreDB (gRPC, binary) diff --git a/src/SharpCoreDB.Client/SharpCoreDB.Client.csproj b/src/SharpCoreDB.Client/SharpCoreDB.Client.csproj index 03d52bdc..dfd72ffb 100644 --- a/src/SharpCoreDB.Client/SharpCoreDB.Client.csproj +++ b/src/SharpCoreDB.Client/SharpCoreDB.Client.csproj @@ -9,7 +9,7 @@ SharpCoreDB.Client - 2.0.0.1 + 2.0.0.2 .NET client library for SharpCoreDB network server (ADO.NET-like API) diff --git a/src/SharpCoreDB.Data.Provider/SharpCoreDB.Data.Provider.csproj b/src/SharpCoreDB.Data.Provider/SharpCoreDB.Data.Provider.csproj index 5e5814db..827e8482 100644 --- a/src/SharpCoreDB.Data.Provider/SharpCoreDB.Data.Provider.csproj +++ b/src/SharpCoreDB.Data.Provider/SharpCoreDB.Data.Provider.csproj @@ -16,7 +16,7 @@ https://github.com/MPCoreDeveloper/SharpCoreDB https://github.com/MPCoreDeveloper/SharpCoreDB ado.net;database;data-provider;sharpcoredb - 2.0.0.1 + 2.0.0.2 git NuGet.README.md SharpCoreDB.jpg diff --git a/src/SharpCoreDB.Distributed/SharpCoreDB.Distributed.csproj b/src/SharpCoreDB.Distributed/SharpCoreDB.Distributed.csproj index bc7d590d..b12a226e 100644 --- a/src/SharpCoreDB.Distributed/SharpCoreDB.Distributed.csproj +++ b/src/SharpCoreDB.Distributed/SharpCoreDB.Distributed.csproj @@ -15,7 +15,7 @@ SharpCoreDB.Distributed - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Distributed diff --git a/src/SharpCoreDB.EntityFrameworkCore/SharpCoreDB.EntityFrameworkCore.csproj b/src/SharpCoreDB.EntityFrameworkCore/SharpCoreDB.EntityFrameworkCore.csproj index eac2c915..e1be9bf5 100644 --- a/src/SharpCoreDB.EntityFrameworkCore/SharpCoreDB.EntityFrameworkCore.csproj +++ b/src/SharpCoreDB.EntityFrameworkCore/SharpCoreDB.EntityFrameworkCore.csproj @@ -8,7 +8,7 @@ SharpCoreDB.EntityFrameworkCore - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.EntityFrameworkCore diff --git a/src/SharpCoreDB.EventSourcing/SharpCoreDB.EventSourcing.csproj b/src/SharpCoreDB.EventSourcing/SharpCoreDB.EventSourcing.csproj index 7e528ea2..e5e12a66 100644 --- a/src/SharpCoreDB.EventSourcing/SharpCoreDB.EventSourcing.csproj +++ b/src/SharpCoreDB.EventSourcing/SharpCoreDB.EventSourcing.csproj @@ -11,7 +11,7 @@ $(NoWarn);1591;SA1101;SA1633;SA1309 SharpCoreDB.EventSourcing - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.EventSourcing diff --git a/src/SharpCoreDB.Extensions/SharpCoreDB.Extensions.csproj b/src/SharpCoreDB.Extensions/SharpCoreDB.Extensions.csproj index bf211749..9c274b9f 100644 --- a/src/SharpCoreDB.Extensions/SharpCoreDB.Extensions.csproj +++ b/src/SharpCoreDB.Extensions/SharpCoreDB.Extensions.csproj @@ -8,7 +8,7 @@ SharpCoreDB.Extensions - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Extensions diff --git a/src/SharpCoreDB.Functional.Dapper/SharpCoreDB.Functional.Dapper.csproj b/src/SharpCoreDB.Functional.Dapper/SharpCoreDB.Functional.Dapper.csproj index 9842d745..424efe5e 100644 --- a/src/SharpCoreDB.Functional.Dapper/SharpCoreDB.Functional.Dapper.csproj +++ b/src/SharpCoreDB.Functional.Dapper/SharpCoreDB.Functional.Dapper.csproj @@ -7,7 +7,7 @@ enable SharpCoreDB.Functional.Dapper - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Functional.Dapper diff --git a/src/SharpCoreDB.Functional.EntityFrameworkCore/SharpCoreDB.Functional.EntityFrameworkCore.csproj b/src/SharpCoreDB.Functional.EntityFrameworkCore/SharpCoreDB.Functional.EntityFrameworkCore.csproj index a593b965..db4444c5 100644 --- a/src/SharpCoreDB.Functional.EntityFrameworkCore/SharpCoreDB.Functional.EntityFrameworkCore.csproj +++ b/src/SharpCoreDB.Functional.EntityFrameworkCore/SharpCoreDB.Functional.EntityFrameworkCore.csproj @@ -7,7 +7,7 @@ enable SharpCoreDB.Functional.EntityFrameworkCore - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Functional.EntityFrameworkCore diff --git a/src/SharpCoreDB.Functional.Linq2DB/SharpCoreDB.Functional.Linq2DB.csproj b/src/SharpCoreDB.Functional.Linq2DB/SharpCoreDB.Functional.Linq2DB.csproj index 9e92a49a..893962f3 100644 --- a/src/SharpCoreDB.Functional.Linq2DB/SharpCoreDB.Functional.Linq2DB.csproj +++ b/src/SharpCoreDB.Functional.Linq2DB/SharpCoreDB.Functional.Linq2DB.csproj @@ -7,7 +7,7 @@ enable SharpCoreDB.Functional.Linq2DB - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Functional.Linq2DB diff --git a/src/SharpCoreDB.Functional/SharpCoreDB.Functional.csproj b/src/SharpCoreDB.Functional/SharpCoreDB.Functional.csproj index 9196a1c2..2e4a369a 100644 --- a/src/SharpCoreDB.Functional/SharpCoreDB.Functional.csproj +++ b/src/SharpCoreDB.Functional/SharpCoreDB.Functional.csproj @@ -7,7 +7,7 @@ enable SharpCoreDB.Functional - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Functional diff --git a/src/SharpCoreDB.Graph.Advanced/SharpCoreDB.Graph.Advanced.csproj b/src/SharpCoreDB.Graph.Advanced/SharpCoreDB.Graph.Advanced.csproj index 98eccf86..b2abfa0e 100644 --- a/src/SharpCoreDB.Graph.Advanced/SharpCoreDB.Graph.Advanced.csproj +++ b/src/SharpCoreDB.Graph.Advanced/SharpCoreDB.Graph.Advanced.csproj @@ -6,7 +6,7 @@ latest SharpCoreDB.Graph.Advanced SharpCoreDB.Graph.Advanced - 2.0.0.1 + 2.0.0.2 SharpCoreDB.Graph.Advanced MPCoreDeveloper MPCoreDeveloper diff --git a/src/SharpCoreDB.Graph/SharpCoreDB.Graph.csproj b/src/SharpCoreDB.Graph/SharpCoreDB.Graph.csproj index 54acd66c..52cb46fc 100644 --- a/src/SharpCoreDB.Graph/SharpCoreDB.Graph.csproj +++ b/src/SharpCoreDB.Graph/SharpCoreDB.Graph.csproj @@ -13,7 +13,7 @@ $(NoWarn);1591;SA1101;SA1633;SA1309 SharpCoreDB.Graph - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Graph diff --git a/src/SharpCoreDB.Identity/SharpCoreDB.Identity.csproj b/src/SharpCoreDB.Identity/SharpCoreDB.Identity.csproj index ea7b24fb..361ae368 100644 --- a/src/SharpCoreDB.Identity/SharpCoreDB.Identity.csproj +++ b/src/SharpCoreDB.Identity/SharpCoreDB.Identity.csproj @@ -8,7 +8,7 @@ true SharpCoreDB.Identity - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Identity diff --git a/src/SharpCoreDB.Projections/SharpCoreDB.Projections.csproj b/src/SharpCoreDB.Projections/SharpCoreDB.Projections.csproj index 3f2ce05a..37448243 100644 --- a/src/SharpCoreDB.Projections/SharpCoreDB.Projections.csproj +++ b/src/SharpCoreDB.Projections/SharpCoreDB.Projections.csproj @@ -11,7 +11,7 @@ $(NoWarn);1591;SA1101;SA1633;SA1309 SharpCoreDB.Projections - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Projections diff --git a/src/SharpCoreDB.Provider.Sync/SharpCoreDB.Provider.Sync.csproj b/src/SharpCoreDB.Provider.Sync/SharpCoreDB.Provider.Sync.csproj index 405ed39d..20203160 100644 --- a/src/SharpCoreDB.Provider.Sync/SharpCoreDB.Provider.Sync.csproj +++ b/src/SharpCoreDB.Provider.Sync/SharpCoreDB.Provider.Sync.csproj @@ -9,7 +9,7 @@ SharpCoreDB.Provider.Sync - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Provider.Sync diff --git a/src/SharpCoreDB.Provider.YesSql/SharpCoreDB.Provider.YesSql.csproj b/src/SharpCoreDB.Provider.YesSql/SharpCoreDB.Provider.YesSql.csproj index 65ca0633..2e8059f5 100644 --- a/src/SharpCoreDB.Provider.YesSql/SharpCoreDB.Provider.YesSql.csproj +++ b/src/SharpCoreDB.Provider.YesSql/SharpCoreDB.Provider.YesSql.csproj @@ -8,7 +8,7 @@ SharpCoreDB.Provider.YesSql - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Provider.YesSql diff --git a/src/SharpCoreDB.Serilog.Sinks/SharpCoreDB.Serilog.Sinks.csproj b/src/SharpCoreDB.Serilog.Sinks/SharpCoreDB.Serilog.Sinks.csproj index b3f79bef..4b2d5aeb 100644 --- a/src/SharpCoreDB.Serilog.Sinks/SharpCoreDB.Serilog.Sinks.csproj +++ b/src/SharpCoreDB.Serilog.Sinks/SharpCoreDB.Serilog.Sinks.csproj @@ -7,7 +7,7 @@ SharpCoreDB.Serilog.Sinks - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.Serilog.Sinks diff --git a/src/SharpCoreDB.Server.Core/SharpCoreDB.Server.Core.csproj b/src/SharpCoreDB.Server.Core/SharpCoreDB.Server.Core.csproj index 01c268c5..c21d74fb 100644 --- a/src/SharpCoreDB.Server.Core/SharpCoreDB.Server.Core.csproj +++ b/src/SharpCoreDB.Server.Core/SharpCoreDB.Server.Core.csproj @@ -9,7 +9,7 @@ SharpCoreDB.Server.Core - 2.0.0.1 + 2.0.0.2 Core server infrastructure for SharpCoreDB network server diff --git a/src/SharpCoreDB.Server.Protocol/SharpCoreDB.Server.Protocol.csproj b/src/SharpCoreDB.Server.Protocol/SharpCoreDB.Server.Protocol.csproj index 31672cac..b75eb7b2 100644 --- a/src/SharpCoreDB.Server.Protocol/SharpCoreDB.Server.Protocol.csproj +++ b/src/SharpCoreDB.Server.Protocol/SharpCoreDB.Server.Protocol.csproj @@ -9,7 +9,7 @@ SharpCoreDB.Server.Protocol - 2.0.0.1 + 2.0.0.2 Network protocol definitions for SharpCoreDB server (gRPC, binary, HTTP) diff --git a/src/SharpCoreDB.Server/SharpCoreDB.Server.csproj b/src/SharpCoreDB.Server/SharpCoreDB.Server.csproj index 514f453f..6094f2f1 100644 --- a/src/SharpCoreDB.Server/SharpCoreDB.Server.csproj +++ b/src/SharpCoreDB.Server/SharpCoreDB.Server.csproj @@ -19,7 +19,7 @@ sharpcoredb-server SharpCoreDB Network Server SharpCoreDB network database server with gRPC and HTTP support - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB Copyright (c) 2026 MPCoreDeveloper diff --git a/src/SharpCoreDB.VectorSearch/SharpCoreDB.VectorSearch.csproj b/src/SharpCoreDB.VectorSearch/SharpCoreDB.VectorSearch.csproj index 224a57ce..f9bde1b1 100644 --- a/src/SharpCoreDB.VectorSearch/SharpCoreDB.VectorSearch.csproj +++ b/src/SharpCoreDB.VectorSearch/SharpCoreDB.VectorSearch.csproj @@ -15,7 +15,7 @@ SharpCoreDB.VectorSearch - 2.0.0.1 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB.VectorSearch diff --git a/src/SharpCoreDB/NuGet.README.md b/src/SharpCoreDB/NuGet.README.md index 50eb9e08..ffa2ce86 100644 --- a/src/SharpCoreDB/NuGet.README.md +++ b/src/SharpCoreDB/NuGet.README.md @@ -1,4 +1,4 @@ -# SharpCoreDB v2.0.0.1 — Performance-First Database Engine +# SharpCoreDB v2.0.0.2 — Performance-First Database Engine **High-Performance Embedded AND Networked Database for .NET 10** @@ -10,6 +10,20 @@ SharpCoreDB is a modern, encrypted, file-based database engine with SQL support, [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT) [![SonarCloud Quality Gate](https://img.shields.io/sonar/quality_gate/MPCoreDeveloper_SharpCoreDB?server=https%3A%2F%2Fsonarcloud.io&logo=sonarcloud)](https://sonarcloud.io/dashboard?id=MPCoreDeveloper_SharpCoreDB) +## What's New in 2.0.0.2 + +- **Commit & overwrite writes are batched per storage page** — tombstone markers (C5) and buffered + in-place UPDATE overwrites (C6) are flushed with one write per touched page instead of one/two + pwrites per row; the fixed-width contiguous path (B8/B9) no longer does a B-tree search per key + (decode verification instead) and removes PK entries with one `DeleteBulk`. +- **Legacy (variable-length) ascending-PK batches** resolve with one sequential decode pass + + early exit; duplicate-key hash removal is no longer quadratic. +- **Production hardening** — `StorageEngineType.Auto` never silently selects PageBased (not yet + OLTP-ready); upgrade/downgrade policy documented with format-compat regression tests; a + pure-default-config benchmark arm (`--pk-default`) and a same-window interleaved A/B mode + (`--pk-ab`) now guard the numbers. +- Full report (incl. the 2.x-vs-1.9.x major steps): `docs/2.0.0.2_WHAT_CHANGED.md`. + ## What's New in 2.0.0.1 ### 🚀 Performance-first engine @@ -175,16 +189,16 @@ db.Flush(); // Persist to disk ## 📦 Installation ```bash -dotnet add package SharpCoreDB --version 2.0.0.1 +dotnet add package SharpCoreDB --version 2.0.0.2 ``` **Optional companion packages:** ```bash -dotnet add package SharpCoreDB.Functional --version 2.0.0.1 -dotnet add package SharpCoreDB.Functional.Dapper --version 2.0.0.1 -dotnet add package SharpCoreDB.Functional.EntityFrameworkCore --version 2.0.0.1 -dotnet add package SharpCoreDB.Graph.Advanced --version 2.0.0.1 +dotnet add package SharpCoreDB.Functional --version 2.0.0.2 +dotnet add package SharpCoreDB.Functional.Dapper --version 2.0.0.2 +dotnet add package SharpCoreDB.Functional.EntityFrameworkCore --version 2.0.0.2 +dotnet add package SharpCoreDB.Graph.Advanced --version 2.0.0.2 ``` ## 🔄 Upgrading from v1.9 @@ -212,7 +226,7 @@ We welcome contributions! Check the repository for contribution guidelines. --- -**Latest Version:** 2.0.0.1 (September 2026) +**Latest Version:** 2.0.0.2 (September 2026) **Target:** .NET 10 / C# 14 **Tests:** 1,700+ (100% passing) **Status:** ✅ Stable — performance-first v2.0.0 release diff --git a/src/SharpCoreDB/SharpCoreDB.csproj b/src/SharpCoreDB/SharpCoreDB.csproj index aaa2d21e..8c801da0 100644 --- a/src/SharpCoreDB/SharpCoreDB.csproj +++ b/src/SharpCoreDB/SharpCoreDB.csproj @@ -31,9 +31,9 @@ SharpCoreDB - 2.0.0.1 - 2.0.0.1 - 2.0.0.1 + 2.0.0.2 + 2.0.0.2 + 2.0.0.2 MPCoreDeveloper SharpCoreDB SharpCoreDB diff --git a/src/SharpCoreDB/build/SharpCoreDB.props b/src/SharpCoreDB/build/SharpCoreDB.props index f542dc33..0d0cf69b 100644 --- a/src/SharpCoreDB/build/SharpCoreDB.props +++ b/src/SharpCoreDB/build/SharpCoreDB.props @@ -2,6 +2,6 @@ - 2.0.0.1 + 2.0.0.2 diff --git a/tests/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj b/tests/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj index 9fad0dbb..b525f57f 100644 --- a/tests/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj +++ b/tests/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj @@ -33,7 +33,7 @@ Exe net10.0 - 2.0.0.1 + 2.0.0.2 14.0 enable enable diff --git a/tests/SharpCoreDB.CQRS.Tests/SharpCoreDB.CQRS.Tests.csproj b/tests/SharpCoreDB.CQRS.Tests/SharpCoreDB.CQRS.Tests.csproj index 416daa99..e57df706 100644 --- a/tests/SharpCoreDB.CQRS.Tests/SharpCoreDB.CQRS.Tests.csproj +++ b/tests/SharpCoreDB.CQRS.Tests/SharpCoreDB.CQRS.Tests.csproj @@ -8,7 +8,7 @@ Exe false true - 2.0.0.1 + 2.0.0.2 diff --git a/tests/SharpCoreDB.EntityFrameworkCore.Tests/SharpCoreDB.EntityFrameworkCore.Tests.csproj b/tests/SharpCoreDB.EntityFrameworkCore.Tests/SharpCoreDB.EntityFrameworkCore.Tests.csproj index d2d46dd8..f0f488cf 100644 --- a/tests/SharpCoreDB.EntityFrameworkCore.Tests/SharpCoreDB.EntityFrameworkCore.Tests.csproj +++ b/tests/SharpCoreDB.EntityFrameworkCore.Tests/SharpCoreDB.EntityFrameworkCore.Tests.csproj @@ -2,7 +2,7 @@ net10.0 - 2.0.0.1 + 2.0.0.2 14.0 enable enable diff --git a/tests/SharpCoreDB.EventSourcing.Tests/SharpCoreDB.EventSourcing.Tests.csproj b/tests/SharpCoreDB.EventSourcing.Tests/SharpCoreDB.EventSourcing.Tests.csproj index f84fecc6..0123011d 100644 --- a/tests/SharpCoreDB.EventSourcing.Tests/SharpCoreDB.EventSourcing.Tests.csproj +++ b/tests/SharpCoreDB.EventSourcing.Tests/SharpCoreDB.EventSourcing.Tests.csproj @@ -8,7 +8,7 @@ Exe false true - 2.0.0.1 + 2.0.0.2 diff --git a/tests/SharpCoreDB.Identity.Tests/SharpCoreDB.Identity.Tests.csproj b/tests/SharpCoreDB.Identity.Tests/SharpCoreDB.Identity.Tests.csproj index 7e359490..368e188d 100644 --- a/tests/SharpCoreDB.Identity.Tests/SharpCoreDB.Identity.Tests.csproj +++ b/tests/SharpCoreDB.Identity.Tests/SharpCoreDB.Identity.Tests.csproj @@ -2,7 +2,7 @@ net10.0 - 2.0.0.1 + 2.0.0.2 14.0 enable enable diff --git a/tests/SharpCoreDB.Profiling/SharpCoreDB.Profiling.csproj b/tests/SharpCoreDB.Profiling/SharpCoreDB.Profiling.csproj index 08237264..89c0fadd 100644 --- a/tests/SharpCoreDB.Profiling/SharpCoreDB.Profiling.csproj +++ b/tests/SharpCoreDB.Profiling/SharpCoreDB.Profiling.csproj @@ -8,7 +8,7 @@ true true true - 2.0.0.1 + 2.0.0.2 SharpCoreDB.Profiling MPCoreDeveloper SharpCoreDB diff --git a/tests/SharpCoreDB.Projections.Tests/SharpCoreDB.Projections.Tests.csproj b/tests/SharpCoreDB.Projections.Tests/SharpCoreDB.Projections.Tests.csproj index 84dd6119..7afda2ef 100644 --- a/tests/SharpCoreDB.Projections.Tests/SharpCoreDB.Projections.Tests.csproj +++ b/tests/SharpCoreDB.Projections.Tests/SharpCoreDB.Projections.Tests.csproj @@ -8,7 +8,7 @@ Exe false true - 2.0.0.1 + 2.0.0.2 diff --git a/tests/SharpCoreDB.Tests/SharpCoreDB.Tests.csproj b/tests/SharpCoreDB.Tests/SharpCoreDB.Tests.csproj index b9109712..6e375db1 100644 --- a/tests/SharpCoreDB.Tests/SharpCoreDB.Tests.csproj +++ b/tests/SharpCoreDB.Tests/SharpCoreDB.Tests.csproj @@ -2,7 +2,7 @@ net10.0 - 2.0.0.1 + 2.0.0.2 14.0 enable enable diff --git a/tests/benchmarks/QuickZvecTest/QuickZvecTest.csproj b/tests/benchmarks/QuickZvecTest/QuickZvecTest.csproj index d28bdf12..2ed3415e 100644 --- a/tests/benchmarks/QuickZvecTest/QuickZvecTest.csproj +++ b/tests/benchmarks/QuickZvecTest/QuickZvecTest.csproj @@ -6,13 +6,13 @@ 14.0 enable enable - 2.0.0.1 + 2.0.0.2 false QuickZvecTest MPCoreDeveloper Copyright (c) 2026 MPCoreDeveloper and GitHub Copilot. All rights reserved. - 2.0.0.1 - 2.0.0.1 + 2.0.0.2 + 2.0.0.2 diff --git a/tests/benchmarks/SharpCoreDB.Benchmarks.Comparative/SharpCoreDB.Benchmarks.Comparative.csproj b/tests/benchmarks/SharpCoreDB.Benchmarks.Comparative/SharpCoreDB.Benchmarks.Comparative.csproj index 7a71b602..ad15f85e 100644 --- a/tests/benchmarks/SharpCoreDB.Benchmarks.Comparative/SharpCoreDB.Benchmarks.Comparative.csproj +++ b/tests/benchmarks/SharpCoreDB.Benchmarks.Comparative/SharpCoreDB.Benchmarks.Comparative.csproj @@ -6,7 +6,7 @@ 14.0 enable enable - 2.0.0.1 + 2.0.0.2 false SharpCoreDB.Benchmarks.Comparative MPCoreDeveloper diff --git a/tests/benchmarks/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj b/tests/benchmarks/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj index a65c1233..c7bf3983 100644 --- a/tests/benchmarks/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj +++ b/tests/benchmarks/SharpCoreDB.Benchmarks/SharpCoreDB.Benchmarks.csproj @@ -6,14 +6,14 @@ 14.0 enable enable - 2.0.0.1 + 2.0.0.2 false false SharpCoreDB.Benchmarks MPCoreDeveloper Copyright (c) 2026 MPCoreDeveloper and GitHub Copilot. All rights reserved. - 2.0.0.1 - 2.0.0.1 + 2.0.0.2 + 2.0.0.2 diff --git a/tests/benchmarks/SharpCoreDB.CQRS.Benchmarks/SharpCoreDB.CQRS.Benchmarks.csproj b/tests/benchmarks/SharpCoreDB.CQRS.Benchmarks/SharpCoreDB.CQRS.Benchmarks.csproj index 52fde030..481e4788 100644 --- a/tests/benchmarks/SharpCoreDB.CQRS.Benchmarks/SharpCoreDB.CQRS.Benchmarks.csproj +++ b/tests/benchmarks/SharpCoreDB.CQRS.Benchmarks/SharpCoreDB.CQRS.Benchmarks.csproj @@ -9,7 +9,7 @@ false true true - 2.0.0.1 + 2.0.0.2 SharpCoreDB.CQRS.Benchmarks MPCoreDeveloper Copyright (c) 2026 MPCoreDeveloper and GitHub Copilot. All rights reserved. diff --git a/tools/SharpCoreDB.DebugBenchmark/SharpCoreDB.DebugBenchmark.csproj b/tools/SharpCoreDB.DebugBenchmark/SharpCoreDB.DebugBenchmark.csproj index d821a4ce..79974e87 100644 --- a/tools/SharpCoreDB.DebugBenchmark/SharpCoreDB.DebugBenchmark.csproj +++ b/tools/SharpCoreDB.DebugBenchmark/SharpCoreDB.DebugBenchmark.csproj @@ -7,7 +7,7 @@ enable 14.0 false - 2.0.0.1 + 2.0.0.2 SharpCoreDB.DebugBenchmark MPCoreDeveloper SharpCoreDB diff --git a/tools/SharpCoreDB.Demo/SharpCoreDB.Demo.csproj b/tools/SharpCoreDB.Demo/SharpCoreDB.Demo.csproj index 7aeb8a25..4e84b835 100644 --- a/tools/SharpCoreDB.Demo/SharpCoreDB.Demo.csproj +++ b/tools/SharpCoreDB.Demo/SharpCoreDB.Demo.csproj @@ -11,7 +11,7 @@ false - 2.0.0.1 + 2.0.0.2 SharpCoreDB.Demo MPCoreDeveloper SharpCoreDB