perf: optimize CI/release caching and catalog, views, NextUp, Latest & search queries #5

Merged
Wuast94 merged 5 commits from perf/nextgen-catalog-and-ci into main 2026-10-19 04:31:36 +02:00
Owner

Zusammenfassung

Dieser PR setzt die vollständige CI/Release- und Katalog-/Such-/Datenbank-Performance-Optimierung aus docs/architecture-and-performance-analysis.md in 5 logisch getrennten Commits um:

  1. docs: add architecture, CI/release and catalog performance analysis (bfaa03a)
    • Vollständige Root-Cause-Analyse und Messwerte für den CI/Release-Build sowie die Startseiten-, Views-, NextUp-, Latest- und Such-Endpunkte in docs/architecture-and-performance-analysis.md.
  2. perf(build): enable thin LTO, normalize archive mtimes and share Harbor BuildKit cache (a8a949d)
    • lto = "thin" und codegen-units = 8 im [profile.release] statt monolithischem Fat-LTO (codegen-units = 1).
    • Neues Skript scripts/normalize-source-timestamps.sh setzt Dateizeitstempel deterministisch vor Test- und Image-Builds zurück, damit tar.gz-Checkouts in Forgejo keine unnötigen Recompiles auslösen.
    • Gemeinsamer Harbor-BuildKit-Registry-Cache (harbor.wuastbude.de/rustfin/rustfin:buildcache) zwischen PR-docker-build und release.yaml.
  3. perf(catalog): optimize item selection trees, Latest TV and Views summaries (9628873)
    • Eliminiert redundante selection_tree-CTEs und Index-blockierende OR-Prädikate bei Library-Roots und Ordner-Scopes in item_selection.
    • Ersetzt die korrelierte O(N^2)-Subquery in latest_tv.rs durch deduplizierte latest_tv_parents + DISTINCT ON (latest_tv_series) + LEFT JOIN.
    • Verhindert bei /Views und /UserViews das Laden aller ~20.000 MusicArtist-Einträge aus named_items sowie unnötige Episoden-Subtree-Scans bei nicht-rekursiven Folder-Summaries.
  4. perf(shows): use projected query metadata and scope NextUp discovery (a1f2e11)
    • Verschiebt Video3DFormat, VideoType und IsoType in PredicateSourceName, sodass read_scoped in shows/catalog.rs die 80-Byte-Spalte query_metadata statt des ~96 MB großen metadata-JSONB-TOAST-Felds liest.
    • NextUp bricht bei leerer Wiedergabehistorie sofort ab, übergibt nextUpDateCutoff bereits an die SQL-Serienermittlung (started_series) und liest in video_versions/groups.rs zuerst die schlanken Versionskanten-Tabellen statt alle media_items vorab zu scannen.
  5. perf(search): reuse matched named IDs and avoid duplicate candidate scans (35380f9)
    • Wertet matching_ids(Catalog::Named) pro Suche nur noch einmal statt 4× über alle 65.586 named_items aus und nutzt die gefundenen named_ids direkt für item_named_relations, artist_presentations und search_named_metadata.
    • Überspringt leere composition_ids-/accepted_ids-Abfragen ohne Datenbank-Roundtrip.

Verifikation

  • just gate (architecture, fmt-check, clippy, test inkl. schema-check, deny, machete) vollständig grün durchgelaufen.
  • node --test scripts/docker-build.test.mjs grün.
## Zusammenfassung Dieser PR setzt die vollständige CI/Release- und Katalog-/Such-/Datenbank-Performance-Optimierung aus `docs/architecture-and-performance-analysis.md` in 5 logisch getrennten Commits um: 1. **`docs: add architecture, CI/release and catalog performance analysis` (`bfaa03a`)** - Vollständige Root-Cause-Analyse und Messwerte für den CI/Release-Build sowie die Startseiten-, Views-, NextUp-, Latest- und Such-Endpunkte in `docs/architecture-and-performance-analysis.md`. 2. **`perf(build): enable thin LTO, normalize archive mtimes and share Harbor BuildKit cache` (`a8a949d`)** - `lto = "thin"` und `codegen-units = 8` im `[profile.release]` statt monolithischem Fat-LTO (`codegen-units = 1`). - Neues Skript `scripts/normalize-source-timestamps.sh` setzt Dateizeitstempel deterministisch vor Test- und Image-Builds zurück, damit `tar.gz`-Checkouts in Forgejo keine unnötigen Recompiles auslösen. - Gemeinsamer Harbor-BuildKit-Registry-Cache (`harbor.wuastbude.de/rustfin/rustfin:buildcache`) zwischen PR-`docker-build` und `release.yaml`. 3. **`perf(catalog): optimize item selection trees, Latest TV and Views summaries` (`9628873`)** - Eliminiert redundante `selection_tree`-CTEs und Index-blockierende `OR`-Prädikate bei Library-Roots und Ordner-Scopes in `item_selection`. - Ersetzt die korrelierte `O(N^2)`-Subquery in `latest_tv.rs` durch deduplizierte `latest_tv_parents` + `DISTINCT ON` (`latest_tv_series`) + `LEFT JOIN`. - Verhindert bei `/Views` und `/UserViews` das Laden aller ~20.000 `MusicArtist`-Einträge aus `named_items` sowie unnötige Episoden-Subtree-Scans bei nicht-rekursiven Folder-Summaries. 4. **`perf(shows): use projected query metadata and scope NextUp discovery` (`a1f2e11`)** - Verschiebt `Video3DFormat`, `VideoType` und `IsoType` in `PredicateSourceName`, sodass `read_scoped` in `shows/catalog.rs` die 80-Byte-Spalte `query_metadata` statt des ~96 MB großen `metadata`-JSONB-TOAST-Felds liest. - `NextUp` bricht bei leerer Wiedergabehistorie sofort ab, übergibt `nextUpDateCutoff` bereits an die SQL-Serienermittlung (`started_series`) und liest in `video_versions/groups.rs` zuerst die schlanken Versionskanten-Tabellen statt alle `media_items` vorab zu scannen. 5. **`perf(search): reuse matched named IDs and avoid duplicate candidate scans` (`35380f9`)** - Wertet `matching_ids(Catalog::Named)` pro Suche nur noch **einmal** statt 4× über alle 65.586 `named_items` aus und nutzt die gefundenen `named_ids` direkt für `item_named_relations`, `artist_presentations` und `search_named_metadata`. - Überspringt leere `composition_ids`-/`accepted_ids`-Abfragen ohne Datenbank-Roundtrip. ## Verifikation - `just gate` (`architecture`, `fmt-check`, `clippy`, `test` inkl. `schema-check`, `deny`, `machete`) vollständig grün durchgelaufen. - `node --test scripts/docker-build.test.mjs` grün.
Wuast94 deleted branch perf/nextgen-catalog-and-ci 2026-10-19 04:31:38 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
Wuast94/rustfin!5
No description provided.