В целях обсуждения рассмотрим сценарий FourSquare.
сценарий
Объекты:
- пользователей
- места
Отношения:
- Checkins: пользователи <-> места, многие ко многим
- Друзья: пользователи <-> пользователи, многие ко многим
Дизайн базы данных
Они, скорее всего, будут иметь ошибки, пожалуйста, укажите их.
RDBMS
Таблицы:
- пользователей
- места
- Checkins (соединение)
- Друзья (соединение)
Плюсы:
- CAP: последовательность, доступность
Минусы:
- CAP: допуск раздела, он же шардинг
- схемы = негибкая структура
- плохая репликация?
график
Объекты:
- пользователей
- места
Ребра:
- Друзья: Пользователь <-> Пользователь
- Checkins: Пользователь -> Места
- содержит метку времени
Плюсы:
- CAP: последовательность, доступность?
- бесщеточные, легко изменяемые объекты и ребра
- запросы обхода графа, например:
- кластеризация
- поиск групп друзей
- найти рестораны, которые любят похожие люди
- какие-нибудь другие общие / полезные вопросы?
- кластеризация
Минусы:
- CAP: допуск раздела?
Документ / Объект
3 отдельные базы данных?
- пользователей
- список друзей
- возвраты
- отметка времени
- пользователь
- место
- места
Плюсы:
- CAP: доступность, допуск раздела
- без схемы, легко изменяемые объекты
Минусы:
- CAP: согласованность
Вопросов
Для записи, они закончили с использованием MongoDB. В дополнение ко всем этим вопросительным знакам выше:
- Я не уверен, как реализовать базу данных документов.
- Как базы данных документов получают допуск на разделы?
- Я полагаю, что для получения проверок одного пользователя операция проанализирует все проверки и отфильтрует метаданные по имени пользователя (карта + фильтр). Производительность разбора 1 000 000+ документов для каждого пользователя будет ужасно низкой. Я полагаю, это не правильное поведение?
- Какие еще плюсы / минусы есть?
Ответы:
Ваш вопрос может быть темой семестрового курса колледжа. Вы должны разбить его на управляемые куски. Поэтому я просто выкину некоторые частичные ответы.
При принятии решения о том, какую базу данных использовать, прежде всего следует обратить внимание на то, какие запросы вы будете выполнять и будете ли вы знать их все до создания базы данных. Базы данных SQL имеют преимущество мощных и гибких запросов ко всем данным в базе данных. Графовые базы данных имеют узкоспециализированные возможности запросов, которые делают их лучшими для графических данных и действительно плохими для неграфовых данных (хотя графовые базы данных могут быть компонентами в базах данных SQL). Базы данных NoSQL гораздо более ограничены в своей способности извлекать данные и работать с ними.
Следующее, как вы относитесь к свойствам ACID: атомарность, согласованность, изоляция и долговечность. Базы данных SQL обеспечивают строгие гарантии для всех 4. Базы данных NoSQL обычно не обещают все 4, и пути их отклонения являются одними из ключевых отличий, которые отличают различные реализации баз данных NoSQL. С другой стороны, невозможно гарантировать непротиворечивость и доступность перед лицом раздела (см . Теорию CAP Brewer ), поэтому никакая база данных SQL не подойдет, если вы настаиваете на полной доступности перед лицом раздела. Лично меня очень волнует долговечность данных в базе данных, так как я обычно работаю с данными, когда потеря данных даже на 0,0001% неприемлема, а наборы данных достаточно малы, поэтому мне не нужно беспокоиться о разделах, поэтому я сильно одобряют базы данных SQL.
Еще одно очень практичное соображение - это качество серверного кода, доступность администраторов и программистов баз данных, качество поддержки, доступной для возникающих проблем, качество и доступность библиотек интерфейса для подключения вашего приложения к базе данных и т. Д. MySQL существует уже почти 2 десятилетия, в нем устранено большинство ошибок, он широко используется и поэтому имеет отличную поддержку и высокую готовность персонала, и, вероятно, будет поддерживаться в течение следующих 10 лет. Вы не можете сказать ничего из этого о Риаке.
Обратите внимание, что хотя Google практически изобрел базы данных NoSQL, чтобы они могли хранить кэшированную и проиндексированную версию всей всемирной паутины, они все еще используют MySQL для некоторых целей.
источник