###### tags: `netology` `devops`
# Домашнее задание к занятию "6.1. Типы и структура СУБД"
## Задача 1
### Какой тип БД лучше выбрать для хранения определенных данных:
* *Электронные чеки в json виде* - Сейчас возможность хранить данные в JSON есть во многих БД как SQL, так и noSQL. Если речь идет про отдельный сервис для хранения чеков и БД под него, то можно выбрать из MongoDB, CouchDB и т.д. Если данных ожидается в огромных колличествах, и необходима высокая надежность можно взять Cassandra. Если помимо чеков в формате JSON нужно хранить еще и "обычные" данные, то под чеки можно завести отдельные поля хоть в PostgreSQL
* *Склады и автомобильные дороги для логистической компании* - если подразумевается использование именно в целях логистики: расчетов маршрутов и т.д., то правльнее использовать графовые БД, например Neo4j. Если речь просто про некий реестр, то что угодно.
* *Генеалогические деревья* - для этого подойдут БД использующие иерархические модель данных
* *Кэш идентификаторов клиентов с ограниченным временем жизни для движка аутенфикации* - самое распространенное решения для данной задачи: Redis, Memcached
* *Отношения клиент-покупка для интернет-магазина* - это простая связь в любой реляционной СУБД
## Задача 2
### Вы создали распределенное высоконагруженное приложение и хотите классифицировать его согласно CAP-теореме. Какой классификации по CAP-теореме соответствует ваша система, если (каждый пункт - это отдельная реализация вашей системы и для каждого пункта надо привести классификацию):
- *Данные записываются на все узлы с задержкой до часа (асинхронная запись)* - AP (Availability + Partition Tolerance) - т.е. система остается доступной и устойчивой к разделению, но получаемые в течении этого часа данные будут не косистентны
- *При сетевых сбоях, система может разделиться на 2 раздельных кластера* - CA (Consistency + Availability) - мы будем иметь по сути два разных узла, возможно, каждый со своим набором данных
- *Система может не прислать корректный ответ или сбросить соединение* - CP (Consistency + Partition Tolerance) - это говорит о том, что система может быть не доступна
## Задача 3
### Могут ли в одной системе сочетаться принципы BASE и ACID? Почему?
Нет, не могут. BASE - это противопоставление ACID. Например, ACID гарантирует консистентность данных после транзакции, BASE же допускает возврат неверных данных.
## Задача 4
Вам дали задачу написать системное решение, основой которого бы послужили:
- фиксация некоторых значений с временем жизни
- реакция на истечение таймаута
Вы слышали о key-value хранилище, которое имеет механизм Pub/Sub. Что это за система? Какие минусы выбора данной системы?
Key-value, которая умеет в pub/sub - это, вероятнее всего, Redis. Речь, скорее всего, идет о каком-то event-sourcing системном решении и выобора Redis для него.
Redis хранит данные в памяти и периодически делает слепки на жесткий диск. Может получится так, что при отказе Redis какие-то данные могут не успеть оказаться в снапшоте, они не восстановятся при восстановлении самого Redis, так мы можем потерять события и соответсвующие уведомления в pub/sub