4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

MySQL и MongoDB — когда и что лучше использовать

Разница между SQL и NoSQL: MySQL и MongoDB

При выборе базы данных предстоит принять важное решение: остановиться на реляционной (SQL) или нереляционной (NoSQL) структуре БД. Оба этих варианта вполне жизнеспособны, но между ними есть различия, которые пользователи должны учитывать при принятии решения. В этой статье мы рассказываем, в чем состоит разница SQL и NoSQL, а также обсуждаем еще две важные вещи: выбрать MySQL или MongoDB.

Основные различия

Представьте себе город (назовем его А), в котором все говорят на одном языке. На нем строятся все бизнес-процессы, этот язык используется во всех формах общения. Словом, жители этого города понимают друг друга и исследуют окружающий мир только посредством этого языка. Если сменить язык в одном месте, все будут сбиты с толку.

А теперь представьте другой город Б, в котором все дома говорят на разных языках. Все по-разному взаимодействуют с миром, нет никакого «универсального» способа понимания или устойчивой организации общения. Если один что-то изменит, это ни на кого не повлияет.

Этот пример помогает проиллюстрировать одно из основных различий между SQL (реляционной) и NoSQL (нереляционной) базами данных. Из него уже можно сделать определённые выводы.

Реляционные базы данных используют язык структурированных запросов (SQL) для того, чтобы обрабатывать данные и управлять ими. С одной стороны, это довольно удобно: SQL – один из наиболее разносторонних и общеупотребимых вариантов, так что это безопасный выбор. Также этот язык подходит для сложных запросов. С другой стороны, с этим языком идут определенные ограничения. В SQL нужно использовать заданные наперед схемы и определять структуру данных перед началом работы с нею. К тому же, все данные должны иметь одну и ту же структуру. Как в случае с городом А, перемена в структуре может обернуться сложностями и разрушить всю систему.

Нереляционные базы данных, напротив, обладают гибкими схемами для неструктурированных данных. Они могут храниться по-разному: в колонках, документах, графах или в виде хранилища «ключ-значение». Эта гибкость позволяет:

  • Можно создавать документы, не определяя их структуру заранее;
  • Каждый документ может обладать собственной уникальной структурой;
  • Синтаксис может различаться в разных базах данных;
  • В процессе работы можно добавлять новые поля.

Масштабируемость

В большинстве случаев SQL БД можно масштабировать вертикально, то есть можно проводить увеличение нагрузки на каждом отдельном сервере, повышая мощности ЦП, ОЗУ, твердотельного диска. А вот NoSQL БД можно масштабировать горизонтально. Это значит, что нагрузка распределяется благодаря разделению данных или добавлению большего количества серверов. Это как если бы вы добавляли больше этажей к зданию либо добавляли больше зданий к району. В последнем варианте система может получиться более крупной и мощной. Именно поэтому для крупных или часто меняющихся БД обычно выбирают NoSQL.

Структура

SQL БД имеют форму таблиц, а в NoSQL БД данные представляются в виде документов, пар «ключ-значение», графов или хранилищ wide-column. Из-за этого реляционные (SQL) базы лучше использовать для приложений, в которых нужно переходить между несколькими записями (например, система бухучета), или для систем устаревшего вида, которые при создании имели реляционную структуру.

Примерами SQL БД являются ySQL, Oracle, PostgreSQL и Microsoft SQL Server, а NoSQL БД – MongoDB, BigTable, Redis, RavenDB Cassandra, HBase, Neo4j и CouchDB.

SQL против NoSQL: MySQL либо MongoDB

Раз уж мы разобрались, в чем состоит разница SQL и NoSQL, рассмотрим ключевые различия между ними на примере MySQL и MongoDB.

MySQL: SQL (реляционная) база данных

