Scalabilità e limiti
storh è un sistema di archiviazione basato prima di tutto sui file, non un motore di query relazionali. Limiti pratici, con valori di riferimento dai benchmark (50k record, Apple M1 Pro):
- L'accesso puntuale è di fatto illimitato quando il filesystem può gestire il numero di file e la raccolta usa partizioni basate sugli ultimi UUID caratteri. Una lettura puntuale richiede pochi microsecondi; una scrittura persistente di un singolo record è limitata da fsync, a qualche migliaio al secondo.
- Le scansioni del log segmentato, le letture tramite cursore e quelle per intervallo temporale gestiscono comodamente circa 1M record, se le dimensioni dei segmenti sono configurate per il carico di lavoro. Le aggiunte in blocco raggiungono decine di migliaia di record al secondo; al riavvio, il recupero delle code troncate rielabora centinaia di migliaia di record al secondo.
- Le operazioni sulla coda aggiungono eventi compatti a un unico log persistente; accodamento, richiesta, completamento, riaccodamento e svuotamento evitano così la proliferazione di un file per ogni processo nelle directory. Le richieste e i completamenti in blocco ammortizzano lock e fsync su interi batch.
- Le scansioni dei campi file per file in
DocStorerallentano oltre circa 10k record perché ogni scansione corrispondente deve esaminare singoli file. Dichiarate gli indici per i campi su cui applicate filtri; le query di uguaglianza indicizzate rispondono in circa un millisecondo, indipendentemente dalle dimensioni della raccolta. - storh non è adatto a query relazionali ad hoc, join, filtri basati su molti indici secondari o scansioni analitiche su molti campi. Inviate le raccolte a un mirror SQL quando servono questi modelli di lettura; mantenete il sistema di riferimento in un vero database quando servono transazioni su più record.
Usate DocStore quando prevalgono le letture puntuali, SegmentedLog quando prevalgono le aggiunte e le letture ordinate e Queue per una semplice distribuzione persistente del lavoro. Consultate Come scegliere un motore per un confronto fianco a fianco.