
# Масштабирование и ограничения

storh — файловое хранилище, а не реляционная система запросов. Практические пределы на основе контрольных значений из раздела [тесты производительности](https://storh.inline0.dev/ru/docs/benchmarks) (50k записей, Apple M1 Pro):

- Практически нет ограничений на точечный доступ, пока файловая система справляется с количеством файлов, а коллекция использует распределение по каталогам по последним символам UUID. Точечное чтение занимает несколько микросекунд; долговечная запись одной записи ограничена fsync и составляет несколько тысяч операций в секунду.
- Сканирование сегментированного журнала, чтение по курсору и чтение за временной диапазон хорошо работают примерно до 1M записей, если размеры сегментов настроены под нагрузку. Пакетное добавление обрабатывает десятки тысяч записей в секунду; восстановление после повреждения хвоста при повторном открытии воспроизводит сотни тысяч записей в секунду.
- Операции с очередью добавляют компактные события в один долговечный журнал, поэтому постановка в очередь, захват, завершение, повторная постановка и очистка не вызывают постоянного создания отдельных файлов для каждой задачи. Пакетный захват и завершение распределяют блокировки и fsync по целым пакетам.
- Сканирование отдельных файлов по полям в `DocStore` замедляется при превышении примерно 10k записей, поскольку при каждом соответствующем сканировании нужно обходить отдельные файлы. Объявите [индексы](https://storh.inline0.dev/ru/docs/indexes) для полей, по которым выполняете фильтрацию: запросы на равенство по индексу выполняются примерно за миллисекунду независимо от размера коллекции.
- storh не предназначен для произвольных реляционных запросов, объединений, фильтрации с интенсивным использованием вторичных индексов или аналитического сканирования множества полей. Для таких сценариев чтения переносите коллекции в зеркало [SQL](https://storh.inline0.dev/ru/docs/sql-mirror); если нужны транзакции с несколькими записями, основной источник данных должен находиться в настоящей базе данных.

Используйте `DocStore`, если преобладает точечное чтение, `SegmentedLog` — если преобладают добавление и чтение по порядку, а `Queue` — для простой надежной передачи задач. Сравнение механизмов хранения приведено в разделе [Выбор механизма хранения](https://storh.inline0.dev/ru/docs/engines#choosing-an-engine).
