Я привык использовать реляционные базы данных, такие как MySQL или PostgreSQL, в сочетании с фреймворками MVC, такими как Symfony, RoR или Django, и я думаю, что это отлично работает.
Но в последнее время я много слышал о MongoDB, которая является нереляционной базой данных, или, если цитировать официальное определение ,
масштабируемая, высокопроизводительная база данных с открытым исходным кодом, свободная от схем и ориентированная на документы.
Я действительно заинтересован в том, чтобы быть на высоте, и хочу знать обо всех вариантах, которые у меня будут для следующего проекта, и выбирать лучшие технологии.
В каких случаях использование MongoDB (или подобных баз данных) лучше, чем использование «классических» реляционных баз данных? И каковы в целом преимущества MongoDB перед MySQL? Или, по крайней мере, почему все так иначе?
Если у вас есть указатели на документацию и / или примеры, это тоже будет большим подспорьем.
Есть множество преимуществ.
Например, ваша схема базы данных будет более масштабируемой, вам не придется беспокоиться о миграциях, код будет приятнее писать ... Например, вот один из кода моей модели:
Добавление ключа - это просто добавление строки кода!
Есть и другие преимущества, которые появятся в долгосрочной перспективе, например, лучшая масштабируемость и скорость.
... Но имейте в виду, что нереляционная база данных ничем не лучше реляционной . Если в вашей базе данных много отношений и нормализации, может быть мало смысла использовать что-то вроде MongoDB. Все дело в поиске подходящего инструмента для работы.
Чтобы прочитать больше, я бы порекомендовал взглянуть на « Почему я думаю, что Mongo для баз данных такой же, как Rails для Frameworks » или этот пост на сайте mongodb. Чтобы получить удовольствие и если вы говорите по-французски, прочтите эту статью, в которой объясняется, как настроить MongoDB с нуля.
Изменить: Я почти забыл рассказать вам об этом railscast по Райан . Это очень интересно и сразу же хочется начать!
источник
Преимущество отсутствия схемы состоит в том, что вы можете выгружать все, что находится в нем, и ни у кого никогда не будет никаких оснований жаловаться на это или говорить, что это неправильно.
Это также означает, что все, что вы в него бросаете, остается полностью лишенным смысла после того, как вы это сделали.
Некоторые назвали бы это серьезным недостатком, другие - нет.
Тот факт, что реляционная база данных имеет устоявшуюся схему, является следствием того факта, что она имеет хорошо установленный набор экстенсиональных предикатов, которые позволяют нам придавать значение тому, что записано в базе данных и которые являются также необходимое предварительное условие для нас.
Без четко установленной схемы, без экстенсиональных предикатов и без экстенсиональных преикатов у пользователя нет возможности извлечь какой-либо смысл из того, что в него напихано.
источник
MongoDB была представлена в еженедельнике FLOSS на этой неделе - http://twit.tv/floss105 База данных, использующая аналогичную концепцию, - это CouchDB, которая была представлена на другом еженедельнике FLOSS: http://twit.tv/floss36
Я думаю, что их стоит послушать в дополнение к ссылкам, предоставленным @marcgg
источник
Мой опыт работы с Postgres и Mongo после работы с обеими базами данных в моих проектах.
Postgres (СУБД)
Postgres рекомендуется, если ваши будущие приложения имеют сложную схему, которая требует большого количества объединений или все данные имеют отношения, или если у нас есть тяжелая запись. Postgres имеет открытый исходный код, работает быстрее, совместим с ACID и использует меньше памяти на диске, а также обеспечивает хорошую производительность для хранилища JSON и включает полную сериализуемость транзакций с 3 уровнями изоляции транзакций.
Самым большим преимуществом использования Postgres является то, что у нас есть лучшее из обоих миров. Мы можем хранить данные в JSONB с ограничениями, единообразием и скоростью. С другой стороны, мы можем использовать все функции SQL для других типов данных. Базовый движок очень стабилен и хорошо справляется с большим диапазоном объемов данных. Он также работает на выбранном вами оборудовании и операционной системе. Postgres предоставляет возможности NoSQL вместе с полной поддержкой транзакций, храня документы JSON с ограничениями на данные полей.
Общие ограничения для Postgres
Масштабирование Postgres по горизонтали значительно сложнее, но выполнимо.
Операции быстрого чтения не могут быть полностью реализованы с помощью Postgres.
БЕЗ баз данных SQL
Mongo DB (проводной тигр)
MongoDB может превзойти Postgres в измерении «горизонтального масштаба». Хранение JSON - это то, для чего оптимизирован Mongo. Mongo хранит свои данные в двоичном формате BSONb, который (примерно) является просто двоичным представлением надмножества JSON. MongoDB хранит объекты в точности так, как они были разработаны. Согласно MongoDB, для приложений с интенсивной записью, по словам Монго, новый движок (Wired Tiger) дает пользователям до 10-кратного увеличения производительности записи (я должен попробовать это) с 80-процентным сокращением использования хранилища, что помогает снизить затраты на хранилище. , добиться большего использования оборудования.
Общие ограничения MongoDb
Использование механизма хранения без схемы приводит к проблеме неявных схем. Эти схемы не определяются нашим механизмом хранения, а определяются на основе поведения и ожиданий приложения.
Автономные технологии NoSQL не соответствуют стандартам ACID, потому что они жертвуют защитой критически важных данных в пользу высокой пропускной способности для неструктурированных приложений. Применить ACID к базам данных NoSQL несложно, но это в некоторой степени сделает базу данных медленной и негибкой. «Большинство ограничений NoSQL были оптимизированы в новых версиях и выпусках, которые в значительной степени преодолели предыдущие ограничения».
источник
Все дело в компромиссах. MongoDB работает быстро, но не ACID, в нем нет транзакций. В одних случаях он лучше MySQL, в других - хуже.
источник
Ниже приведены строки, написанные в MongoDB: полное руководство.
источник
После вопроса о базах данных с текстовым хранилищем) я взглянул на MongoDB и подобные системы.
Если я правильно понял, они должны быть проще в использовании и настройке и намного быстрее. Возможно, также более безопасен, поскольку отсутствие SQL предотвращает внедрение SQL ...
Очевидно, MongoDB используется в основном для веб-приложений.
По сути, и они сами заявляют, что эти базы данных не подходят для сложных запросов, интеллектуального анализа данных и т. Д. Но они блестят при быстром извлечении большого количества плоских данных.
источник
источник