Когда использовать / использовать случаи NoSQL?

В настоящее время у нас огромное количество опций NoSQL и NoSQL в целом. И сегодня модно отказываться от RDBMS и игнорировать ее и "слепо" использовать NoSQL, учитывая, что большинство стартапов / проектов могут довольно хорошо справляться с традиционными RDBMS.

Начнем с определения NoSQL:

ОПРЕДЕЛЕНИЕ NoSQL: базы данных следующего поколения, в основном затрагивающие некоторые аспекты: нереляционные, распределенные, с открытым исходным кодом и горизонтально масштабируемые. (+ без схемы (фактически неявная схема, которая намного хуже, чем явная) и возможная согласованность).

NoSQL (по крайней мере, концепции обработки больших данных) был создан такими компаниями, как Google (BigTable), Amazon (Dynamo), Twitter и Facebook. Кассандра и Риак родились оттуда. Кажется, только MongoDB был разработан самостоятельно, без влияния на статьи, опубликованные Google и Amazon.

Но большинство компаний не работают в таких масштабах. И СУБД может быть хорошей подгонкой. Я не смог найти точный объем данных, которые MySQL или PostgreSQL могут обрабатывать с разумной производительностью (по крайней мере, PostgreSQL говорит, что в базе данных FAQ по PostgreSQL есть 32 ТБ БД).

И мы все еще можем масштабировать с помощью RDBMS. Мы можем сделать шардинг довольно легко (на уровне приложения) (хотя ребалансировка шардов является более сложной задачей, и может быть проблемой). Мы даже можем выполнять репликацию и масштабировать "чтения" таким образом (учитывая, что мы пишем только в "master"). Но в этом случае нам приходится иметь дело с распределенными проблемами: задержка репликации и возможная согласованность. Мы могли бы сделать это только для набора данных (например, только для нескольких таблиц), где задержка репликации не является проблемой / большой проблемой.

Для еще лучшей производительности может быть введено кэширование (redis или memcached).

И вы должны планировать свои запросы заранее, если это возможно, чтобы получить максимально возможную производительность от RDBMS и построить свой API поверх него, а не наоборот.

И, конечно же, в мире NoSQL нет замены ACID, и когда вам это нужно, гораздо проще использовать RDBMS, чем пытаться изобрести ACID поверх NoSQL (что из-за теоремы CAP невозможно). Хорошая сводка использования и масштабирования PostgreSQL от Braintree: Масштабирование PostgreSQL

Еще один вариант использования СУБД - это обычно разделение таблиц "в реальном времени" на таблицы отчетов, которые могут иметь различную (более плоскую структуру), выполнять более производительные запросы или создавать отдельные таблицы / представления, предназначенные для быстрого чтения (но согласитесь, это добавляет сложности, но есть варианты как минимум).

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

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

1 ответ

Довольно сложно ответить на этот вопрос, потому что NoSQL, в отличие от RDBMS, ничего не значит - использование NoSQL ничего не значит, не говоря, какой продукт вы собираетесь использовать. Представьте, что вам нужно разработать свою реализацию SVN для NoSQL SVN, и вы выбрали Cassandra - теперь вам нужно реализовать собственные версии файлов, обрабатывая при каждом коммите тот факт, что в прошлом может быть (возможно, много) столбец (столбцы).) удерживая предыдущую версию файла, и вы сможете легко показать историю файлов. Через некоторое время, изучая мир NoSQL, вы обнаруживаете HBase, который "похож" на Cassandra, но предлагает бесплатное управление версиями столбцов. D'о!

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

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

  • производительность по согласованности

Я обрабатываю комментарии пользователей по компаниям, поэтому согласованность не является реальной проблемой. Если комментарий не виден сразу после его публикации, никто не будет жаловаться. Я не перебронирую рейс из-за фальшивого чтения. Наоборот, так как сайт имеет миллионы запросов доступа, должен выполняться очень быстро

  • нет единой точки отказа

Комментарии и пользователи после интеграции появлялись на любой странице сайта, от домашней страницы до страницы с подробностями компании. Я не смог закрыть весь сайт из-за проблем с БД. Я не работаю на Datastax, так что верьте, хотите нет, за более чем 4 года у нас не было никакого пуха (касаясь дерева) - продукт был выбран, потому что он не обнаружил "единой точки отказа" (к счастью, это правда!)

  • управляемый запросом дизайн ( O(1) "сложные" запросы)

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

SELECT * FROM comments where city='ROME' and vote=3 and userid='abc' ORDER BY timestamp DESC LIMIT 100

выполняет очень быстро, потому что данные хранятся только для извлечения по конкретному запросу (вот почему в мире NoSQL вы часто слышите 1 таблица = 1 запрос)

Ура, Карло

Другие вопросы по тегам