Skip to content

Latest commit

 

History

History
48 lines (38 loc) · 5.39 KB

TASK1.md

File metadata and controls

48 lines (38 loc) · 5.39 KB

Задание 1

Необходимо реализовать 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