Skalierung und Grenzen
storh ist dateibasierter Speicher, keine relationale Abfrage-Engine. Die praktischen Grenzen und Vergleichswerte aus den Benchmarks (50.000 Datensätze, Apple M1 Pro):
- Gezielter Zugriff ist praktisch unbegrenzt, sofern das Dateisystem die Anzahl der Dateien bewältigen kann und die Sammlung UUID-Sharding nach ID-Endzeichen verwendet. Ein gezielter Lesezugriff dauert wenige Mikrosekunden; einzelne dauerhafte Schreibvorgänge werden durch fsync auf wenige tausend pro Sekunde begrenzt.
- Scans des segmentierten Protokolls, Cursor-Lesevorgänge und Zeitbereichsabfragen funktionieren auch bei rund 1 Mio. Datensätzen noch gut, sofern die Segmentgrößen zur Arbeitslast passen. Massenweises Anhängen erreicht Zehntausende Datensätze pro Sekunde; die Wiederherstellung unvollständiger Dateiende spielt beim erneuten Öffnen Hunderttausende Datensätze pro Sekunde erneut ein.
- Warteschlangenvorgänge hängen kompakte Ereignisse an ein einziges dauerhaftes Protokoll an. Einreihen, Beanspruchen, Abschließen, erneutes Einreihen und Löschen vermeiden dadurch den Aufwand für ein Verzeichnis mit einer Datei pro Aufgabe. Beim gebündelten Beanspruchen und Abschließen verteilen sich Sperren und fsync auf ganze Stapel.
- Scans einzelner Dateien in
DocStorewerden ab etwa 10.000 Datensätzen langsamer, da jeder passende Scan einzelne Dateien durchlaufen muss. Lege Indizes für die Felder an, nach denen du filterst. Indizierte Gleichheitsabfragen dauern unabhängig von der Sammlungsgröße etwa eine Millisekunde. - storh eignet sich nicht für spontane relationale Abfragen, Verknüpfungen, Filter mit vielen Sekundärindizes oder analytische Scans über viele Felder. Übertrage Sammlungen in einen SQL-Spiegel, wenn du solche Lesezugriffe brauchst. Nutze eine echte Datenbank als führendes System, wenn du Transaktionen über mehrere Datensätze benötigst.
Verwende DocStore, wenn gezielte Lesezugriffe im Vordergrund stehen, SegmentedLog bei vielen Anhängevorgängen und sortierten Lesezugriffen und Queue für einfache, dauerhaft gespeicherte Aufgabenverteilung. Unter Eine Engine auswählen findest du einen direkten Vergleich.