-
Notifications
You must be signed in to change notification settings - Fork 0
2025 11 11 temporal aggregation
Stand: 5. Dezember 2025
Version: 1.0.0
Kategorie: Release Notes
Datum: 11. November 2025 Autor: Entwickler-Repository-Commit
Dieses Release ergänzt die temporalen Abfragefunktionen der ThemisDB um serverseitige Aggregationen über Zeitfenster. Neu ist die API aggregateEdgePropertyInTimeRange in GraphIndexManager, die es erlaubt, numerische Kanten-Eigenschaften (z. B. cost, _weight) über eine Menge von Kanten zusammenzufassen (COUNT, SUM, AVG, MIN, MAX). Zusätzlich wurden Tests und Dokumentation ergänzt sowie kleinere Robustheitsfixes am Key-Leseverhalten implementiert.
Status: Produktiv bereit (Lokale Tests: Build + Unit-Tests erfolgreich)
- API:
GraphIndexManager::aggregateEdgePropertyInTimeRange(...)- Aggregationstypen: COUNT, SUM, AVG, MIN, MAX
- Zeitfenster-Parameter:
range_start_ms,range_end_ms - Optional:
require_full_containment(nur vollständig enthaltene Kanten) undedge_type(Filter auf_type)
- Unit-Tests:
tests/test_temporal_aggregation_property.cpp(4 Tests) - Dokumentation:
docs/temporal_time_range_queries.mderweitert, neue Release-Notes - Robustheit: Lesepfade für Edge-Entitäten wurden gehärtet (Versuch, sowohl
edge:<graphId>:<edgeId>als auchedge:<edgeId>zu lesen)
Signatur:
std::pair<GraphIndexManager::Status, GraphIndexManager::TemporalAggregationResult>
aggregateEdgePropertyInTimeRange(
std::string_view property,
GraphIndexManager::Aggregation agg,
int64_t range_start_ms,
int64_t range_end_ms,
bool require_full_containment = false,
std::optional<std::string_view> edge_type = std::nullopt
) const;Rückgabe: TemporalAggregationResult { size_t count; double value; } —
- Für
COUNTistcountdie Anzahl der passenden Kanten (value wird 0 setzen). - Für
SUM/AVG/MIN/MAXistcountdie Anzahl der Kanten mit numerischem Property,valuedas berechnete Aggregat.
Beispiel (C++):
auto [st, res] = graph.aggregateEdgePropertyInTimeRange(
"cost",
GraphIndexManager::Aggregation::SUM,
1000, 2000,
false,
std::string_view("A")
);
if (st.ok) {
std::cout << "count=" << res.count << " sum=" << res.value << "\n";
}- Die Implementierung scannt die Adjazenz-Indices (
graph:out:) und lädt pro gefundenem Edge die zugehörige Edge-Entity, umvalid_from/valid_tound das numerische Property zu prüfen. - Aus Kompatibilitätsgründen wird beim Laden der Entity zuerst der Key
edge:<graphId>:<edgeId>versucht; falls nicht vorhanden, wirdedge:<edgeId>als Fallback gelesen. Dies behebt Inkonsistenzen zwischen älteren und neueren Key-Formaten. - Performance: Der globale Scan ist O(E) (E = Anzahl aller Kanten). Für High-Scale-Szenarien sind in zukünftigen Releases temporale Indizes oder ein Iterator/Streaming-API geplant.
Neu hinzugefügte Tests:
-
tests/test_temporal_aggregation_property.cpp- Testfälle: SUM/AVG/MIN/MAX ohne Type, COUNT aller Kanten, Type-Filter (A), nonexistent property
Empfohlener lokaler Ablauf zum Verifizieren:
# Build (PowerShell)
.\build.ps1
# Run focused tests
.\build\Release\themis_tests.exe --gtest_filter=TemporalAggregationProperty*
In meiner Testausführung (Windows / MSVC) waren alle 4 Tests erfolgreich (PASS).
- src/index/graph_index.cpp —
- Implementierung von
aggregateEdgePropertyInTimeRange - Fallback-Lesen von Edge-Entities
- Anpassungen an
getEdgeType_()undgetEdgeWeight_()(robustes Lesen beider Key-Formate)
- Implementierung von
- tests/test_temporal_aggregation_property.cpp — Neue Unit-Tests
- CMakeLists.txt — Test-Registrierung (Hinzufügen der neuen Testdatei)
- docs/temporal_time_range_queries.md — Doku erweitert (API + Beispiele + Changelog)
- README.md — Kurzhinweis in "Recent changes"
- Die API ist rückwärtskompatibel; bestehende Codepfade, die Edges unter
edge:<edgeId>ablegen, funktionieren weiterhin. - Der Key-Fallback macht die Funktion tolerant gegenüber Mix aus alten und neuen Key-Formaten.
- Falls du in deinem Deployment ausschließlich das Format
edge:<graphId>:<edgeId>verwenden willst, ist keine Aktion nötig. Umgekehrt sind keine Migrationsschritte erforderlich.
- Wenn du häufig globale Zeitfenster-Aggregationen ausführst, plane eine temporale Indexstruktur (B-Tree o.ä.), um O(E)-Scans zu vermeiden.
- Füge ein Streaming/Iterator-API hinzu, wenn Result-Sets sehr groß werden. Das reduziert Speicherbedarf auf der Serverseite.
- Überlege, ob Edge-Entities zentral ein Key-Format vereinheitlicht werden sollen (z. B. per Migrations-Tool). Der Fallback ist robust, aber ein einheitliches Format reduziert Missverständnisse.
Wenn du möchtest, erstelle ich daraus einen Git-Branch + PR-Text (Titel + beschreibende Commit-Message) und bereite die Änderungen für Review vor. Soll ich das erledigen?
ThemisDB v1.3.4 | GitHub | Documentation | Discussions | License
Last synced: January 02, 2026 | Commit: 6add659
Version: 1.3.0 | Stand: Dezember 2025
- Übersicht
- Home
- Dokumentations-Index
- Quick Reference
- Sachstandsbericht 2025
- Features
- Roadmap
- Ecosystem Overview
- Strategische Übersicht
- Geo/Relational Storage
- RocksDB Storage
- MVCC Design
- Transaktionen
- Time-Series
- Memory Tuning
- Chain of Thought Storage
- Query Engine & AQL
- AQL Syntax
- Explain & Profile
- Rekursive Pfadabfragen
- Temporale Graphen
- Zeitbereichs-Abfragen
- Semantischer Cache
- Hybrid Queries (Phase 1.5)
- AQL Hybrid Queries
- Hybrid Queries README
- Hybrid Query Benchmarks
- Subquery Quick Reference
- Subquery Implementation
- Content Pipeline
- Architektur-Details
- Ingestion
- JSON Ingestion Spec
- Enterprise Ingestion Interface
- Geo-Processor Design
- Image-Processor Design
- Hybrid Search Design
- Fulltext API
- Hybrid Fusion API
- Stemming
- Performance Tuning
- Migration Guide
- Future Work
- Pagination Benchmarks
- Enterprise README
- Scalability Features
- HTTP Client Pool
- Build Guide
- Implementation Status
- Final Report
- Integration Analysis
- Enterprise Strategy
- Verschlüsselungsstrategie
- Verschlüsselungsdeployment
- Spaltenverschlüsselung
- Encryption Next Steps
- Multi-Party Encryption
- Key Rotation Strategy
- Security Encryption Gap Analysis
- Audit Logging
- Audit & Retention
- Compliance Audit
- Compliance
- Extended Compliance Features
- Governance-Strategie
- Compliance-Integration
- Governance Usage
- Security/Compliance Review
- Threat Model
- Security Hardening Guide
- Security Audit Checklist
- Security Audit Report
- Security Implementation
- Development README
- Code Quality Pipeline
- Developers Guide
- Cost Models
- Todo Liste
- Tool Todo
- Core Feature Todo
- Priorities
- Implementation Status
- Roadmap
- Future Work
- Next Steps Analysis
- AQL LET Implementation
- Development Audit
- Sprint Summary (2025-11-17)
- WAL Archiving
- Search Gap Analysis
- Source Documentation Plan
- Changefeed README
- Changefeed CMake Patch
- Changefeed OpenAPI
- Changefeed OpenAPI Auth
- Changefeed SSE Examples
- Changefeed Test Harness
- Changefeed Tests
- Dokumentations-Inventar
- Documentation Summary
- Documentation TODO
- Documentation Gap Analysis
- Documentation Consolidation
- Documentation Final Status
- Documentation Phase 3
- Documentation Cleanup Validation
- API
- Authentication
- Cache
- CDC
- Content
- Geo
- Governance
- Index
- LLM
- Query
- Security
- Server
- Storage
- Time Series
- Transaction
- Utils
Vollständige Dokumentation: https://makr-code.github.io/ThemisDB/