Когда использовать MongoDB или другие системы, ориентированные на документы? [закрыто

StackOverflow https://stackoverflow.com/questions/1476295

  •  16-09-2019
  •  | 
  •  

Вопрос

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

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

Таким образом, вопрос: когда использовать MongoDB и когда использовать RDBMS. Что бы вы взяли, Mongodb или MySQL, если бы у вас был выбор и зачем вам его принимать?

Это было полезно?

Решение

В Nosql: если бы это было так легко, автор пишет о MongoDB:

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

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

Настоящая вещь, которую нужно отметить, это то, что если вас сдерживают от того, чтобы сделать что -то супер удивительное, потому что вы не можете выбрать базу данных, вы делаете это неправильно. Если вы знаете MySQL, просто используйте его. Оптимизируйте, когда вам действительно нужно. Используйте его как магазин AK/V, используйте его как RDBMS, но ради Бога, создайте свое приложение для убийцы! Ничто из этого не будет иметь значения для большинства приложений. Facebook по -прежнему использует MySQL, много. Википедия использует MySQL, много. FriendFeed использует MySQL, много. NOSQL - отличный инструмент, но это, конечно, не будет вашим конкурентным преимуществом, оно не сделает ваше приложение горячим, и, прежде всего, ваши пользователи не заботятся об этом.

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

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

Альтернативная ссылка на статью

Другие советы

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

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

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

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

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

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

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

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

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

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

Я бы сказал, используйте RDBMS, если вам нужны сложные транзакции. В противном случае я бы пошел с MongoDB - более гибким для работы, и вы знаете, что он может масштабироваться, когда вам нужно. (Хотя я предвзято - я работаю над проектом MongoDB)

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

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

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

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

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

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

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

2 основная причина, по которой вы, возможно, захотите предпочесть Mongo, - это

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top