Schnellzugriff per Seek, FNV-1a-Hash, Dezimalrechnung für Summen und /act

search, seek, delete und update.rdb lesen bei -mh, -mi, -mr nur Indexeintrag
und Satz. Hashindizes (.h) müssen neu gebaut werden. total, mean, subtotal
und die /act-Befehle rechnen mit BigDecimal, gerundet wird halb auf.
This commit is contained in:
wkh
2026-10-30 09:54:05 +01:00
parent 75c2424307
commit 1c489f6994
10 changed files with 204 additions and 72 deletions
+5 -5
View File
@@ -74,14 +74,14 @@ Index ohne Entsprechung in der Suche offen.
## Verbesserungspotential
1. **Indexe sind nicht schnell.** Jede Suche liest Tabelle und Indexdatei
1. **Indexe sind nicht schnell. — Behoben** (Seek statt Volllesen, lazy `Data`). Ursprünglich: Jede Suche liest Tabelle und Indexdatei
komplett ([fast.rb:151](../lib/rdb/fast.rb), [fast.rb:171](../lib/rdb/fast.rb),
`Data.new` pro Schlüssel in `delete`/`update.rdb`): O(n) pro Schlüssel. Abhilfe:
mit `seek`/`pread` direkt an der Fixbreiten-Position lesen.
2. **Schlechte Hash-Funktion** ([fast.rb:68](../lib/rdb/fast.rb)):
2. **Schlechte Hash-Funktion — Behoben** (FNV-1a, größter Eimer 4). Ursprünglich: ([fast.rb:68](../lib/rdb/fast.rb)):
`bytes.sum % slots`. Bestätigt: 3000 fünfstellige Nummern landen in 30 Slots,
größter Bucket 223. Abhilfe: FNV-1a o. Ä., Primzahl-Slotzahl.
3. **Geld in `Float`** ([act.rb:11](../lib/rdb/cmd/act.rb), `to_f` im /act-Teil
3. **Geld in `Float` — Behoben** (`BigDecimal` in `total`/`mean`/`subtotal` und /act). Ursprünglich: ([act.rb:11](../lib/rdb/cmd/act.rb), `to_f` im /act-Teil
und in `total`). Abhilfe: `BigDecimal` oder ganzzahlige Rappen.
4. **awk-Brücke** ([env.rb:119-138](../lib/rdb/env.rb)): ganze Tabelle als String
durch `capture3`, kein Streaming; handgeschriebener Parser erkennt Strings und
@@ -98,5 +98,5 @@ Index ohne Entsprechung in der Suche offen.
## Empfohlene Reihenfolge
Schwachstellen und Fehler sind erledigt. Weiter mit: Hash-Funktion und
Index-Lesezugriffe (Verbesserung 1 und 2), dann Float-Geld.
Schwachstellen, Fehler und Verbesserung 1–3 sind erledigt. Offen sind 4–8: die
awk-Brücke, globale Methoden auf `Object`, doppelter Code, Testlaufzeit, Repo-Aufräumen.