# gostore Простейшее сетевое хранилище на `golang`. ## Описание Хранилище `ключ-значение` работает поверх HTTP1.1/ip4. Выполняет следующие запросы: * `/put/:login/:pass/:key` (POST, поместить в хранилище); * [x] в памяти * [x] на диске * `/get/:login/:pass/:key` (POST, извлечь из хранилища); * [x] в памяти * [x] на диске * `/del/:login/:pass/:key` (POST, удалить из хранилища). * [x] в памяти * [x] на диске * `/find/:login/:pass/:key` (POST, искать ключи по префиксу). * [x] на диске * [x] `/time` (GET, возвращает текущее время на сервере; для поддержания `KeepAlive`). Запросы сделанными классическими специально, чтобы гарантировать правильную работу через прокси. Поддерживается `KeepAlive` с ожиданием следующего запроса 10 сек. Клиент должен присылать запросы не реже, чтобы поддерживать открытым соединение. Если необходима работа через внешние сети, то следует использовать `nginx proxy manager` со включенными сертификатами `LetsEncript` перед сервисом `gostore`. Максимальный размер значения ключа не может быть более 10 МБ (но можно настроить в коде). ## Пределы использования Примерные лимиты эффективности хранилища находится в следующих пределах * эффективный размер 20 ТБ (допустимо до 60 ТБ); * эффективное количество ключей 10Г (допустимо 20Т). Необходимо помнить, что в любом случае физические параметра оперативной памяти и дисковой подсистемы сильно ограничены. ## Кеш в памяти Для ускорения работы хранилище имеют копию кеш в памяти. Количество записей в кеше нстраивается через переменную окружения, например: > Задано 5_000 записей. При предельном размере записи 10 МБ общая память под кешем > займёт 50 ГБ. > > Задано 50_000, но известно ,что размер записи не превысит 500 байт. Тогда > память под кешем максимум будет 25 Мб. В любом случае, поиск по словарю в своей памяти всегда будет быстрее, чем поиск в БД на диске. ## Переменные окружения ```bash export STORE_USER="dev" export STORE_USER_PASS="dev" export STORE_HTTP_PORT="25000" export STORE_MEM_RECORD_POOL_SIZE="5_000" ``` ## Команды сборки ```make make # Сборка сервиса для прода make build # -//- make dev.run # Сборка с и запуск детектором гонок для отладки make mod # Обновление зависимостей ```