Сценарии использования NoSQL или КОГДА использовать NoSQL
При всей этой шумихе действительно трудно найти достоверную информацию о том, когда использовать это. Поэтому я задаю следующие вопросы, и мне жаль, если это действительно глупые вопросы заранее:
- Должен ли я использовать NoSQL для пользовательских данных? Например, профили, имена пользователей + пароли и т. Д.
- Должен ли я использовать NoSQL для важного контента? Например, статьи, сообщения в блогах, товарный инвентарь и т. Д.
Я предполагаю нет? И я чувствую, что NoSQL просто для быстро доступных вещей, из которых можно потерять данные. Но я также читал, что приложения NoSQL имеют встроенную избыточность, чтобы я не терял данные?
Также, если вышеприведенные 2 примера плохие, не могли бы вы дать мне конкретные случаи использования в бизнесе, где я бы использовал NoSQL? Я вижу много общих описаний, но не так много реальных примеров. Единственное, о чем я могу думать, это обмен сообщениями между пользователями и аналитика.
Спасибо!
2 ответа
Это действительно вопрос "это зависит". Некоторые общие моменты:
- NoSQL, как правило, хорош для неструктурированных /"без схемы" данных - обычно вам не нужно явно определять свою схему заранее, и вы можете просто включить новые поля без какой-либо церемонии
- NoSQL обычно предпочитает денормализованную схему из-за отсутствия поддержки JOIN для мира RDBMS. Таким образом, у вас обычно будет плоское, денормализованное представление ваших данных.
- Использование NoSQL не означает, что вы можете потерять данные. Разные БД имеют разные стратегии. например, MongoDB - вы можете выбрать, какой уровень компромисса между производительностью и потенциалом потери данных - лучшая производительность = более широкие возможности для потери данных.
- Часто очень легко масштабировать решения NoSQL. Добавление большего количества узлов для репликации данных - это один из способов а) обеспечения большей масштабируемости и б) большей защиты от потери данных в случае отказа одного узла. Но опять же, зависит от БД / конфигурации NoSQL. NoSQL не обязательно означает потерю данных, как вы делаете вывод.
- ИМХО, сложные / динамические запросы / отчеты лучше всего обслуживать из РСУБД. Часто функциональность запросов для NoSQL DB ограничена.
- Это не должно быть 1 или другой выбор. Мой опыт использования RDBMS в сочетании с NoSQL для определенных случаев использования.
- БД NoSQL часто не способны выполнять элементарные операции над несколькими "таблицами".
Вам действительно нужно посмотреть и понять, что представляют собой различные типы хранилищ NoSQL, как они обеспечивают масштабируемость / безопасность данных и т. Д. Трудно дать общий ответ, поскольку все они на самом деле разные и по-разному решают проблемы.,
Для MongoDb в качестве примера, посмотрите их варианты использования, чтобы увидеть то, что они предлагают как "хорошо подходящие" и "менее подходящие" варианты использования MongoDb.
Я думаю, что Nosql является "более подходящим" в этих сценариях, по крайней мере (более дополнительные приветствуются)
Легко масштабируется, просто добавляя больше узлов.
Запрос большого набора данных
Представьте себе тонны твитов, публикуемых в твиттере каждый день. В RDMS могут быть таблицы с миллионами (или миллиардами?) Строк, и вы не хотите делать запросы к этим таблицам напрямую, даже не говоря уже о том, что в большинстве случаев объединения таблиц также необходимы для сложных запросов.
Узкое место дискового ввода / вывода
Если веб-сайт должен отправлять результаты различным пользователям на основе информации пользователей в реальном времени, мы, вероятно, говорим о десятках или сотнях тысяч запросов на чтение / запись SQL в секунду. Тогда дисковый ввод-вывод станет серьезным узким местом.