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