Когда я должен использовать базу данных NoSQL вместо реляционной базы данных?Можно ли использовать оба на одном сайте? - PullRequest
128 голосов
/ 15 сентября 2010

Каковы преимущества использования баз данных NoSQL? В последнее время я много о них читал, но я все еще не уверен, почему я хотел бы реализовать его и при каких обстоятельствах я хотел бы использовать его.

Ответы [ 6 ]

75 голосов
/ 15 сентября 2010

Реляционные базы данных обеспечивают ACID .Таким образом, у вас будут хранилища данных на основе схемы, ориентированные на транзакции.Это доказано и подходит для 99% реальных приложений.С реляционными базами данных вы можете делать практически все.

Но существуют ограничения по скорости и масштабированию, когда речь идет о больших хранилищах данных высокой доступности.Например, Google и Amazon имеют терабайты данных, хранящихся в больших центрах обработки данных.Запросы и вставка не производительны в этих сценариях из-за блокирования / схемы / транзакции RDBM.По этой причине они внедрили свои собственные базы данных (на самом деле, хранилища значений ключей) для значительного увеличения производительности и масштабируемости.

Базы данных NoSQL существуют уже давно - просто термин новый.Вот некоторые примеры: базы данных графиков, объектов, столбцов, XML и документов.

Для вашего второго вопроса: Можно ли использовать оба на одном сайте?

Почему бы и нет?Оба служат разным целям, верно?

69 голосов
/ 15 сентября 2010

Решения NoSQL обычно предназначены для решения проблемы, для которой реляционные базы данных либо плохо подходят, либо слишком дороги в использовании (например, Oracle), либо требуют от вас реализации чего-либо, что в любом случае нарушает реляционную природу вашей базы данных.

Преимущества, как правило, специфичны для вашего использования, но если у вас нет каких-либо проблем с моделированием ваших данных в СУБД, я не вижу причин, по которым вы бы выбрали NoSQL.

Я сам использую MongoDB и Riak для конкретных проблем, гдеСУБД не является жизнеспособным решением, для всего прочего я использую MySQL (или SQLite для тестирования).

Если вам нужен база данных NoSQL, о которой вы обычно знаете, возможными причинами являются:

  • клиент хочет доступности 99,999% на сайте с высоким трафиком.
  • ваши данные не имеют смысла в SQL, вы обнаруживаете, что выполняете несколько запросов JOIN для доступа к некоторой части информации.
  • вы нарушаете реляционную модель, у вас есть CLOB, которые хранят денормализованные данные, и вы генерируете exteИндексы rnal для поиска этих данных.

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

О, и в отношении второго вопроса совершенно нормально использовать любую технологию в сочетании с другой, так что просто для полнотыПо моему опыту, MongoDB и MySQL отлично работают вместе, если они не на одной машине

33 голосов
/ 10 ноября 2013

Мартин Фаулер имеет превосходное видео , которое дает хорошее объяснение баз данных NoSQL. Ссылка идет прямо к его причинам, чтобы использовать их, но все видео содержит хорошую информацию.

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

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

13 голосов
/ 27 февраля 2014

NoSQL - это система баз данных, в которой данные организованы в документ (MongoDB), пара ключ-значение (MemCache, Redis), форма структуры графа (Neo4J).

Может быть, здесь возможны вопросы и ответы на вопрос «Когда перейти на NoSQL»:

  1. Требуется гибкая схема или работа с данными в виде дерева?
    Как правило, в гибкой разработке мы начинаем проектировать систему, не зная всех требований в предварительном порядке, где в дальнейшем во время разработки системы баз данных может потребоваться учесть частые изменения дизайна, демонстрируя MVP (продукт Minimal Viable). Или вы имеете дело со схемой данных, которая носит динамический характер. например Системные журналы, очень точный пример - журналы облачных часов AWS.

  2. Набор данных большой / большой?
    Да, база данных NoSQL - лучший кандидат для приложений, где база данных должна управлять миллионами или даже миллиардами записей без ущерба для производительности.

  3. Компромисс между масштабированием по согласованности
    В отличие от RDMS, база данных NoSQL может потерять небольшие данные здесь и там (примечание: вероятность составляет .x%), но ее легко масштабировать с точки зрения производительности. Пример: это может пригодиться для хранения людей, которые находятся в сети, в приложении для обмена мгновенными сообщениями, токенов в базе данных, регистрации статистики посещаемости веб-сайта.

  4. Выполнение геолокации: MongoDB имеет богатую поддержку для выполнения операций GeoQuerying и Geolocation. Мне очень понравилась эта функция MongoDB.

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

3 голосов
/ 31 марта 2018

Некоторая важная информация отсутствует для ответа на вопрос: какие случаи использования должна быть в состоянии охватить базу данных? Нужно ли выполнять комплексный анализ на основе существующих данных ( OLAP ) или приложение должно обрабатывать много транзакций ( OLTP )? Какова структура данных? Это далеко от времени окончания вопроса.

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

Радость разработчиков со словом «меньше схемы» в NoSQL в начале тоже очень велика. Это умное слово быстро разочаровывается после технического анализа, потому что оно правильно не требует схемы при записи, но вступает в игру при чтении. Вот почему это должно быть правильно "схема на чтение". Может быть заманчиво иметь возможность писать данные по своему усмотрению. Но как мне справиться с ситуацией, если есть существующие данные, но новая версия приложения ожидает другую схему?

Модель документа (как, например, в MongoDB): не подходит для моделей данных, в которых существует много взаимосвязей между данными. Объединения должны выполняться на уровне приложения, что является дополнительным усилием и требует, чтобы я программировал то, что должна делать база данных.

Если вы утверждаете, что Google и Amazon разработали свои собственные базы данных, потому что обычные СУБД больше не могут обрабатывать поток данных, вы можете только сказать: вы не Google и Amazon. Эти компании являются лидерами, примерно в 0,01% случаев, когда традиционные базы данных больше не подходят, но для остального мира они есть.

Что немаловажно: SQL существует уже более 40 лет, и миллионы часов разработки ушли на большие системы, такие как Oracle или Microsoft SQL. Это должно быть достигнуто с помощью некоторых новых баз данных. Иногда также легче найти администратора SQL, чем кого-то для MongoDB. Что подводит нас к вопросу обслуживания и управления. Предмет, который не совсем сексуален, но является частью технологического решения.

2 голосов
/ 15 декабря 2015

Я сталкивался с этим вопросом, когда искал убедительные основания для отклонения от проектирования СУБД.

Есть замечательный пост Джулиана Брауна, который проливает свет на ограничения распределенных систем. Эта концепция называется теоремой Брюера CAP, которая в итоге гласит:

Три требования к распределенным системам: согласованность, доступность и допуск раздела (кратко CAP). Но вы можете иметь только два из них одновременно.

И вот как я обобщил это для себя:

Вам лучше пойти на NoSQL, если вы жертвуете согласованностью.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...