bmstu-iu8-cpp-sem-3 / lab-10-kv-storage

Вычисление контрольной суммы записей key-value хранилища

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Лабораторная работа № 10

Задание

Реализовать утилиту вычисления контрольной суммы записей key-value хранилища.

key-value хранилище является простейшим хранилищем данных, использующим ключ для доступа к значению. Такие хранилища используются для хранения изображений, создания специализированных файловых систем, в качестве кэшей для объектов, а также в системах, спроектированных с прицелом на масштабируемость.

Иллюстрация

Утилита проходит в несколько потоков содежимое исходного хранилаща

# db-cat source.db

| column family | column family | column family |
|---------------|---------------|---------------|
| key1 : value1 | key5 : value5 | key7 : value7 |
|---------------|---------------|---------------|
| key2 : value2 | key6 : value6 | key8 : value8 |
|---------------|---------------|---------------|
| key3 : value3 |               | key9 : value9 |
|---------------|---------------|---------------|
| key4 : value4 |               |               |
|---------------|---------------|---------------|

и заполняет новое хранилище контрольной суммой для каждой записи

$ dbcs source.db --output dbcs-source.db
# db-cat dbcs-source.db

| column family | column family | column family |
|---------------|---------------|---------------|
| key1 : hash1  | key5 : hash5  | key7 : hash7  |
|---------------|---------------|---------------|
| key2 : hash2  | key6 : hash6  | key8 : hash8  |
|---------------|---------------|---------------|
| key3 : hash3  |               | key9 : hash9  |
|---------------|---------------|---------------|
| key4 : hash4  |               |               |
|---------------|---------------|---------------|

Контрольная сумма вычисляется от значения и от ключа записи:

hash = sha256(key, value)

Требования

  • Утилита должна поддерживать rocksdb с множетсвенным семейством стоблоцов.
  • Утилита, должна обработаывать следующие опции: log-level, thread-count и output.
  • В качестве алгоритма хеширования для подсчета контрольной суммы выбрыть SHA-256.
  • При реализации использовать шаблон проектирования producer-consumer.

Пример

# получение справочной информации
$ dbcs --help

Usage:

  dbcs [options] <path/to/input/storage.db>

Options:

  --log-level <string>          = "info"|"warning"|"error"         
                                = default: "error"
                                
  --thread-count <number>       = 
                                = default: count of logical core

  --output <path>               = <path/to/output/storage.db>
                                = default: <path/to/input/dbcs-storage.db>

# вычисление контрольной суммы
$ dbcs /dir/file.db
...

Рекомендации

  • Для обработки параметров командной строки использовать компонент boost::program_options.
  • Для логгирования работы утилиты использовать компонент boost::log.
  • Для вычисления контрольной суммы использовать библиотеку PicoSHA2.
  • Для подключения Boost и rocksdb использовать пакетный менеджер Hunter.

About

Вычисление контрольной суммы записей key-value хранилища

License:MIT License


Languages

Language:CMake 70.4%Language:Shell 26.2%Language:C++ 2.1%Language:Dockerfile 1.3%