
# Skalering og grænser

storh er fillagerbaseret lagring, ikke en relationel forespørgselsmotor. De praktiske
grænser med referencetal fra [benchmarks](https://storh.inline0.dev/da/docs/benchmarks)
(50k poster, Apple M1 Pro):

- Direkte opslag er reelt ubegrænset, når filsystemet kan håndtere filantallet, og samlingen bruger UUID-haleopdeling. En direkte læsning tager
  få mikrosekunder; en holdbar skrivning af én post er begrænset af fsync med nogle få
tusinde pr. sekund.
- Scanninger af segmenterede logfiler, markørlæsninger og tidsintervalslæsninger fungerer fint
  op til omkring 1M poster, når segmentstørrelserne er konfigureret til arbejdsbelastningen.
  Masseindsættelser kører med titusinder af poster pr. sekund; gendannelse efter en afbrudt loghale
  afspiller hundredtusinder af poster pr. sekund ved genåbning.
- Køhandlinger føjer kompakte hændelser til én holdbar logfil, så køtilføjelse,
  hentning, fuldførelse, genindsættelse i køen og rydning undgår unødig
  mappeaktivitet med én fil pr. job.
  Massehentning og fuldførelse fordeler låsning og fsync over hele batches.
- Feltbaserede scanninger pr. fil i `DocStore` bliver langsommere efter cirka 10k poster, fordi
  hver matchende scanning skal gennemgå individuelle filer. Erklær
  [indekser](https://storh.inline0.dev/da/docs/indexes) for de felter, du filtrerer på; indekserede lighedsforespørgsler giver svar på cirka et
  millisekund uanset samlingens størrelse.
- storh er ikke beregnet til ad hoc-relationelle forespørgsler, joins, filtrering med mange sekundærindekser
  eller analytiske scanninger på tværs af mange felter. Flyt samlinger til et
  [SQL-spejl](https://storh.inline0.dev/da/docs/sql-mirror), når du har brug for disse læsemønstre; behold
  det autoritative datasæt i en rigtig database, når du har brug for transaktioner
  på tværs af flere poster.

Brug `DocStore`, når direkte læsninger dominerer, `SegmentedLog`, når tilføjelser og ordnede
læsninger dominerer, og `Queue` til enkel, holdbar arbejdsfordeling. Se
[Valg af motor](https://storh.inline0.dev/da/docs/engines#choosing-an-engine) for en sammenligning side om side.
