
# Мащабиране и ограничения

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

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

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