
# Skalowanie i limity

storh to magazyn oparty na plikach, a nie relacyjny silnik zapytań. Praktyczne ograniczenia, wraz z danymi liczbowymi z [testów wydajności](https://storh.inline0.dev/pl/docs/benchmarks) (50k rekordów, Apple M1 Pro):

- Dostęp punktowy jest praktycznie nieograniczony, jeśli system plików obsługuje daną liczbę
  plików, a kolekcja korzysta z partycjonowania według końcówki identyfikatora UUID. Odczyt punktowy trwa
  kilka mikrosekund; trwały zapis pojedynczego rekordu jest ograniczony przez fsync do kilku
  tysięcy operacji na sekundę.
- Skanowanie dziennika segmentowego, odczyty z kursorem i odczyty zakresów czasu sprawdzają się
  przy około 1M rekordów, jeśli rozmiary segmentów są dostosowane do obciążenia.
  Zbiorcze dopisywanie obsługuje dziesiątki tysięcy rekordów na sekundę; odzyskiwanie po
  niekompletnej końcówce odtwarza setki tysięcy rekordów na sekundę przy ponownym otwarciu.
- Operacje kolejkowe dopisują zwarte zdarzenia do jednego trwałego dziennika, więc umieszczenie w kolejce,
  pobranie, ukończenie, ponowne umieszczenie i opróżnienie nie powodują zmian w katalogach związanych z obsługą osobnych plików dla każdego zadania.
  Zbiorcze pobieranie i kończenie zadań rozkładają blokowanie i fsync na całe partie.
- Skanowanie pól w poszczególnych plikach w `DocStore` staje się wolniejsze po przekroczeniu około 10k rekordów, ponieważ
  każdy pasujący skan musi przejść przez pojedyncze pliki. Zadeklaruj
  [indeksy](https://storh.inline0.dev/pl/docs/indexes) dla filtrowanych pól; zapytania równości korzystające z indeksów odpowiadają w około milisekundę niezależnie od wielkości kolekcji.
- storh nie służy do doraźnych zapytań relacyjnych, złączeń, filtrowania intensywnie korzystającego z indeksów pomocniczych ani skanów analitycznych obejmujących wiele pól. Przenieś kolekcje do [SQL mirror](https://storh.inline0.dev/pl/docs/sql-mirror), jeśli potrzebujesz takich wzorców odczytu; gdy potrzebujesz transakcji obejmujących wiele rekordów, zachowaj główne dane w prawdziwej bazie danych.

Użyj `DocStore`, gdy dominują odczyty punktowe, `SegmentedLog`, gdy dominują dopisywanie i uporządkowane odczyty, a `Queue` do prostego, trwałego rozdzielania zadań. Zobacz [Wybór silnika](https://storh.inline0.dev/pl/docs/engines#choosing-an-engine), aby porównać je obok siebie.