Ниже представлены сильные стороны MySQL:

  • Сформированность: MySQL – хорошо известная база данных, то есть она обладает крупным коммьюнити, широкими возможностями тестирования и стабильностью;
  • Совместимость: MySQL доступна на всех основных платформах, включая Linux, Windows, Mac, BSD и Solaris. Также у нее есть адаптеры для таких языков, как Node.js, Ruby, C#, C++, Java, Perl, Python и PHP, то есть эта система не ограничена языком запросов SQL;
  • Экономичность: Система является открытой и бесплатной;
  • Воспроизводимость: Базу данных MySQL можно использовать на разных узлах, что позволяет снизить нагрузку и повысить масштабируемость и доступность приложения;
  • Разделение данных: Несмотря на то что эту процедуру можно проводить на не всех SQL БД, серверы MySQL позволяют это сделать. Это не только экономично, но и может быть полезно для приложения.

MongoDB: NoSQL (нереляционная) база данных

Ниже представлены сильные стороны MongoDB:

  • Динамичность: Как говорилось ранее, динамическая схема гарантирует гибкость, позволяющую менять структуру без редактирования существующих данных;
  • Масштабируемость: MongoDB можно масштабировать горизонтально, благодаря чему уменьшается нагрузка для бизнеса;
  • Легкость в управлении: Для этой базы данных не требуется администратор. Так как она достаточно дружелюбна в отношении юзеров, воспользоваться ей могут как разработчики, так и администраторы;
  • Скорость: Эта БД показывает отличные результаты в работе с короткими запросами;
  • Гибкость: В MongoDB можно добавлять новые столбцы и поля, не влияя на уже существующие записи и производительность приложения.

Какую базу данных выбрать для своего проекта?

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

MongoDB, напротив, подойдет для бизнесов с быстрым ростом или для баз данных, в которых не используются определенные схемы. Точнее, если у вас не получается определить схему для БД или структуры постоянно меняются (как часто бывает с мобильными приложениями, аналитикой, работающей в реальном времени, системами менеджмента контента и т. д.), выбирайте MongoDB.

MySQL и MongoDB — когда и что лучше использовать

115891 просмотра

11 ответа

Мы предлагаем платформу для видео- и аудио-клипов, фотографий и векторных графиков. Мы начали с MySQL в качестве базы данных и недавно включили MongoDB для хранения всей метаинформации файлов, поскольку MongoDB лучше соответствует требованиям. Например: у фотографий может быть информация Exif , у видео могут быть звуковые дорожки, где мы также хотим хранить метаинформацию. Видео и векторная графика не имеют общей метаинформации и т. Д., Поэтому я знаю, что MongoDB идеально подходит для хранения этих неструктурированных данных и сохранения их в поиске.

Однако мы продолжаем разработку нашей платформы и добавление функций. Теперь одним из следующих шагов станет форум для наших пользователей. Возникает вопрос: используйте базу данных MySQL, что было бы хорошим выбором для хранения форумов и форумов и т. Д. Или для этого использовать MongoDB?

Поэтому возникает вопрос: когда использовать MongoDB и когда использовать РСУБД. Что бы вы взяли, mongoDB или MySQL, если бы у вас был выбор и зачем вы его принимали?

Ответы (11)

633 плюса

MongoDB не является хранилищем ключей / ценностей, это немного больше. Это определенно не RDBMS. Я не использовал MongoDB в производстве, но я использовал его для небольшого построения тестового приложения, и это очень классный кусок набора. Кажется, он очень эффективен и либо имеет, либо скоро будет отказоустойчивостью и авто-осколками (он же будет масштабироваться). Я думаю, что Монго может быть самым близким к замене РСУБД, которое я видел до сих пор. Он не будет работать для всех наборов данных и шаблонов доступа, но он создан для вашего типичного материала CRUD. Хранение того, что по существу является огромным хэшем, и возможность выбора на любом из этих ключей, – это то, что большинство людей используют реляционную базу данных.Если ваша БД – 3NF, и вы не делаете никаких объединений (вы просто выбираете кучу таблиц и объединяете все объекты, AKA, что большинство людей делают в веб-приложении), MongoDB, вероятно, запустит задницу для вас.

Читать еще:  Настройка окна Проводника в Windows 10

Затем в заключении:

