Coder Social home page Coder Social logo

lab-10-kv-storage's Introduction

Лабораторная работа № 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.

lab-10-kv-storage's People

Contributors

rusdevops avatar drewxa avatar jarviscraft avatar vladislavrz avatar rkulagin avatar zinstack625 avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.