Является ли дублирование данных в хранилище SQL и документов (например, MongoDB) законной идеей или их следует избегать? - PullRequest
1 голос
/ 09 февраля 2011

У меня есть вопрос.Я рассматриваю возможность использования хранилища данных для некоторых типов объектов (например, данных о продуктах).Критерием использования хранилища документов является наличие объекта на странице сведений, поэтому необходимо быстрое чтение всего объекта (например, продукт со всеми атрибутами, изображения, комментарии и т. Д.).Критериями использования SQL является отображение списков (например, N новейших, самых популярных и т. Д.).

Некоторые объекты соответствуют обоим критериям.Продукты является примером.Так является ли обычной практикой хранение информации, которая будет использоваться при отображении списков на страницах индекса в базе данных SQL, и других данных в хранилище документов?

Ответы [ 2 ]

3 голосов
/ 09 февраля 2011

Если денормализация подходит для получения производительности, продолжайте денормализацию. Но вы должны убедиться, что у вас есть способ иметь дело с обновлениями денормализованных данных. Ваши варианты в MongoDB:

  • несколько запросов, чтобы избежать денормализации
  • встроенные документы
  • ссылки на базу данных

сделай свой выбор ..

1 голос
/ 09 февраля 2011

Основная идея заключается в том, что mongoDB был создан для денормализации и встраивания. В одном из моих прошлых проектов я провел денормализацию sql, чтобы получить лучшую производительность, но я не люблю денормализацию sql, потому что очень много дублированныхданные (если у вас есть отношение один ко многим, например).Второй шаг - переписать слой доступа к данным в mongoDB.И в mongoDB для некоторых сложных страниц, где мне нужно загрузить несколько документов, я создал денормализованный документ (с вложенными коллекциями и простыми данными из разных документов), чтобы соответствовать содержанию страницы.Не все мои проблемные страницы работают быстро, как в Facebook;).

Но здесь возможны проблемы, потому что вы должны каждый раз поддерживать денормализованный документ.Также все мои денормализованные обновления данных работают асинхронно, и некоторые данные могут устареть в какой-то момент, но это нормальная практика.Даже в stackoverlow используется денормализация, потому что иногда, когда открывается вопрос, я вижу ответ, но когда я возвращаюсь к списку вопросов и обновляю страницу, иногда вопрос не имеет ответа.

Если мне нужна денормализация, я выбираю mongodb.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...