
# storh

storh — автономное хранилище данных на PHP на основе файлов: документы JSONC, сегментированный журнал с добавлением в конец и очередь с добавлением в конец. Оно хранит записи с идентификаторами UUIDv7, поддерживает потоковое чтение, запросы по курсору и временному диапазону, а также использует атомарные операции файловой системы вместо сервера базы данных.

Вызывающая сторона указывает каталог. storh не ищет пути приложения, не читает глобальные константы и не требует адаптера фреймворка.

## Механизмы хранения

- `DocStore` хранит отдельный файл JSONC для каждой записи, распределяя пути по каталогам по последним символам UUID. Лучше всего подходит для точечного чтения по идентификатору и запросов по индексированным полям.
- `SegmentedLog` добавляет записи в файлы сегментов в виде строк JSON с префиксом длины в байтах и контрольной суммы. Лучше всего подходит для потоков с частым добавлением, чтением по курсору и за временной диапазон.
- `Queue` добавляет долговечные события задач и хранит состояние очереди в памяти. Лучше всего подходит для надежной передачи задач между процессами.

Не уверены, какой вариант подойдет для вашей нагрузки? Сравните их бок о бок в разделе [Выбор механизма хранения](https://storh.inline0.dev/ru/docs/engines#choosing-an-engine).

`DocStore`, `SegmentedLog` и `Queue` — псевдонимы классов для классов реализации `DocPerFileStore`, `SegmentedLogStore` и `LogQueue`, поэтому оба имени ссылаются на один и тот же класс.

## Требования

- PHP 8.2 или новее
- `ext-json`
- локальная или смонтированная файловая система с поддержкой атомарного переименования внутри каталога

## Что читать дальше

- [Установка](https://storh.inline0.dev/ru/docs/install)
- [Быстрый старт](https://storh.inline0.dev/ru/docs/quick-start)
- [Механизмы хранения](https://storh.inline0.dev/ru/docs/engines)
- [Масштабирование и ограничения](https://storh.inline0.dev/ru/docs/scaling-limits)