Реальным моментом является то, что если вас отвлекают от создания чего-то супер-потрясающего, потому что вы не можете выбрать базу данных, вы делаете это неправильно. Если вы знаете mysql, просто используйте его. Оптимизируйте, когда вам действительно нужно. Используйте его как магазин ak / v, используйте его как rdbms, но ради бога, создайте свое приложение-убийца! Ничто из этого не имеет значения для большинства приложений. Facebook все еще использует MySQL, много. Википедия использует MySQL, много. FriendFeed использует MySQL, много. NoSQL – отличный инструмент, но это, конечно же, не будет вашим конкурентным преимуществом, оно не сделает ваше приложение горячим, и, прежде всего, вашим пользователям это не понравится.

На что я буду строить следующее приложение? Возможно, Postgres. Я буду использовать NoSQL? Может быть. Я мог бы также использовать Hadoop и Hive. Я мог бы хранить все в плоских файлах. Возможно, я начну взламывать Маглева. Я буду использовать все, что лучше для работы. Если мне нужна отчетность, я не буду использовать NoSQL. Если мне нужно кэширование, я, вероятно, буду использовать Токийский тиран. Если мне нужна ACIDity, я не буду использовать NoSQL. Если мне понадобится тонна счетчиков, я буду использовать Редис. Если мне нужны транзакции, я буду использовать Postgres. Если у меня будет тонна одного типа документов, я, вероятно, буду использовать Mongo. Если мне нужно написать 1 миллиард объектов в день, я бы, вероятно, использовал Волдеморта. Если мне нужен полнотекстовый поиск, я бы, вероятно, использовал Solr. Если мне нужен полнотекстовый поиск волатильных данных, я бы, вероятно, использовал Sphinx.

Мне нравится эта статья, я нахожу ее очень информативной, она дает хороший обзор ландшафта и шумихи NoSQL. Но, и это самая важная часть, это действительно помогает задавать себе правильные вопросы, когда дело касается выбора между РСУБД и NoSQL. Стоит прочитать ИМХО.

169 плюса

Через два года, используя MongoDb для социального приложения, я стал свидетелем того, что на самом деле означает жить без SQL RDBMS.

  1. Вы в конечном итоге записываете задания, чтобы делать такие вещи, как объединение данных из разных таблиц / коллекций, то, что RDBMS сделает для вас автоматически.
  2. Возможности запроса с NoSQL сильно искалечены. MongoDb может быть самым близким к SQL, но он все еще очень далеко позади. Доверьтесь мне. SQL-запросы являются супер-интуитивными, гибкими и мощными. Запросов MongoDb нет.
  3. Запросы MongoDb могут извлекать данные только из одной коллекции и использовать только один индекс. И MongoDb, вероятно, является одной из самых гибких баз данных NoSQL. Во многих сценариях это означает, что для поиска соответствующих записей требуется больше обращений к серверу. И затем вы начинаете де-нормализуя данные, что означает фоновые задания.
  4. Тот факт, что он не является реляционной базой данных, означает, что у вас не будет (по мнению некоторых из них плохое выполнение) ограничений внешнего ключа, чтобы обеспечить согласованность ваших данных. Я заверяю вас, что в конечном итоге вы создадите несоответствия данных в своей базе данных. Будь готов. Скорее всего, вы начнете писать процессы или проверки, чтобы ваша база данных была последовательной, что, вероятно, не будет работать лучше, чем позволить РСУБД сделать это за вас.
  5. Забудьте о зрелых фреймворках, таких как спящий режим.

Я считаю, что 98% всех проектов, вероятно, лучше с типичной SQL RDBMS, чем с NoSQL.

Автор: Marquez Размещён: 07.10.2012 05:00

26 плюса

для хранения этих неструктурированных данных

Как вы сказали, MongoDB лучше всего подходит для хранения неструктурированных данных. И это может организовать ваши данные в формате документа. Эти альдегиторы RDBMS, называемые хранилищами данных NoSQL ( MongoDB , CouchDB , Voldemort ), очень полезны для приложений, которые масштабируются массово и требуют более быстрого доступа к данным из этих больших хранилищ данных.

