Skip to content

TheShenk/protei-turnip-db

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

36 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

protei-turnip-db

Задание

Задача приложения - реализовать простое key-value хранилище, взаимодействие через подключение по tcp. Программа должна позволять подключаться ограниченному количеству клиентов (можно через конфигурацию, но проще будет передавать ограничение как опцию запуска). Формат протокола взаимодействия: каждая команда передается в одной строке, завершается символом LF (0x0A) либо комбинацией CR LF (0x0D 0x0A), ответ на каждую команду также в одной строке.

Общий формат команды: <команда> [ключ] [значение]

В качестве ключа рассматривается строка alpha-numeric (символы 0-9 и a-z, A-Z), регистр имеет значение.

Поддерживаемые команды:

  • PUT - запоминает значение для ключа
  • GET - получает значение для ключа
  • DEL - удаляет значение по ключу
  • COUNT - количество ключей
  • DUMP - запись содержимого базы данные в файл

Общий формат ответа: <статус> [значение]

Также поддерживается ввод команд в нижнем регистре: put, get, del, count, dump

Пример сценария:

PUT name Vasya
OK
PUT name Masha
OK Vasya  // возвращает предыдущее значение
GET name
OK Masha //  текущее значение Masha
GET age
NE // ключа нет
PUT age 20
OK
GET age 
OK 20  
COUNT
OK 2 // 2 ключа
DEL age
OK 20
DEL name
OK Masha
COUNT
OK 0  // нет ключей
DEL name
NE // ошибка, ключа нет

Порт для прослушивания нужно указывать либо в опциях запуска, либо в своем отдельном файле конфигурации. Лучше использовать опции запуска. Делать реализацию многопоточной или все делать в одном потоке - оставляем на усмотрение автора.

Сборка

Для сборки необходимо установить boost (1.76 и новее, из-за использования корутин) и oneTBB.

mkdir build && cd build
cmake ../
cmake --build .

Для сборки документации необходимо установить doxygen. Тогда из директории build:

cmake --build . --target docs

Сборка приложения также возможна с использованием docker:

docker build -t turnipdb https://github.com/TheShenk/protei-turnip-db.git#main
docker run -p 31415:31415 turnipdb

При использовании docker могут возникнуть сложности с проверкой функции выгрузки и загрузки базы данных из файла, так как все файлы создаются и берутся из контейнера.

Использование

./tests - запуск тестов

./turnip-server - запуск базы данных, порт по умолчанию - 31415

nc 127.0.0.1 31415 - подключение с помощью NetCat к базе данных для ввода команд.

Аргументы командной строки для настройки:

  • ./turnip-server --help - вывод сообщения с описанием параметров

  • ./turnip-server --port 31415 - указание порта, на котором ожидать новых подключений

  • ./turnip-server --max-clients 1 - указание максимального числа одновременно подключенных клиентов

  • ./turnip-server --dump dumpfile - указание файла, из которого будет прочитано содержимое базы данных

  • ./turnip-server --log [trace|debug|info|warning|error|fatal] - указание минимального уровня выводимых сообщений

  • ./turnip-server --threads 4 - указание числа используемых потоков

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published