Сценарии сценариев использования NoSQL или КОГДА использовать NoSQL [закрыто]

252

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

  1. Должен ли я использовать NoSQL для пользовательских данных? Например, профили, имена пользователей + пароли и т. Д.
  2. Должен ли я использовать NoSQL для важного контента? Например, статьи, сообщения в блоге, товарный инвентарь и т. Д.

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

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

Спасибо!

user1389722
источник

Ответы:

183

Это действительно вопрос "это зависит". Некоторые общие моменты:

  • NoSQL, как правило, хорош для неструктурированных / «без схемы» данных - обычно вам не нужно явно определять свою схему заранее, и вы можете просто включить новые поля без какой-либо церемонии
  • NoSQL обычно предпочитает денормализованную схему из-за отсутствия поддержки JOIN в мире RDBMS. Таким образом, у вас обычно будет плоское, денормализованное представление ваших данных.
  • Использование NoSQL не означает, что вы можете потерять данные. Разные БД имеют разные стратегии. например, MongoDB - вы можете выбрать уровень компромисса между производительностью и возможностью потери данных - лучшая производительность = более широкие возможности для потери данных.
  • Часто очень легко масштабировать решения NoSQL. Добавление большего количества узлов для репликации данных - это один из способов а) обеспечения большей масштабируемости и б) большей защиты от потери данных в случае отказа одного узла. Но опять же, зависит от БД / конфигурации NoSQL. NoSQL не обязательно означает «потерю данных», как вы делаете вывод.
  • ИМХО, сложные / динамические запросы / отчеты лучше всего обслуживать из РСУБД. Часто функциональность запросов для БД NoSQL ограничена.
  • Это не должно быть 1 или другой выбор. Мой опыт использования RDBMS в сочетании с NoSQL для определенных случаев использования.
  • БД NoSQL часто не имеют возможности выполнять элементарные операции над несколькими «таблицами».

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

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

AdaTheDev
источник
16
Утверждение о том, что NoSQL не поддерживает объединения, вводит в заблуждение. Некоторые базы данных NoSQL на самом деле гораздо лучше объединяются, чем реляционные базы данных. Некоторые вообще их не поддерживают. Этот ответ, кажется, больше касается MongoDB в частности, чем NoSQL в целом.
Алан Плам
1
Отличное резюме. @AlanPlum, на какие конкретные базы данных NoSQL вы ссылаетесь?
Брайан
2
@brian Я работаю в ArangoDB ( arangodb.com ), которая представляет собой смесь базы данных документов (например, MongoDB) и базы данных графов (например, Neo4J) с не только дешевыми объединениями, но и реальными транзакциями. Тем не менее, базы данных NoSQL не являются однородной группой, и невозможно обобщить одну базу данных NoSQL до всей «категории».
Алан Плам
Если вы решили использовать RDB из-за того, что в NoSQL «соединения не поддерживаются», я настоятельно рекомендую посмотреть это видео из AWS re: Invent. Разрушает весь подход NoSQL! Мне очень помогло. youtu.be/HaEPXoXVf2k
dillon.harless
9

Я думаю, что Nosql является «более подходящим» в этих сценариях, по крайней мере (более дополнительные приветствуются)

  1. Легко масштабировать по горизонтали, просто добавив больше узлов.

  2. Запрос большого набора данных

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

  3. Узкое место дискового ввода / вывода

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

отм
источник
20
Я не понимаю, в чем может быть проблема с RDBMS для # 2. А у NoSQL меньше дискового ввода / вывода согласно # 3?
Ави
5
Как говорит @avi, я думаю, что проблема №2 не проблема, если вы запрашиваете таблицы по индексу. Миллионы строк? Хорошо, получите только те индексы, которые я хочу использовать
Xtreme Biker
11
№ 2 и 3 оба ложные. В течение двух я провел тесты производительности при импорте / экспорте данных и видел, как SQL Server 2014 сокрушил Mongo при импорте и экспорте больших данных. Для 3 строго типизированные данные в SQL обычно занимают (я видел более 50% перед сжатием) намного меньше места, чем базы данных документов.
Брайан
7
Да, и даже для № 1, я просто не понимаю. Расширение является частью договора кластерного весь основной РСУБД предлагает
Sebas
2
Все три из них неправильны, если у вас есть неограниченные деньги
Chazt3n