Архитектор ПО решил проконсультироваться у вас, какой тип БД лучше выбрать для хранения определенных данных.
Он вам предоставил следующие типы сущностей, которые нужно будет хранить в БД:
- Электронные чеки в json виде NoSQL. Можно выбрать MongoDB, для которой json поддерживается "из коробки".
- Склады и автомобильные дороги для логистической компании Графовые БД, которые позволяют производить поиск наикратчайшего пути.
- Генеалогические деревья Можно использовать иерархическую модель. Только перевернуть ее вверх-ногами ) Можно использовать реляционные БД.
- Кэш идентификаторов клиентов с ограниченным временем жизни для движка аутенфикации NoSQL. Для этой цели часто используют Memcached.
- Отношения клиент-покупка для интернет-магазина Иерархическая модель данных должна неплохо вписаться. Реляционные БД тоже хорошо подходят, даже используются
Вы создали распределенное высоконагруженное приложение и хотите классифицировать его согласно CAP-теореме. Какой классификации по CAP-теореме соответствует ваша система, если (каждый пункт - это отдельная реализация вашей системы и для каждого пункта надо привести классификацию):
- Данные записываются на все узлы с задержкой до часа (асинхронная запись) По CAP-теореме это похоже на AP. Отсутствует консистентность данных из-за ассинхронности. По PACELC я бы классифицировал это как PA/EL.
- При сетевых сбоях, система может разделиться на 2 раздельных кластера Согласно CAP-теореме это AP, т.к. разделенная система не может быть консистентной. По PACELC похоже на PA/EL, т.к. видимо упор делается на доступность.
- Система может не прислать корректный ответ или сбросить соединение Это CP согласно теореме CAP, потомучто не выполняется условие доступности. По PACELC это PC/EC.
А согласно PACELC-теореме, как бы вы классифицировали данные реализации?
Могут ли в одной системе сочетаться принципы BASE и ACID? Почему?
На основе требований BASE вряд ли получится создать банковскую систему. В то же самое время, ACID не получится использовать в высоконагруженных системах..
BASE ориентирована на доступность данных, а ACID -- на целостность. Сочетать их не получиться по определению
Вам дали задачу написать системное решение, основой которого бы послужили:
- фиксация некоторых значений с временем жизни
- реакция на истечение таймаута
Вы слышали о key-value хранилище, которое имеет механизм Pub/Sub. Что это за система? Какие минусы выбора данной системы?
Это Redis, судя по описанию )
Минусы зависят задачи, в которой используется Redis:
- все данные в памяти
- данные не сохраняются на диск синхронно при записи. Если сервер откажет между синхронизациями с диском, то данные можно потерять