Каковы преимущества использования бессхемовой базы данных, такой как MongoDB, по сравнению с реляционной базой данных?

Я привык использовать реляционные базы данных, такие как MySQL или PostgreSQL, и в сочетании с такими средами MVC, как Symfony, RoR или Django, и я думаю, что это прекрасно работает.

Но в последнее время я много слышал о MongoDB, которая является нереляционной базой данных, или, чтобы процитировать официальное определение ,

  

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

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

В каких случаях использование MongoDB (или аналогичных баз данных) лучше, чем использование «классических» реляционных баз данных? И каковы преимущества MongoDB по сравнению с MySQL в целом? Или, по крайней мере, почему это так отличается?

Если у вас есть ссылки на документацию и /или примеры, это также очень поможет.

93 голоса | спросил Guillaume Flandre 22 Jpm1000000pmFri, 22 Jan 2010 16:13:08 +030010 2010, 16:13:08

9 ответов


0

Вот некоторые преимущества MongoDB для создания веб-приложений:

  1. Модель данных на основе документов. Базовая единица хранения аналогична JSON, словарям Python, хэшам Ruby и т. Д. Это богатая структура данных, способная хранить массивы и другие документы. Это означает, что вы часто можете представлять в одной сущности конструкцию, которая потребовала бы нескольких таблиц для правильного представления в реляционном БД. Это особенно полезно, если ваши данные неизменны.
  2. Глубокая возможность запроса. MongoDB поддерживает динамические запросы к документам, используя основанный на документе язык запросов, почти такой же мощный, как SQL.
  3. Нет миграций схемы. Поскольку MongoDB не содержит схемы, ваш код определяет вашу схему.
  4. Четкий путь к горизонтальной масштабируемости.

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

http://try.mongodb.org/

ответил Kyle Banker 22 Jpm1000000pmFri, 22 Jan 2010 18:27:01 +030010 2010, 18:27:01
0

Есть множество преимуществ.

Например, ваша схема базы данных будет более масштабируемой, вам не придется беспокоиться о переносах, код будет удобнее писать ... Например, вот один из кодов моей модели:

class Setting
  include MongoMapper::Document

  key :news_search, String, :required => true
  key :is_availaible_for_iphone, :required => true, :default => false

  belongs_to :movie
end

Добавление ключа - это просто добавление строки кода!

В долгосрочной перспективе появятся и другие преимущества, такие как улучшенная масштабируемость и скорость.

... Но имейте в виду, что нереляционная база данных не лучше , чем реляционная . Если ваша база данных имеет много связей и нормализации, возможно, не имеет смысла использовать что-то вроде MongoDB. Это все о поиске подходящего инструмента для работы.

Чтобы прочитать больше, я бы посоветовал взглянуть на " Почему я считаю Mongo для баз данных тем же, чем Rails для Frameworks " или этот пост на веб-сайте mongodb. Чтобы быть в восторге и, если вы говорите по-французски, ознакомьтесь с этой статьей , в которой объясняется, как настроить MongoDB с нуля.

Редактировать. Я почти забыл рассказать вам о этом Railscast от Райан . Это очень интересно и заставляет вас хотеть начать прямо сейчас!

ответил marcgg 22 Jpm1000000pmFri, 22 Jan 2010 16:21:20 +030010 2010, 16:21:20
0

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

Это также означает, что все, что вы добавляете в него, остается полностью лишенным смысла после того, как вы это сделали.

Некоторые считают, что это серьезный недостаток, другие - нет.

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

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

ответил Erwin Smout 23 Jam1000000amSat, 23 Jan 2010 02:03:15 +030010 2010, 02:03:15
0

MongoDB был показан в еженедельнике FLOSS на этой неделе - http://twit.tv/floss105 База данных, использующая аналогичную концепцию, - CouchDB, которая была представлена ​​в другом еженедельнике FLOSS: http://twit.tv/floss36

Я думаю, что стоит послушать тех, кто помимо ссылки предоставлены @marcgg

ответил Patrick 22 Jpm1000000pmFri, 22 Jan 2010 16:26:01 +030010 2010, 16:26:01
0

Мой опыт работы с Postgres и Mongo после работы с обеими базами данных в моих проектах.

Postgres (СУБД)

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

Самое большое преимущество пребывания в Postgres - это то, что у нас есть лучшее из обоих миров. Мы можем хранить данные в JSONB с ограничениями, согласованностью и скоростью. С другой стороны, мы можем использовать все функции SQL для других типов данных. Базовый механизм очень стабилен и хорошо справляется с хорошим диапазоном объемов данных. Он также работает на выбранном вами оборудовании и операционной системе. Postgres предоставляет возможности NoSQL наряду с полной поддержкой транзакций, хранит документы JSON с ограничениями на данные полей.

