
# Schalen en limieten

storh is opslag waarbij bestanden centraal staan, geen relationele query-engine. De praktische grenzen, met referentiecijfers uit de [benchmarks](https://storh.inline0.dev/nl/docs/benchmarks) (50k records, Apple M1 Pro):

- Puntgewijze toegang is in de praktijk onbeperkt zolang het bestandssysteem het aantal bestanden aankan en de collectie sharding op basis van de laatste UUID tekens gebruikt. Een puntgewijze read duurt enkele microseconden; een duurzame schrijfopdracht voor één record is beperkt door fsync en haalt enkele duizenden per seconde.
- Scans in gesegmenteerde logs, cursorreads en reads binnen een tijdsbereik blijven goed bruikbaar tot ongeveer 1M records, mits de segmentgrootte op de workload is afgestemd. Bulkopdrachten om records toe te voegen halen tienduizenden per seconde; bij herstel van een afgebroken staartstuk worden bij het opnieuw openen honderdduizenden records per seconde opnieuw verwerkt.
- Wachtrijbewerkingen voegen compacte gebeurtenissen toe aan één duurzaam log. Daardoor voorkomen enqueue, claim, complete, requeue en purge de overhead van steeds nieuwe mappen met één bestand per taak. Bulkopdrachten om taken te claimen en voltooien spreiden locks en fsync over volledige batches.
- Scans van velden per bestand in `DocStore` worden traag vanaf ongeveer 10k records, omdat elke overeenkomende scan afzonderlijke bestanden moet doorlopen. Definieer [indexen](https://storh.inline0.dev/nl/docs/indexes) voor de velden waarop u filtert; geïndexeerde gelijkheidsqueries worden in ongeveer een milliseconde beantwoord, ongeacht de collectiegrootte.
- storh is niet bedoeld voor ad-hoc relationele queries, joins, filtering met veel secundaire indexen of analytische scans over veel velden. Verplaats collecties naar een [SQL-mirror](https://storh.inline0.dev/nl/docs/sql-mirror) wanneer u die leespatronen nodig hebt; houd het systeem van registratie in een echte database wanneer u transacties over meerdere records nodig hebt.

Gebruik `DocStore` wanneer puntgewijze reads overheersen, `SegmentedLog` wanneer toevoegen en geordend lezen overheersen, en `Queue` voor eenvoudige duurzame taakverdeling. Bekijk [Een engine kiezen](https://storh.inline0.dev/nl/docs/engines#choosing-an-engine) voor een vergelijking naast elkaar.
