-
Notifications
You must be signed in to change notification settings - Fork 0
Open
Labels
phase/BetaBeta scopeBeta scope
Description
Problem
Query endpoints materialize full result sets in memory instead of streaming, increasing memory pressure and latency for large datasets.
Evidence (current behavior)
- OGC Features:
featureStore.QueryAsyncthenresult.Items→.ToArray()insrc/Honua.Server/Features/OgcFeatures/FeaturesEndpoints.cs:309andsrc/Honua.Server/Features/OgcFeatures/FeaturesEndpoints.cs:310. - FeatureServer:
QueryAsyncinsrc/Honua.Server/Features/FeatureServer/FeatureServerHandler.cs:1434and full formatting onresult.Itemsinsrc/Honua.Server/Features/FeatureServer/FeatureServerHandler.cs:219/src/Honua.Server/Features/FeatureServer/FeatureServerHandler.cs:227. - OData:
QueryAsyncthenqueryResult.Items.Select(...).ToArray()insrc/Honua.Server/Features/OData/ODataEndpoints.cs:398andsrc/Honua.Server/Features/OData/ODataEndpoints.cs:409. - Storage layer builds lists:
ExecuteSelectQueryAsyncaccumulatesList<Feature>insrc/Honua.Postgres/Features/FeatureStore/Services/FeatureDataAccess.cs:83.
Direction
- Use existing
IStreamingFeatureStore(src/Honua.Core/Features/FeatureStore/Abstractions/IStreamingFeatureStore.cs:11). - Stream features via
IAsyncEnumerable+DbDataReaderand serialize incrementally (e.g.,Utf8JsonWriterwriting arrays). - Keep count as a separate query or optional when
returnCountOnlyis false.
Tasks
- Add streaming response writers for FeatureServer / OGC / OData query endpoints.
- Wire endpoints to
IStreamingFeatureStorewhen available. - Ensure JSON/GML serialization supports incremental writing.
- Add tests covering large results and
returnIdsOnly/countpaths.
Acceptance criteria
- No full in‑memory materialization for large queries in core endpoints.
- Streaming path uses existing
IStreamingFeatureStoreand Postgres streaming methods.
Metadata
Metadata
Assignees
Labels
phase/BetaBeta scopeBeta scope