
# Escalabilidade e limites

storh é um armazenamento que prioriza arquivos, não um mecanismo de consultas relacionais. Os limites práticos, com números de referência dos [benchmarks](https://storh.inline0.dev/pt/docs/benchmarks)
(50k registros, Apple M1 Pro):

- O acesso pontual é praticamente ilimitado quando o sistema de arquivos consegue lidar com a
  quantidade de arquivos e a coleção usa fragmentação pelas UUID últimas letras. Uma leitura pontual leva
  alguns microssegundos; as gravações duráveis de um único registro são limitadas por fsync, chegando a alguns
  milhares por segundo.
- Varreduras do log segmentado, leituras por cursor e leituras por intervalo de tempo funcionam bem
  até cerca de 1M de registros quando os tamanhos dos segmentos são configurados para a carga de trabalho.
  Inserções em lote chegam a dezenas de milhares de registros por segundo; a recuperação de finais incompletos
  reproduz centenas de milhares de registros por segundo na reabertura.
- As operações da fila acrescentam eventos compactos a um único log durável, então enfileirar,
  reivindicar, concluir, reenfileirar e limpar evitam a criação e remoção constante de arquivos por tarefa nos diretórios.
  Reivindicar e concluir em lote amortizam os custos de bloqueio e fsync em lotes inteiros.
- As varreduras de campos arquivo por arquivo em `DocStore` ficam lentas acima de cerca de 10k registros, pois
  cada varredura correspondente precisa percorrer arquivos individuais. Declare
  [índices](https://storh.inline0.dev/pt/docs/indexes) para os campos usados nos filtros; as consultas de igualdade indexadas
  respondem em cerca de um milissegundo, independentemente do tamanho da coleção.
- storh não serve para consultas relacionais ad hoc, junções, filtros intensivos em índices secundários
  ou varreduras analíticas em muitos campos. Envie as coleções para um espelho [SQL](https://storh.inline0.dev/pt/docs/sql-mirror) quando precisar desses padrões de leitura; mantenha o sistema de registro em um banco de dados real quando precisar de transações com vários registros.

Use `DocStore` quando predominarem as leituras pontuais, `SegmentedLog` quando predominarem as inserções e leituras ordenadas e `Queue` para distribuição simples de tarefas duráveis. Consulte
[Como escolher um mecanismo](https://storh.inline0.dev/pt/docs/engines#choosing-an-engine) para uma comparação lado a lado.
