###### 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