И реализация этих баз данных проще, чем обычная СУБД. Так как это простые двоичные объекты с ключом или документами, которые непосредственно сериализуются на диск. Эти хранилища данных не применяют свойства ACID и любые схемы . Это не обеспечивает возможности транзакций . Таким образом, это может масштабироваться, и мы можем добиться более быстрого доступа (как для чтения, так и для записи).

Но, напротив, RDBM применяет ACID и схемы на основе данных. Если вы хотите работать со структурированными данными, вы можете продолжить работу с RDBM.

Я бы выбрал MySQL для создания форумов для такого рода вещей. Потому что это не будет масштабным. И это очень простое (общее) приложение, которое имеет структурированные отношения между данными.

9 плюса

Обратите внимание, что Mongo по сути сохраняет JSON. Если ваше приложение имеет дело с большим количеством объектов JS (с вложением), и вы хотите сохранить эти объекты, тогда есть очень сильный аргумент в пользу использования Mongo. Это делает ваши слои DAL и MVC ультратонкими, потому что они не разупаковывают все свойства объекта JS и не пытаются вставить их в структуру (схему), в которую они, естественно, не входят.

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

7 плюса

Я бы сказал, используя СУРБД, если вам нужны сложные транзакции. В противном случае я бы пошел с MongoDB – более гибким, чтобы работать, и вы знаете, что он может масштабироваться, когда вам нужно. (Я предвзятый, я работаю над проектом MongoDB)

Автор: mdirolf Размещён: 25.09.2009 01:33

7 плюса

Кому нужны распределенные, ошаркированные форумы? Возможно, Facebook, но если вы не создаете Facebook-конкурента, просто используйте Mysql, Postgres или что вам больше всего нравится. Если вы хотите попробовать MongoDB, хорошо, но не ожидайте, что он сделает магию для вас. У него будут свои причуды и общая гадость, как и все остальное, так как я уверен, что вы уже обнаружили, действительно ли вы уже работали над этим.

Читать еще:  Кошелек wmr на андроид. Что вас ждет в мобильном клиенте Вебмани

Конечно, MongoDB может быть раздутым и казаться легким на поверхности, но вы столкнетесь с проблемами, которые уже преодолели более зрелые продукты. Не завлекайтесь так легко, а скорее ждите, пока «nosql» не созреет или не умрет.

Лично я думаю, что «nosql» увянет и умрет от фрагментации, поскольку нет установленных стандартов (почти по определению). Поэтому я не буду делать ставку на него для любых долгосрочных проектов.

Единственное, что может сохранить «nosql» в моей книге, – это то, что оно может легко интегрироваться в Ruby или аналогичные языки и сделать язык «постоянным», почти без каких-либо накладных расходов при кодировании и дизайне. Это может произойти, но я буду ждать до тех пор, а не сейчас, И, конечно, это должно быть более зрелым.

Кстати, почему вы создаете форум с нуля? Существует множество форумов с открытым исходным кодом, которые можно настроить, чтобы соответствовать большинству требований, если только вы действительно не создаете «Следующее поколение форумов» (что я сомневаюсь).

Автор: Fred Размещён: 19.11.2010 03:02

4 плюса

Я видел, что многие компании используют MongoDB для анализа в реальном времени из журналов приложений. Его привязка к схеме действительно подходит для журналов приложений, где схема записи имеет тенденцию меняться время от времени. Кроме того, его функция Capped Collection полезна, потому что она автоматически очищает старые данные, чтобы сохранить данные в памяти.

Это одна из областей, в которой я действительно думаю, что MongoDB подходит, но MySQL / PostgreSQL рекомендуется в целом. В Интернете много документов и ресурсов разработчиков, а также их функциональность и надежность.

4 плюса

2 основные причины, по которым вы, возможно, захотите предпочесть Монго, – это

  • Гибкость в дизайне схемы (хранилище документов типа JSON).
  • Масштабируемость. Просто добавьте узлы, и она может масштабироваться горизонтально.

