Реализовать утилиту вычисления контрольной суммы записей 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
...