perf(redis): sort key tree names without lower-casing on every comparison
Maintainer antworten meist innerhalb von 1 Tag
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 76/100
- Issue-Typ
- Bug
- Klarheit
- Klar beschrieben
- Aktivitätsstatus
- Aktiv
- Bereich
- backend, performance
Rechercherichtung
Beginne mit RedisKeyTreeEngine.buildTree in lib/features/redis/redis_key_tree_engine.dart und den vorhandenen Tests für RedisKeyTreeEngine. Prüfe, wie Wurzelblätter, Ordnernamen und Ordnerblätter sortiert werden, und füge dann einen Test mit gemischter Groß- und Kleinschreibung hinzu, der Namen enthält, die sich bei ignorierter Groß- und Kleinschreibung gleichen. Fertig ist die Aufgabe, wenn die Tests bestehen, das vorhandene Verhalten bei Gleichständen erhalten bleibt und kein Comparator in dieser Datei toLowerCase() aufruft.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Problem
RedisKeyTreeEngine.buildTree (lib/features/redis/redis_key_tree_engine.dart) sorts root leaves, folder names and each folder's leaves with
..sort((a, b) => a.name.toLowerCase().compareTo(b.name.toLowerCase()))
so toLowerCase() runs twice per comparison, i.e. O(n log n) string allocations for an O(n) amount of information. A single folder with tens of thousands of keys (the common case for session:* / cache:*) pays for it when the tree is built.
Measurements
Standalone Dart AOT, names like Cache_123456789_Key:
| Names | toLowerCase() per compare |
Decorated (lowercase once, sort pairs) |
|---|---|---|
| 5,000 | 3.2 ms | 1.5 ms |
| 50,000 | 47.5 ms | 24.7 ms |
About 2x. Not per-frame work, but it is a one-off pause of ~50 ms on a big keyspace that also happens on every refresh.
Solution
- Sort decorated pairs
(lower, node)(or precomputelowerNameon the node) so the lowercase string is created once per element. - Same ordering as today (case-insensitive compare of the label); keep the existing tie-break behaviour.
Acceptance
-
RedisKeyTreeEnginetests unchanged and green; add a case with mixed-case and equal-ignoring-case names to pin the order. - No
toLowerCase()inside a comparator in that file. - Optional: same pattern checked in other comparators (
grep -rn "toLowerCase().compareTo"inlib/).
- Vorherrschende Sprache
- Dart
- Sterne
- 23
- Forks
- 1
- Ø Merge
- 45 Min.
- Gemergte PRs (30 T.)
- 529
Entwicklungsumgebung
Startet den Dev-Container des Projekts im Browser, mit Ihrem eigenen GitHub-Konto.
- Kein Dockerfile und keine Docker-Compose-Datei
- Hat eine Pull-Request-Vorlage
- Beitragsleitfaden lesen
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus QueryaHub/Querya-Desktop
-
bug P3 ux
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 79/100
QueryaHub/Querya-Desktop#1837 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug mysql P3
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 76/100
QueryaHub/Querya-Desktop#1823 ·
Maintainer antworten meist innerhalb von 1 Tag
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
QueryaHub/Querya-Desktop#1777 ·
Maintainer antworten meist innerhalb von 1 Tag
-
enhancement ui
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
QueryaHub/Querya-Desktop#1689 ·
Maintainer antworten meist innerhalb von 1 Tag
-
ui(dialogs): make destructive query and DML preview dialogs adaptive and prevent table name overflowOffenbug frontend
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
QueryaHub/Querya-Desktop#1642 ·
Maintainer antworten meist innerhalb von 1 Tag
Alle Issues in QueryaHub/Querya-Desktop
Ähnliche Issues
-
direct-code
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 78/100
aaronified/fluenough#849 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
PATILYASHH/XPENC#179 · 1 Kommentar ·
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
AppFlowy-IO/AppFlowy#9094 ·
-
A 24-hour `FTimeField` input rejects hour `0`, so midnight (`00:xx`) can't be typedEvtl. vergeben @wanjinhao1 hat das heute übernommen. Offendifficulty: easy duration: small Good First Issue priority: medium type: bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 82/100
duobaseio/forui#1230 · 2 Kommentare ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 63/100
silica-os/calculator#8 ·