Он подходит для приложений с большими объемами данных. RDBMS не подходит для больших данных.

4 плюса

Посетив Devoxx 2011 и посетив презентацию от 10Gen, я написал небольшой блог, сравнивающий MongoDB с базами данных РСУБД. MongoDB является одним из популярных Nosql dbs. См. Ниже:

3 плюса

Вы знаете, все это о присоединениях и «сложных транзакциях», но сам Монти, много лет назад, объяснил «необходимость» для COMMIT / ROLLBACK, сказав, что «все, что делается в логических классах (а не база данных) в любом случае »- так что это одно и то же снова. Нужен немой, но невероятно аккуратный и быстрый механизм хранения / извлечения данных, на 99% того, что делают веб-приложения.

Автор: FYA Размещён: 01.07.2011 04:48

1 плюс

Как и раньше, вы можете выбирать между множеством вариантов, взглянуть на все эти варианты: http://kkovacs.eu/cassandra-vs-mongodb-vs-couchdb-vs-redis

Я предлагаю найти наилучшую комбинацию: MySQL + Memcache действительно замечательный, если вам нужен ACID, и вы хотите присоединиться к некоторым таблицам. MongoDB + Redis идеально подходит для хранения документов. Neo4J идеально подходит для базы данных графов

Что я делаю: я начинаю с MySQl + Memcache, потому что я использую, а затем я начинаю использовать другие базы данных. В одном проекте вы можете объединить MySQL и MongoDB, например!

MongoDB vs SQL

Вопрос с дивана, потому что ни то ни другое я ни в каком серьезном проекте не использовал:

Сейчас становится популярным стек технологий MEAN (MongoDB ExpressJS AngularJS NodeJS). И вроде это стильно модно молодежно, а вроде и не для всех проектов подходит – ведь MongoDB это NoSQL, и я где-то прочитал, что там в отличие от SQL систем баз данных не соблюдается ACID, не поддерживаются JOIN’ы, но лучше скейлится.

1. Что именно из ACID не соблюдается, для каких веб-сайтов это не важно, а для каких ACID нужен?

2. Как жить без джоинов? Или они вообще не так уж нужны? Когда они нужны, а когда нет? А если вдруг на готовом сайте, использующем MongoDB понадобятся, то что делать?

3. Почему MongoDB лучше скейлится? Кому нужен скейлинг, кому нет? Что же делают люди, которым и скейлиться нужно, и джоины делать?

4. Можно ли в стеке MEAN MongoDB заменить на какую-нибудь реляционную базу данных (в идеале на PostgresQL – он вроде самый годный)?

1. 70% web-developer’ов про транзации слышали только в спорах

2. Раз не нужны – значит не нужны вообще. И почему они понадобятся, если раньше небыли нужны?

3. Потомоу что енет джойнов. Скейлинг нужен тем – кто проседает по IO в rdbms. Кому всё надо – берут оракл с партиционированием и мегасервер за тонны денег.

4. Можно, только нужны ли в JS сложные транзакции? А как жить с асинхронщиной, когда она полочит пол-БД ради того самого ACID-a.

Как жить без джоинов? Или они вообще не так уж нужны? Когда они нужны, а когда нет?

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

А если вдруг на готовом сайте, использующем MongoDB понадобятся, то что делать?

Джойнить вручную, на коленке. Это не всегда плохо, в общем-то, но лучше с джойнами.

Можно ли в стеке MEAN MongoDB заменить на какую-нибудь реляционную базу данных (в идеале на PostgresQL – он вроде самый годный)?

3 — спорно и зависит от ситуации.

Можно ли в стеке MEAN MongoDB заменить на какую-нибудь реляционную базу данных (в идеале на PostgresQL – он вроде самый годный)?

В постгрес 9.4 добавили тип данных JSONB – та же монга, только с ACID, улучшенной производительностью и более компактным хранением данных на диске.

