
# 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](https://storh.inline0.dev/it/docs/benchmarks)
(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 `DocStore` rallentano oltre circa 10k record perché ogni scansione corrispondente deve esaminare singoli file. Dichiarate gli [indici](https://storh.inline0.dev/it/docs/indexes) 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](https://storh.inline0.dev/it/docs/sql-mirror) 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](https://storh.inline0.dev/it/docs/engines#choosing-an-engine) per un confronto fianco a fianco.
