Необходимо реализовать Key-value Persistent Storage Unit - единицу хранения данных в распределенной БД. Для упрощения задания поставляются:
- интерфейс
KeyValueApi
, предполагается что храним всегда строковые ключи и байтовый массив данных. Операция сканирования части/всего объема хранимого реализуется через получения хранимых ключей и далее точечной загрузки значений. Для kv-node определен интерфейс управления: получения статуса и прием команд (например, остановка и старт ноды) - HTTP API kv-node оборачивающее методы единицы хранилища
- тривиальная реализация kv-node в памяти, используется только для примеров
- клиент к HTTP API
KeyValueApiHttpClient
- интеграционные тесты, в том числе с использованием библиотеки testcontainers: позволяют запустить приложения в контейнерах и провести их тестирование. Набор тестов не полон и обязателен к расширению в результате реализации задания.
- завести организацию в github для команды https://github.com/organizations/new
- сделать fork проекта https://github.com/alesavin/csc-bdse в организацию и выдать доступы всем участникам команды, добавить в collaborators alesavin, dormidon, semkagtn, 747mmHg
- сделать в fork-проекте бранч
csc-bdse-task1
где будет находиться сдаваемый материал для первого задания - для имплементации функциональности Persistent Storage Unit предлагается использовать любую существующую СУБД, например, Cassandra, MySQL, Postgres, Mongo, самописную реализацию на файлах или другие, для доступа - оффициальные клиент или драйвер. Выбор СУБД для использования “под капотом” kv-node является частью задания, предполагается что запуск выбранной СУБД производится в контейнере (разрешается использовать готовые контейнеры из Docker HUB). Необходимо учитывать требования к kv-node: возможность хранения существенного набора ключей (тысячи), сохранение данных после рестарта СУБД и самой ноды, точечное обновление по ключу, возможность получения частичного набора ключей по префиксу. Варианты ограничены только требованиями, можно выбирать как документные, так и реляционные СУБД, возможно написание всего вручную на файлах ч (требуется упаковка в контейнер).
- реализовать инплементацию kv-node с использованием выбранной СУБД, в том числе инициализацию схемы (если таковая необходима), конфигурирования протокола общения с СУБД, тестов
- реализовать интеграционные тесты ноды с поднятием (и выключением) в контейнерах СУБД, ноды
- описать в
INSTALL.md
специфику сборки kv-node и запуска интеграционных тестов - описать в
README.md
что было реализовано, описание проблем, не решенных в коде и требующих дальнейшего рассмотрения, неявных моментов. Обязательно добавить название и список участников команды. - прислать PR {your-awesome-team-fork-repo}/csc-bdse-task1 => {your-awesome-team-fork-repo}/master (добавить alesavin, dormidon, semkagtn, 747mmHg в ревьюеры)
- добавить ссылку на PR в топик задания 1 курса на https://compscicenter.ru
- вторая реализация kv-node на СУБД, кардинально отличной от первой версии (MySQL 4 и MySQL 5 не подходит)
- возможность помечания данных по ключу удаленными без удаления самих данных (Tombstone)
- интеграционные тесты с заливкой миллиона ключей https://www.quora.com/Data/Where-can-I-find-large-datasets-open-to-the-public