Общие ограничения для Postgres

Горизонтальное масштабирование Postgres значительно сложнее, но выполнимо.

Операции быстрого чтения не могут быть полностью выполнены с помощью Postgres.

НЕТ баз данных SQL

Монго БД (Wired Tiger)

MongoDB может превзойти Postgres в измерении «горизонтальной шкалы». Хранение JSON - это то, для чего оптимизирован Mongo. Mongo хранит свои данные в двоичном формате, называемом BSONb, который (приблизительно) является просто двоичным представлением надмножества JSON. MongoDB хранит объекты в точности так, как они были спроектированы. Согласно MongoDB, для приложений с интенсивной записью Монго говорит, что новый механизм (Wired Tiger) дает пользователям увеличение производительности записи до 10 раз (я должен попробовать это) с 80-процентным сокращением использования хранилища, помогая снизить затраты на хранение. добиться большего использования аппаратного обеспечения.

Общие ограничения MongoDb

Использование механизма хранения без схемы приводит к проблеме неявных схем. Эти схемы не определяются нашим механизмом хранения, а определяются исходя из поведения и ожиданий приложения.

Автономные технологии NoSQL не соответствуют стандартам ACID, поскольку они жертвуют защитой критических данных в пользу высокой пропускной способности для неструктурированных приложений. Несложно применить ACID к базам данных NoSQL, но это сделает базу данных медленной и до некоторой степени негибкой. «Большинство ограничений NoSQL были оптимизированы в новых версиях и выпусках, которые в значительной степени преодолели свои предыдущие ограничения».

ответил ProgrammerPanda 21 MarpmTue, 21 Mar 2017 12:17:49 +03002017-03-21T12:17:49+03:0012 2017, 12:17:49
0

Это все о компромиссах. MongoDB быстрый, но не ACID, у него нет транзакций. Это лучше, чем MySQL в некоторых случаях использования и хуже в других.

ответил AABBCCDD 23 Jam1000000amSat, 23 Jan 2010 01:15:08 +030010 2010, 01:15:08
0

Сильфонные линии, написанные на MongoDB: полное руководство.

  

Есть несколько веских причин:

     
  1. Хранение разных видов документов в одной коллекции может быть   кошмар для разработчиков и администраторов. Разработчики должны убедиться,   что каждый запрос возвращает только документы определенного вида или   что код приложения, выполняющий запрос, может обрабатывать документы   разные формы. Если мы запрашиваем сообщения в блоге,   отсеять документы, содержащие данные об авторе.
  2.   
  3. Получить список коллекций намного быстрее, чем извлечь   список типов в коллекции. Например, если у нас был ключ типа   в коллекции, в которой говорилось, был ли каждый документ «обезжиренным»   «Целый» или «коренастый обезьяна» документ, это будет гораздо медленнее   найти эти три значения в одной коллекции, чем иметь три   отдельные коллекции и запрос их имен
  4.   
  5. Объединение документов одного вида в одну коллекцию   допускает локальность данных. Получение нескольких сообщений в блоге от   коллекция, содержащая только сообщения, вероятно, потребует меньше диска   стремится получить те же сообщения из коллекции, содержащей   сообщения и данные автора.
  6.   
  7. Мы начинаем навязывать некоторую структуру нашим документам, когда создаем   индексов. (Это особенно верно в случае уникальных индексов.)   Эти индексы определяются для каждой коллекции. Размещая только документы   одного типа в одну коллекцию, мы можем проиндексировать наш   коллекции более эффективно
  8.   
ответил Nanhe Kumar 1 J000000Monday13 2013, 17:06:17
0

После вопроса о базах данных с текстовым хранилищем) я взглянул на MongoDB и подобные системы.
Если я правильно понял, они должны быть проще в использовании и настройке, и гораздо быстрее. Возможно также более безопасный, поскольку отсутствие SQL предотвращает внедрение SQL ...
Очевидно, MongoDB используется в основном для веб-приложений.
По сути, они утверждают, что сами базы данных не подходят для сложных запросов, интеллектуального анализа данных и т. Д. Но они позволяют быстро получать много плоских данных.

ответил PhiLho 22 Jpm1000000pmFri, 22 Jan 2010 16:21:50 +030010 2010, 16:21:50
0
  1. MongoDB поддерживает поиск по полям, поиск по регулярному выражению. Включает определенные пользователем функции java-скрипта.
  2. MongoDB можно использовать в качестве файловой системы, используя преимущества балансировки нагрузки и функции репликации данных на нескольких машинах для хранения файлов.
ответил user2982063 18 WedEurope/Moscow2013-12-18T10:02:34+04:00Europe/Moscow12bEurope/MoscowWed, 18 Dec 2013 10:02:34 +0400 2013, 10:02:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132