Перемещение хранилища интернет-магазина в решение NoSQL

Если у вас было решение для интернет-магазина на базе реляционной базы данных SQL Server, какие были бы причины, если они есть, переместиться в хранилище NoSQL? Имеет ли смысл переносить хранилища данных, которые в значительной степени зависят от отношений с NoSQL? Если вы начинаете с нуля, вы бы выбрали решение NoSQL над реляционным для проекта интернет-магазина, через какое-то время снова получившее кучу таблиц, таких как статьи, классификации, налоговые реестры, прейскуранты и т. Д., А также соотношение между ними ?

Какая поддержка, например, в .NET (4.0) для поддержки MongoDB или MongoDB для .NET 4.0? Могу ли я рассчитывать на богатые инструменты генерации кода, похожие на мастера EF, мастер L2SQL и т. Д. Для MongoDB?

Поскольку, как я уже читал, NoSQL в основном подходят для хранения документов, более простых объектных моделей.

Ваш ответ на этот вопрос поможет мне принять правильные решения по проектированию инфраструктуры.

ОБНОВЛЕНИЕ: Если бы я разрабатывал свое решение вокруг ASP.NET MVC и в значительной степени полагался на классы Model, было бы самым простым способом выбрать DB4o для простого сериализации и десериализации моих объектов в хранилище данных и из хранилища данных?

Ну, вполне открытый вопрос.

Переход на NoSQL-хранилище данных для существующего программного обеспечения

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

Имеет ли смысл переносить хранилища данных, которые в значительной степени зависят от отношений с NoSQL?

Ну, вы должны учитывать, что три технологии (Document-DB, RDBMS, База данных объектов) сильно отличаются друг от друга.

  • В реляционном мире вы нормализуете данные и объединяете их во время выполнения вместе. Это отлично работает, если размер данных невелик. Здесь часто возникают проблемы: когда у вас много нормализованных данных, вам нужно сделать много соединений, что требует большой производительности. И, конечно, сопоставление между вашими объектами и вашими таблицами может быть довольно сложным.
  • В объектной базе данных каждый объект хранится отдельно, а «отношения» хранятся в виде указателей. Поэтому, когда объект A имеет ссылку на объект B, база данных объектов хранит эту ссылку. Таким образом, чтобы получить «отношение», никаких операций объединения не требуется. Поэтому «отношения» дешевы. В заключение объектные базы данных действительно хороши при обработке отношений.
  • В базе данных документов, такой как MongoDB, полный объект-граф хранится в виде документа. Документ-база данных работает на уровне документа. Поэтому здесь нет реальных «отношений». Обычно вы просто храните / загружаете документы. Поэтому, когда вы можете моделировать сценарии, так что большинство ваших операций работают только с одним документом, это очень удобно и просто.

Вот хороший блог-пост, который сравнивает разницу в дизайне MongoDB (база данных документов) и db4o (объект-база данных)

В конце концов, модель должна соответствовать вашей базе данных. Например, не пытайтесь использовать модель для базы данных отношений и хранить ее 1: 1 в базе данных документа. См. Также блог Айенде о моделировании для объекта-базы данных .

Какая поддержка, например, в .NET (4.0) для поддержки MongoDB или MongoDB для .NET 4.0?

Гейтс В.П. уже ответил на это для MongoDB . .NET 4.0-версия db4o находится в разработке. Тем временем версия 3.5 также отлично работает на платформе 4.0.

Могу ли я рассчитывать на богатые инструменты генерации кода, похожие на мастера EF, мастер L2SQL и т. Д. Для MongoDB?

Для обоих, MongoDB и db4o вам не нужно генерировать код. Ваши классы – это схема. Вы просто храните свои объекты, и база данных заботится обо всем остальном. См. Также ответ Гейтс В.П.

Поскольку, как я уже читал, NoSQL в основном подходят для хранения документов, более простых объектных моделей.

Ну диапазон довольно большой. Из действительно простых хранилищ ключей-значений, в более продвинутые базы данных документов, базы данных, ориентированные на количество кодов, графические базы данных и базы данных объектов.

Конечно, документальная база данных отлично работает, когда у вас есть документы, подобные документу (например, программное обеспечение для блога). Хотя графические и объектные базы данных хороши при обработке экстремально сложных структур данных.

Хорошо, это много вопросов, давайте посмотрим, какие из них я могу действительно решить.

Имеет ли смысл переносить существующие реляционные хранилища данных?

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

Если вы начинаете с нуля, вы бы выбрали решение NoSQL над реляционным для проекта интернет-магазина …

Да. MongoDB очень подходит для типичных веб-проектов. Однако, если у вас много опыта SQL, вы, вероятно, найдете отчет немного неудобным.

Поддержка .NET 4.0? Могу ли я рассчитывать на богатые инструменты генерации кода, похожие на мастера EF, мастер L2SQL и т. Д. Для MongoDB?

У Mongo есть драйвер для .NET.

Для Mongo нет мастера L2SQL или EF, но этого действительно не должно быть. Честно говоря, то, что вы, вероятно, пропустите больше всего, – это Enterprise Manager для анализа БД.

MongoDB действительно не нужен мастер EF. EF – решение MS для «несоответствия импеданса» между БД и объектами. MongoDB не имеет «несоответствия импеданса», просто наполняет объекты в БД и уходит. Большая часть того же относится и к L2SQL. Люди создали некоторую поддержку Linq (просто быстрый Google), но такие вещи, как объединения, не будут работать. B / c Mongo не делает соединений.

С точки зрения «объектов данных» Монго нужен только очень легкий вес. Честно говоря, это так же просто, как заполнение свойств в БД. Если вы хотите «добавить столбец», вы просто добавляете свойство в свой объект и запускаете сохранение в БД. Поэтому такие вещи, как L2SQL, начинают становиться действительно ненужными.

Не поймите меня неправильно, есть место для другой парадигмы запросов, но в этом отношении вы находитесь на новой территории. (вы будете для всех хранилищ, ориентированных на ключевые слова и документы).

  • Возможно ли перенести данные из MongoDB в SQL-Server?
  • Каков наилучший способ выполнить эквивалент DENSE_RANK на MongoDB?
  • Экспорт больших данных в CSV из sqlserver с помощью java
  • Как моделировать данные с помощью MongoDB
  • Как присоединиться к данным в MongoDB с SQL Server?
  • Почему SQL Server 2012 быстрее, чем MongoDB для этого запроса
  • SQL Server 2008 R2 для MongoDB - безопасно ли переносить данные?
  • Ошибки аудируемого стола
  • Как импортировать из sql-дампа в MongoDB?
  • Mongodb ObjectId генератор как SQL Server proc
  • Обобщенный способ извлечения JSON из реляционной базы данных?
  • Давайте будем гением компьютера.