Мотивы использования реляционной базы данных / ORM или базы данных документов / ODM

Давненько я не создавал проект с нуля, а сейчас документоориентированные базы данных (а также ODM) стали довольно популярными, поэтому я должен рассмотреть их, прежде чем слепо идти по реляционному маршруту.

Может ли кто-нибудь попытаться перечислить мотивы/критерии проекта, которые могут привести к тому или иному выбору?


person BenMorel    schedule 23.11.2012    source источник


Ответы (1)


ORM/реляционная база данных/SQL

Плюсы:

  • понятный, стандартный подход
  • хорошо сопоставляется с данными с последовательной структурой
  • хорошо отображает данные с несколькими отношениями между несколькими объектами
  • имеет широкие возможности присоединения
  • имеет транзакции
  • масштабируемость до огромного количества транзакций в секунду (с использованием MySQL Cluster, Fusion-IO и т. д.)

Минусы:

  • трудно масштабировать до огромного объема данных, если производительность также имеет значение
  • плохо сопоставляется с данными с переменной структурой (или полуструктурированными)
  • для сохранения объектов требуется уровень клея/перевода, который может быть узким местом в производительности (и, если все сделано неправильно, также может быть очень многословным)

ODM / база данных документов / NoSQL

Плюсы:

  • масштабируемость до огромного объема данных и до огромного количества относительно независимых запросов
  • высокая доступность, шардинг, мультимастер, ...
  • хорошо отображает полуструктурированные данные
  • хорошо сопоставляется с данными с более изменчивой структурой
  • модель данных может быть более гибкой
  • запросы не нужно преобразовывать в SQL (собственный стиль запросов NoSQL может или не может лучше подходить для некоторых целей, и нет накладных расходов на драйвер SQL/анализ/и т. д.)
  • (для объектных баз данных) сопоставляется непосредственно с объектами, нет необходимости в объектно-реляционной трансляции

Минусы:

  • часто нет присоединения (или ограниченная версия присоединения)
  • часто нет транзакций (или ограниченная версия согласованности/атомарности транзакций)

Как решить

В зависимости от типа данных и шаблонов использования:

  • Имеют ли данные однородную структуру? (реляционная) ... или переменная/несогласованная структура? (документ)
  • Типичное использование читает/записывает один тип объекта? (документ) ... или представление, состоящее из свойств нескольких сущностей? (относительный)
  • Требуются ли транзакции? (относительный) ... или транзакции не нужны? (документ)

На основе требований масштабирования/производительности:

  • Огромный объем данных + несколько медленных сложных операций чтения/записи? (сценарий типа хранилища данных) => реляционный
  • Огромные данные + огромный объем простых операций чтения/записи? (сценарий типа серверной части Craigslist) => документ
  • Огромные данные + быстрое, сложное чтение/запись? => это сложно; либо используйте реляционный и попытайтесь масштабировать его, либо используйте документ и попытайтесь упростить запросы
  • Умеренные данные + быстрая транзакционная запись? (сценарий банковского типа) => реляционный
  • Умеренные данные + умеренное чтение/запись? => выберите любой на основе поддержки поставщика/инструмента, знакомства и т. д.

использованная литература

(Предыстория: в последнее время я ничего не делал в этой области, но несколько лет назад я построил большую систему, которая использовала репликацию MySQL + Sphinx, т.е. гибрид реляционной и документной)

person Alex I    schedule 28.11.2012
comment
Спасибо за этот обширный ответ. Очень признателен. - person BenMorel; 28.11.2012