Подтвердить что ты не робот

Причины и против перехода с SQL-сервера на MongoDB

Я знаю, что это большой вопрос, и это не ответ "да" или "нет", но мы разрабатываем веб-приложения и изучаем использование MongoDB для нашего решения настойчивости. Объединение MongoDB с NoRM для хранения объектов.

То, что я хочу спросить, это то, что вы испытывали при переходе с SQL на mongo? Когда mongo просто не является правильным решением и является преимуществом mongodb, достаточным для перемещения разработки из SQL?

4b9b3361

Ответ 1

По моему мнению, формат ваших данных должен быть основной проблемой при выборе хранилища. У вас есть данные, которые являются реляционными по своей природе? Если да, может ли это и хорошо ли моделировать данные в документах? Моделирование данных так же важно в базе данных документов, как и в реляционной базе данных, это просто сделано по-другому. Сколько типов объектов у вас есть и как они связаны? Может ли DBrefs в Mongodb сделать трюк или вы будете скучать по иностранным ключам, так это будет больно? Каковы ваши шаблоны доступа для данных? Вы просто извлекаете данные одного типа, отфильтрованные по значению поля, или у вас запутанные режимы выборки?

Вам нужна целостность транзакций ACID? Предоставляет ли домен большое количество ограничений на данные? Вам нужен коэффициент масштабируемости базы данных документов или это просто "крутая" вещь?

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

Это все вопросы, которые должны войти в выбор хранилища.

Некоторые впечатления

  • Выполнение обширной отчетности по сохраненным данным может быть сложнее при использовании MongoDB или любой базы данных документа, а некоторые варианты использования объединяют RDBMS и document-db для этой цели.
  • (Очень) Различные модели запросов. MongoDB также отличается от других документов-dbs.
  • Возможность изменения формата данных/схемы во время разработки
  • Неизвестная территория
  • различная степень зрелости в драйверах и рамках
  • Fast
  • Упрощение (по многим параметрам) продуктов и инструментов управления (по сравнению со многими продуктами RDBMS).
  • Больше несоответствия импеданса. Хранилище подходит для данных, а не наоборот.
  • Меньше трения и более прямой доступ к данным.
  • Домен больше привязан к сохранению (в зависимости от уровня ORM "NoRM", насколько он абстрагирует бэкэнд. Я не использовал NoRM, поэтому я не могу ответить на этот вопрос.)

Ответ 2

против

  • (отсутствие/видение) долговечность (читать http://www.mikealrogers.com/2010/07/mongodb-performance-durability)
  • Без транзакций
  • Без ограничений
  • Агрегация с MapReduce медленная, и вам нужно написать код для чего-то вроде group-by
  • Отчетность сложнее, разработчик определяет отношения, но бизнес-аналитики не могут создавать свои собственные запросы, они не могут, например, делать "минус" ( "исключая" в sql server lingo)

профи

  • вы можете легко добавить новые "столбцы" и "таблицы"
  • скорость
  • sharding (все еще бета)
  • документ более точно сопоставляется с объектом, чем с набором реляционных таблиц, поэтому сопоставление становится проще.
  • Он расширяет ум

Ответ 3

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

FOR:

  • Больше операторов SQL
  • Ваша база данных похожа на ваши классы, а не наоборот.
  • Ваша "схема" более гибкая.
  • Хорошо масштабируется
  • Очень легко начать с
  • < мнение > Это круто,/мнение >

ПРОТИВ:

  • В настоящее время я пытаюсь реализовать пользовательский поставщик провайдера и поставщика роли для моего приложения mongo, но каким-то образом у моего пользовательского класса MemberShip есть поля NULL, когда я пытаюсь извлечь его из mongo.
  • Где-то я читал о драйвере С#, что он относительно молод, но стабилизирован, поэтому ожидаем некоторых изменений. (Хотя это не удержит меня)

Одна вещь, которую я заметил, что отсутствует в учебниках: Инициализируйте свои списки внутри своего объекта, иначе он выкинет ошибку при попытке .save(yourobj). Самое безопасное, что нужно сделать, это написать конструктор в своем классе, который гарантирует, что у вас нет объектов NULL внутри вашего объекта. Таким образом, вы не получите ошибку, если что-то забыли.

Ответ 4

Graph comparing speed to update records

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

Ответ 5

Вы можете найти несколько плюсов и минусов использования базы данных NoSQL (включенной MongoDB) в этом Начало работы с NoSQL. Краткое резюме было бы: другая модель данных (подумайте, нужно ли сопоставление объектной модели с "этой новой моделью", будет ли она работать хорошо), другая модель запросов (запросы MongoDB довольно эффективны, хотя по сравнению с другими), никаких транзакций (у вас есть некоторые атомарные операции, хотя).

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