---
# System prepended metadata

title: Домашнее задание к занятию "6.1. Типы и структура СУБД"

---

# Домашнее задание к занятию "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 сама по себе не поддерживает автоматическую отказоустойчивость: если ведущий узел выходит из строя, необходимо вручную выбрать нового ведущего среди ведомых узлов