Когда использовать / использовать кейсы NoSQL?

В настоящее время нас подавляет множество вариантов NoSQL и NoSQL в целом. И сегодня модно отказываться от СУБД / игнорировать их и принимать «вслепую» NoSQL, учитывая, что большинство стартапов / проектов могут неплохо справляться с традиционными СУБД.

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

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

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

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

И мы все еще можем масштабироваться с помощью РСУБД. Мы можем довольно легко выполнить сегментирование (на уровне приложения) (хотя перебалансировка сегментов более сложна и, возможно, может быть проблемой). Мы даже можем делать репликацию и масштабировать «чтение» таким образом (учитывая, что мы пишем только «мастеру»). Но в этом случае нам приходится иметь дело с распределенными проблемами: задержкой репликации и конечной согласованностью. Мы могли бы сделать это только для набора данных (например, всего нескольких таблиц), где задержка репликации не является проблемой / большой проблемой.

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

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

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

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

Итак, каковы варианты использования NoSQL в пользу СУБД и каковы пределы СУБД, когда NoSQL будет более подходящим решением проблемы. Какие вопросы следует задать системным архитекторам перед тем, как выбрать NoSQL?

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


person Aliaksandr Kazlou    schedule 07.08.2014    source источник


Ответы (1)


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

Итак, во-первых, необходимо выбрать продукт 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 запрос)

Привет, Карло

person Carlo Bertuccini    schedule 08.08.2014