Чувак, можно делать всё что хочешь. Выкинуть монгу – не проблема. На самом деле писать код с монгой, кoучдатaбейсом, арангодатабейсом – гораздо быстрее с нуля, те, кто используют обычные субд навроде mysql для ускорения написания кода тоже юзают аналог монго-подхода: orm. Там данными управляешь не как записями в таблице, а как объектами языка, через точку модифицируя их методами. Скейлятся обычные и документоориентированные субд примерно одинаково легко. Т.ч. никакой охеренной панацеи в монго нет. Да, могут быть какие-то узкие места, в которых монго вырвет вперёд – например: одновременная запись однотипных документов. Но на типовых задачах монго/не монго – похеру.

Но на типовых задачах монго/не монго – похеру.

Что джоины? 🙂 Джоины нужны, джоины за меня собирает ORM, я джоины не писал лет 8 уже. То же с монгой: там все данные иерархически вкладываются в объект, и не нужно скакать и собирать данные из 2-ух разных мест. Короче, вопрос в архитектуре данных, её нужно просто перевести в иерархическую. Мне подход реляционных не очень нравится – всё есть запись. Это хорошо для бухгалтерии, но не для современного веб.

Это хорошо для бухгалтерии, но не для современного веб.

В том-то и оно, что кому-то и бухгалтерия нужна, а её на MongoDB не сделаешь.

Читать еще:  Пропала языковая панель Windows xp как восстановить?

Не повторяй эту утку, ничего оно не заменяет. Почитай доки, возможность хранить json – это 1% фичей монги.

1. ACID нужен для сохранения связанных данных. Mongo можно применять если у тебя нет связей между сущностями. Если эти связи есть монга не для тебя.

2. В монге у тебя все выборки на совести приложения – крутись как хочешь.

3. Потому что эту часть сделали частью основного функционала. С нормальной БД тебе бы пришлось настраивать репликацию.

4. Да, всегда. Функционально. Но можно получить проблем на месте взаимодействия ноды с БД.

Возьми в руки англорусский словарик. Сразу половина слов тебе станет понятнее – таких глупых вопросов возникать не будет.

из 2-ух разных мест

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

за меня собирает ORM,

что за ORM такой, который хорошо работает? Всегда настолько хорошо работает, что не нужно писать SQL, чтобы не получить просадку по производительности в 100 и более раз?

джоины за меня собирает ORM

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

но не для современного веб

что такое современное веб?

а транзакции кто для тебя собирает?

Тоже ORM. Уже года 3-4 как все мои orm поддерживают транзакции. Руками надо писать код, кода не много. Многопоточно работает тоже окей.

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

Предлагаю для поиска использовать специальные поисковые движки. Lucene, Sphinx, http://www.elasticsearch.org/.

что за ORM такой, который хорошо работает?

SqlAlchemy, http://ponyorm.com/, Django ORM. Нет, просадок не замечено. В среднем ORM отрабатывает 3-5 мс. У меня template (View) может рендериться дольше, особенно в Django.

что такое современное веб?

Это платформа, основанная на html5/Webkit, javascript/v8, svg, много графики и видео, преимущественно визуальная составляющая информации в сети, а также музыки в .aac/.mp4, социальная составляющая всех сервисов, хранение данных пользователей в облаке (в пуле серверов).

а, ну понятно, у тебя такая область специфическая.

Почему специфическая? Я уверен, большинство веб-разработчиков работает с html/javascript/node.js/django.

возможность хранить json – это 1% фичей монги

Странно, а я думал, что БД нужна в основном для хранения данных и их извлечения/изменения с помощью запросов.

Индексы по полям json (в т.ч. по произвольным выражениям, зависящим от полей документа) в постргресе тоже поддерживаются

если делать информационные сайты – наверное. У меня вычисления, аналитика, статистика, сбор этой фигни – время тратящееся на них (например, какой-то репорт типа «выведи мне статистику лучших игроков за танк Т-34» или «дайте все транзакции россия-беларусь за 2014 год, пожалуйста») может занять часы – совсем несопоставимо по порядку величин с отрисовкой вьюхи

