Когда следует использовать документ по сравнению с базой данных реляционных или графов? [закрыто]


29

В целях обсуждения рассмотрим сценарий FourSquare.

сценарий

Объекты:

  • пользователей
  • места

Отношения:

  • Checkins: пользователи <-> места, многие ко многим
  • Друзья: пользователи <-> пользователи, многие ко многим

Дизайн базы данных

Они, скорее всего, будут иметь ошибки, пожалуйста, укажите их.

RDBMS

Таблицы:

  • пользователей
  • места
  • Checkins (соединение)
  • Друзья (соединение)

Плюсы:

  • CAP: последовательность, доступность

Минусы:

  • CAP: допуск раздела, он же шардинг
  • схемы = негибкая структура
  • плохая репликация?

график

Объекты:

  • пользователей
  • места

Ребра:

  • Друзья: Пользователь <-> Пользователь
  • Checkins: Пользователь -> Места
    • содержит метку времени

Плюсы:

  • CAP: последовательность, доступность?
  • бесщеточные, легко изменяемые объекты и ребра
  • запросы обхода графа, например:
    • кластеризация
      • поиск групп друзей
      • найти рестораны, которые любят похожие люди
    • какие-нибудь другие общие / полезные вопросы?

Минусы:

  • CAP: допуск раздела?

Документ / Объект

3 отдельные базы данных?

  • пользователей
    • список друзей
  • возвраты
    • отметка времени
    • пользователь
    • место
  • места

Плюсы:

  • CAP: доступность, допуск раздела
  • без схемы, легко изменяемые объекты

Минусы:

  • CAP: согласованность

Вопросов

Для записи, они закончили с использованием MongoDB. В дополнение ко всем этим вопросительным знакам выше:

  1. Я не уверен, как реализовать базу данных документов.
  2. Как базы данных документов получают допуск на разделы?
  3. Я полагаю, что для получения проверок одного пользователя операция проанализирует все проверки и отфильтрует метаданные по имени пользователя (карта + фильтр). Производительность разбора 1 000 000+ документов для каждого пользователя будет ужасно низкой. Я полагаю, это не правильное поведение?
  4. Какие еще плюсы / минусы есть?

(1) Вам нужно разобрать отношения между двумя таблицами в бизнес-термине. Это потому, что могут быть параллельные отношения. Например, пользователи <-> пользователи не подразумевают отношения 1 мм. Это может означать больше 1. Например: пользователь любит другого пользователя, а пользователь ненавидит других пользователей. Это 2 отношения. (2) Было бы полезно, если бы вы могли обобщить то, что вы хотите, «точно».
NoChance

@EmmadKareem: (1) Я не собираюсь усложнять сценарий. Меня интересуют только пользовательские отношения <->, это взаимная дружба, которая является связью многих со многими. (2) Я хотел бы, чтобы на 4 вопроса, перечисленных в нижней части поста, был дан ответ.
августа

Ответы:


13

Ваш вопрос может быть темой семестрового курса колледжа. Вы должны разбить его на управляемые куски. Поэтому я просто выкину некоторые частичные ответы.

При принятии решения о том, какую базу данных использовать, прежде всего следует обратить внимание на то, какие запросы вы будете выполнять и будете ли вы знать их все до создания базы данных. Базы данных SQL имеют преимущество мощных и гибких запросов ко всем данным в базе данных. Графовые базы данных имеют узкоспециализированные возможности запросов, которые делают их лучшими для графических данных и действительно плохими для неграфовых данных (хотя графовые базы данных могут быть компонентами в базах данных SQL). Базы данных NoSQL гораздо более ограничены в своей способности извлекать данные и работать с ними.

Следующее, как вы относитесь к свойствам ACID: атомарность, согласованность, изоляция и долговечность. Базы данных SQL обеспечивают строгие гарантии для всех 4. Базы данных NoSQL обычно не обещают все 4, и пути их отклонения являются одними из ключевых отличий, которые отличают различные реализации баз данных NoSQL. С другой стороны, невозможно гарантировать непротиворечивость и доступность перед лицом раздела (см . Теорию CAP Brewer ), поэтому никакая база данных SQL не подойдет, если вы настаиваете на полной доступности перед лицом раздела. Лично меня очень волнует долговечность данных в базе данных, так как я обычно работаю с данными, когда потеря данных даже на 0,0001% неприемлема, а наборы данных достаточно малы, поэтому мне не нужно беспокоиться о разделах, поэтому я сильно одобряют базы данных SQL.

Еще одно очень практичное соображение - это качество серверного кода, доступность администраторов и программистов баз данных, качество поддержки, доступной для возникающих проблем, качество и доступность библиотек интерфейса для подключения вашего приложения к базе данных и т. Д. MySQL существует уже почти 2 десятилетия, в нем устранено большинство ошибок, он широко используется и поэтому имеет отличную поддержку и высокую готовность персонала, и, вероятно, будет поддерживаться в течение следующих 10 лет. Вы не можете сказать ничего из этого о Риаке.

Обратите внимание, что хотя Google практически изобрел базы данных NoSQL, чтобы они могли хранить кэшированную и проиндексированную версию всей всемирной паутины, они все еще используют MySQL для некоторых целей.


1
Я понимаю, что много спрашивал, поэтому общий ответ был бы в порядке. Основные вопросы: (1) Зачем использовать базу данных документов для предполагаемого большого разделения, когда вы можете реализовать горизонтальное разделение в логике с использованием разделения диапазона? (2) Как бы вы спроектировали базу данных документов для использования в сценарии FourSquare и как она справляется с некоторыми распространенными задачами (показывать проверки пользователя, показывать друзей пользователя, показывать пользователей места, которые в настоящее время зарегистрированы)?
В

1
@William, десятки статей, отвечающих на ваши вопросы, легко доступны через Google. Даже несколько на стеке переполнения в одиночку. Делай свою домашнюю работу.
Old Pro
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.