Extract product-agnostic workflow engine from Ablera.Serdica.Workflow into standalone StellaOps.Workflow.* libraries targeting net10.0. Libraries (14): - Contracts, Abstractions (compiler, decompiler, expression runtime) - Engine (execution, signaling, scheduling, projections, hosted services) - ElkSharp (generic graph layout algorithm) - Renderer.ElkSharp, Renderer.ElkJs, Renderer.Msagl, Renderer.Svg - Signaling.Redis, Signaling.OracleAq - DataStore.MongoDB, DataStore.PostgreSQL, DataStore.Oracle WebService: ASP.NET Core Minimal API with 22 endpoints Tests (8 projects, 109 tests pass): - Engine.Tests (105 pass), WebService.Tests (4 E2E pass) - Renderer.Tests, DataStore.MongoDB/Oracle/PostgreSQL.Tests - Signaling.Redis.Tests, IntegrationTests.Shared Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
126 lines
3.5 KiB
JSON
126 lines
3.5 KiB
JSON
{
|
|
"date": "2026-03-17",
|
|
"type": "backend-comparison",
|
|
"status": "baseline-decision-pack",
|
|
"sources": {
|
|
"oracle": "10-oracle-performance-baseline-2026-03-17.json",
|
|
"postgres": "11-postgres-performance-baseline-2026-03-17.json",
|
|
"mongo": "12-mongo-performance-baseline-2026-03-17.json"
|
|
},
|
|
"validation": {
|
|
"integrationBuild": {
|
|
"warnings": 0,
|
|
"errors": 0
|
|
},
|
|
"oraclePerformanceSuite": "12/12",
|
|
"postgresPerformanceSuite": "11/11",
|
|
"mongoPerformanceSuite": "14/14",
|
|
"postgresBackendParitySuite": "9/9",
|
|
"mongoBackendParitySuite": "23/23"
|
|
},
|
|
"normalizedMetrics": {
|
|
"signalRoundTrip": {
|
|
"oracle": {
|
|
"serialLatencyAvgMs": 3104.85,
|
|
"serialLatencyP95Ms": 3165.04,
|
|
"throughputOpsPerSecond": 20.98,
|
|
"throughputAvgMs": 4142.13,
|
|
"throughputP95Ms": 4215.64,
|
|
"soakOpsPerSecond": 3.91,
|
|
"soakAvgMs": 4494.29,
|
|
"soakP95Ms": 5589.33
|
|
},
|
|
"postgres": {
|
|
"serialLatencyAvgMs": 3079.33,
|
|
"serialLatencyP95Ms": 3094.94,
|
|
"throughputOpsPerSecond": 25.74,
|
|
"throughputAvgMs": 3603.54,
|
|
"throughputP95Ms": 3635.59,
|
|
"soakOpsPerSecond": 4.30,
|
|
"soakAvgMs": 4164.52,
|
|
"soakP95Ms": 4208.42
|
|
},
|
|
"mongo": {
|
|
"serialLatencyAvgMs": 97.88,
|
|
"serialLatencyP95Ms": 149.20,
|
|
"throughputOpsPerSecond": 76.28,
|
|
"throughputAvgMs": 1110.94,
|
|
"throughputP95Ms": 1121.22,
|
|
"soakOpsPerSecond": 47.62,
|
|
"soakAvgMs": 322.40,
|
|
"soakP95Ms": 550.50
|
|
}
|
|
},
|
|
"capacity": {
|
|
"c1": {
|
|
"oracle": 3.37,
|
|
"postgres": 4.11,
|
|
"mongo": 7.08
|
|
},
|
|
"c4": {
|
|
"oracle": 15.22,
|
|
"postgres": 17.29,
|
|
"mongo": 38.35
|
|
},
|
|
"c8": {
|
|
"oracle": 21.34,
|
|
"postgres": 33.21,
|
|
"mongo": 66.04
|
|
},
|
|
"c16": {
|
|
"oracle": 34.03,
|
|
"postgres": 57.04,
|
|
"mongo": 68.65
|
|
}
|
|
},
|
|
"transport": {
|
|
"immediateBurstNightlyOpsPerSecond": {
|
|
"oracle": 50.18,
|
|
"postgres": 70.10,
|
|
"mongo": 46.18
|
|
},
|
|
"delayedBurstNightlyOpsPerSecond": {
|
|
"oracle": 10.71,
|
|
"postgres": 19.60,
|
|
"mongo": 16.66
|
|
}
|
|
},
|
|
"bulstrad": {
|
|
"quoteOrAplCancelSmokeOpsPerSecond": {
|
|
"oracle": 19.69,
|
|
"postgres": 59.88,
|
|
"mongo": 23.48
|
|
},
|
|
"quotationConfirmConvertToPolicyNightlyOpsPerSecond": {
|
|
"oracle": 1.77,
|
|
"postgres": 3.33,
|
|
"mongo": 10.83
|
|
}
|
|
}
|
|
},
|
|
"backendObservations": {
|
|
"oracle": {
|
|
"dominantWait": "log file sync",
|
|
"strength": "highest validation maturity",
|
|
"primaryPressure": "commit pressure"
|
|
},
|
|
"postgres": {
|
|
"dominantWait": "Client:ClientRead",
|
|
"strength": "best relational performance profile",
|
|
"primaryPressure": "queue claim and wake cadence"
|
|
},
|
|
"mongo": {
|
|
"dominantWait": "none-stable",
|
|
"strength": "fastest measured synthetic throughput",
|
|
"primaryPressure": "latency expansion from c8 to c16 and operational dependence on transactions plus change streams"
|
|
}
|
|
},
|
|
"recommendation": {
|
|
"currentPortabilityChoice": "PostgreSQL",
|
|
"reason": "best performance-to-operability compromise with a relational model and competitive backend-native validation",
|
|
"fastestMeasuredBackend": "MongoDB",
|
|
"highestValidationMaturity": "Oracle",
|
|
"caveat": "this is a baseline-level decision pack; Oracle still has the broadest hostile-condition and Bulstrad hardening surface"
|
|
}
|
|
}
|