Перейти к содержимому

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

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

  • Практически нет ограничений на точечный доступ, пока файловая система справляется с количеством файлов, а коллекция использует распределение по каталогам по последним символам UUID. Точечное чтение занимает несколько микросекунд; долговечная запись одной записи ограничена fsync и составляет несколько тысяч операций в секунду.
  • Сканирование сегментированного журнала, чтение по курсору и чтение за временной диапазон хорошо работают примерно до 1M записей, если размеры сегментов настроены под нагрузку. Пакетное добавление обрабатывает десятки тысяч записей в секунду; восстановление после повреждения хвоста при повторном открытии воспроизводит сотни тысяч записей в секунду.
  • Операции с очередью добавляют компактные события в один долговечный журнал, поэтому постановка в очередь, захват, завершение, повторная постановка и очистка не вызывают постоянного создания отдельных файлов для каждой задачи. Пакетный захват и завершение распределяют блокировки и fsync по целым пакетам.
  • Сканирование отдельных файлов по полям в DocStore замедляется при превышении примерно 10k записей, поскольку при каждом соответствующем сканировании нужно обходить отдельные файлы. Объявите индексы для полей, по которым выполняете фильтрацию: запросы на равенство по индексу выполняются примерно за миллисекунду независимо от размера коллекции.
  • storh не предназначен для произвольных реляционных запросов, объединений, фильтрации с интенсивным использованием вторичных индексов или аналитического сканирования множества полей. Для таких сценариев чтения переносите коллекции в зеркало SQL; если нужны транзакции с несколькими записями, основной источник данных должен находиться в настоящей базе данных.

Используйте DocStore, если преобладает точечное чтение, SegmentedLog — если преобладают добавление и чтение по порядку, а Queue — для простой надежной передачи задач. Сравнение механизмов хранения приведено в разделе Выбор механизма хранения.