большинство веб-разработчиков работает с html/javascript/node.js/django

то-то все вакансии на hh хотят PHP xD

Ага, и Дельфи. Раша-бизнес. Для аналитики есть java elasticи всякие и си-расширения для питона. У нас тоже на проекте есть машинное обучение и искуственный интеллект, но морды то нужны в браузере 😉

«Хранение данных и их извлечения/изменения с помощью запросов» – это очень обширная тема сама по себе. Еще раз говорю, читай доки по монге.

filter/map/reduce спасают от джоинов

PS но таки MEAN стек очень плох.

Вопрос с дивана

Ответ с дивана: почитай про CAP-теорему, посмотри где монга, а где постгря в этом треугольнике. Выводы сделаешь самостоятельно.

а вот пропробуй на диване mysql 5.6

Оно еще до сих пор есть? Лет десять назад запомнилось как один препод сказал: если сделать то-то и то-то, то оно и не видно, что программа сделана на делфи.

1. Что именно из ACID не соблюдается, для каких веб-сайтов это не важно, а для каких ACID нужен?

ACI поддерживается на уровне 1 документа в 1 коллекции. В монге нет транзакций, поэтому случай для SQL транзакция-insert-update-delete-стоп в монге невозможен. В ее случае это будет три разных операции, если в момент между insert-update-delete произойдет чтение данных другим процессом, то он увидет, скажем свежий insert, но не увидет update и delete. Эту проблему решили ребята в форке TokuMX, там есть поддержка транзакций.

2. Как жить без джоинов?

Костыли на внутреннем JS. Не следил давно за MongoDB, но в 2.4 это было далеко-далеко от понятия PL/SQL. Т.е. что-то можно делать. На выходе получаем процедуру, которая делает map-reduce (возможно, в из нескольких запросов подряд в разные места) и отдает документы в нужном формате.

3. Почему MongoDB лучше скейлится?

By design. В частности мастер-мастер, реплики, арбитер все сделано из коробки. Минус в том, что эти процессы, как и отсутсвие транзакций приводят к одному и тому же побочному эффекту: все происходит асинхронно и поэтому приложение должно «понимать», когда что-то не так (например, insert в другую коллекцию только производится и надо подождать/отклонить запрос/т.п.

Т.е. что-то можно делать. На выходе получаем процедуру, которая делает map-reduce и отдает документы в нужном формате.

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

если джойн длинный

Длинные джойны оставь для SQL. Для NoSQL длинный джойн означает кривую архитектуру данных. И не надо говорить, что ты боишься увеличить объем документа или дубликации данных. Как раз таки, в идеальном случае структура данных должна ложится в один документ в одной коллекции. Тогда и выборки будут простыми. ИМХО.

У моей девушки брательник работает дельфином в Питере. Кодит всякую муторную аналитику, но сейчас их всех сокращают мухаха! Я так понял с его слов, что в Питере Дельфи рулит и педалит!

в идеальном случае

Да, все мы знаем, что hello world это идеальный случай для монги, или туду лист, или убийца твитора, гг.

By design. В частности мастер-мастер, реплики, арбитер все сделано из коробки.

Все же «master-master» репликации в MongoDB нет(https://jira.mongodb.org/browse/SERVER-2956). Riak не пробовал, Cassandra как раз умеет для определенного запроса выставлять дата консистенси(http://www.datastax.com/documentation/cassandra/2.0/cassandra/dml/dml_config_. )

Минус в том, что эти процессы, как и отсутсвие транзакций приводят к одному и тому же побочному эффекту: все происходит асинхронно и поэтому приложение должно «понимать», когда что-то не так (например, insert в другую коллекцию только производится и надо подождать/отклонить запрос/т.п.

Это не так. CAP теорема говорит, что обеспечить даже ACID можно, но придется жертвовать остальными буквами 😉

Для NoSQL длинный джойн означает кривую архитектуру данных

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

голоса
Рейтинг статьи
Ссылка на основную публикацию
Статьи c упоминанием слов: