# Домашнее задание к занятию "6.1. Типы и структура СУБД"
## Задача 1
Архитектор ПО решил проконсультироваться у вас, какой тип БД
лучше выбрать для хранения определенных данных.
Он вам предоставил следующие типы сущностей, которые нужно будет хранить в БД:
- Электронные чеки в json виде
**NoSQL - иерархические, т.к. json - это иерархическая структура
Хотя.. Нам нужно хранить чеки в виде json.. Ещё вариант - документо-ориентированные БД.**
- Склады и автомобильные дороги для логистической компании
**NoSQL - графовые. Т.к. насколько я знаю, дороги можно представить в виде графов (ребер). А склады - в виде узлов.**
- Генеалогические деревья
**Наверно сетевые, потому что в генеалогическом дереве узел может иметь связь больше чем с одним родителем. Точнее не то что может - однозначно имеет двух родителей.**
- Кэш идентификаторов клиентов с ограниченным временем жизни для движка аутенфикации
**Column oriented? В одной колонке - пароли или хеши паролей, row key - login наверно.**
> Типичным применением этого типа СУБД является веб-индексирование, а также задачи, связанные с большими данными, с пониженными требованиями к согласованности.
- Отношения клиент-покупка для интернет-магазина
**Ключ-значение? Исходя из названия клиент-покупка.. :)**
Выберите подходящие типы СУБД для каждой сущности и объясните свой выбор.
## Задача 2
Вы создали распределенное высоконагруженное приложение и хотите классифицировать его согласно
CAP-теореме. Какой классификации по CAP-теореме соответствует ваша система, если:
- Данные записываются на все узлы с задержкой до часа (асинхронная запись)
AP
- При сетевых сбоях, система может разделиться на 2 раздельных кластера
P
- Система может не прислать корректный ответ или сбросить соединение
CP
А согласно PACELC-теореме, как бы вы классифицировали данные системы?
1. PA/EC
2. PA/EL
3. PC/EC
## Задача 3
Могут ли в одной системе сочетаться принципы BASE и ACID? Почему?
Я думаю, что нет, потому что эти принципы противоречат друг другу. Один - про то, чтобы работало и в конце концов согласовалось, второй - про жёсткую согласованность, которая превыше всего.
НО! В статье прочитал, что MongoDB:
> * Это ACID в ограниченном смысле на уровне документа.
> * В случае распределенной системы — it's all about that BASE.
Или там же про Cassandra:
> * ACID на уровне записи.
> * В случае распределенной системы — it's all about that BASE.
Хотя, если честно, не очень понял, что значит "на уровне документа" и "на уровне записи"
В общем ответ: "на одном уровне работы - нет"
## Задача 4
Вам дали задачу написать системное решение, основой которого бы послужили:
- фиксация некоторых значений с временем жизни
- реакция на истечение таймаута
Вы слышали о key-value хранилище, которое поддерживает хранение key-value значений и имеет механизм Pub/Sub. Что это за система? Какие минусы выбора данной системы?
Судя по всему - это Redis.
Минусы:
- для обслуживания нужны дорогостоящие знающие сотрудники, которых сложнее найти
- однопоточный, может масштабироваться только горизонтально посредством кластеризации
- Система репликации Redis сама по себе не поддерживает автоматическую отказоустойчивость: если ведущий узел выходит из строя, необходимо вручную выбрать нового ведущего среди ведомых узлов