Статьи

NoSQL и CAP-теорема

CAP-теорема была предложена Эриком Брюером в#nbsp;2000 году. Она утверждает, что система распределенного хранения данных может обладать, максимум, двумя из#nbsp;следующих трех свойств:

C#nbsp;— Согласованность (Consistency): Все узлы в#nbsp;системе видят одни и#nbsp;те#nbsp;же данные в#nbsp;один и#nbsp;тот#nbsp;же момент времени. Если какое-то изменение данных произошло, оно будет видимо всем узлам одновременно.

A#nbsp;— Доступность (Availability): Каждый запрос к#nbsp;системе получает ответ в#nbsp;любой момент времени, без гарантии того, что данные актуальны (то#nbsp;есть они могут быть устаревшими).

P#nbsp;— Устойчивость к#nbsp;разделению сети (Partition tolerance): Система продолжает функционировать даже в#nbsp;условиях сетевых разделений, когда узлы не#nbsp;могут общаться друг с#nbsp;другом.

Самая частая аналогия, применяющаяся к#nbsp;CAP-теореме: «Быстро, Качественно, Дешево». И#nbsp;CAP-теорема утверждает, что невозможно создать систему, которая одновременно могла#nbsp;бы сочетать в#nbsp;себе все три свойства. На#nbsp;практике большинство современных распределенных систем обеспечивают согласованность и#nbsp;устойчивость к#nbsp;разделению (CP) или доступность и#nbsp;устойчивость к#nbsp;разделению (AP).

Традиционные реляционные базы данных (SQL хранилища) обычно фокусируются на#nbsp;обеспечении согласованности и#nbsp;доступности (CA) в#nbsp;рамках одного централизованного сервера или кластера. Однако эти хранилища могут сталкиваться с#nbsp;проблемами при масштабировании на#nbsp;уровне распределенной системы, особенно когда возникают сетевые разделения (partition tolerance).

Нереляционные (NoSQL)#nbsp;же занимают бóльшую часть этой диаграммы, и#nbsp;в#nbsp;отличие от#nbsp;РБД они не#nbsp;только предлагают сочетания AP, CP, но#nbsp;и#nbsp;различные реализации подходов к#nbsp;организации структуры данных. Проще говоря, вы#nbsp;можете использовать#nbsp;CP key-value хранилище, а#nbsp;можете#nbsp;AP key-value, или#nbsp;AP документо-ориентированное, или#nbsp;AP колоночное, в#nbsp;общем практически что угодно и#nbsp;в#nbsp;каких угодно сочетаниях, и#nbsp;всё это будет NoSQL. Он#nbsp;предлагает множество решений с#nbsp;различными свойствами, и#nbsp;с#nbsp;таким их#nbsp;количеством вы#nbsp;точно сможете выбрать подходящее вашим требованиям.

Рассмотрим некоторые популярные NoSQL базы данных и#nbsp;их#nbsp;характеристики относительно CAP-теоремы:

Cassandra:

AP (Доступность и#nbsp;Устойчивость к#nbsp;разделению сети)

Основана на#nbsp;модели данных основанной на#nbsp;столбцах. Предоставляет высокую доступность и#nbsp;масштабируемость, жертвуя строгой согласованностью.

MongoDB:

CP (Согласованность и#nbsp;Устойчивость к#nbsp;разделению сети) при использовании режима replica sets. Однако в#nbsp;режиме sharded clusters она может быть ближе к#nbsp;AP.

Документо-ориентированная база данных. В#nbsp;основном предоставляет согласованность на#nbsp;уровне отдельного документа.

Riak:

AP (Доступность и#nbsp;Устойчивость к#nbsp;разделению сети)

База данных на#nbsp;основе ключ-значение. Она спроектирована так, чтобы быть высокодоступной, даже когда часть узлов выходит из#nbsp;строя.

HBase:

CP (Согласованность и#nbsp;Устойчивость к#nbsp;разделению сети)

Основана на#nbsp;модели данных основанной на#nbsp;столбцах и#nbsp;обычно работает на#nbsp;top of#nbsp;Hadoop. Ценит согласованность и#nbsp;устойчивость к#nbsp;разделению выше доступности.

Redis:

CP (Согласованность и#nbsp;Устойчивость к#nbsp;разделению сети), когда рассматривается как одноузловая система или в#nbsp;режиме sentinel. Однако в#nbsp;режиме кластеризации может показывать черты#nbsp;AP.

База данных на#nbsp;основе ключ-значение. Известна своей производительностью и#nbsp;поддержкой различных структур данных.

CouchDB:

AP (Доступность и#nbsp;Устойчивость к#nbsp;разделению сети)

Документо-ориентированная база данных. Использует модель «eventual consistency», что позволяет ей#nbsp;обеспечивать высокую доступность.

Neo4j:

CP (Согласованность и#nbsp;Устойчивость к#nbsp;разделению сети)

Графовая база данных. Фокусируется на#nbsp;предоставлении согласованных запросов к#nbsp;графу.

Также существует категория SQL Like хранилищ, вроде Vertica и#nbsp;BigQuery. Они по#nbsp;своим характеристикам находятся ближе к#nbsp;обычным РБД, но#nbsp;с#nbsp;некоторыми оговорками. Их#nbsp;не#nbsp;стоит путать с#nbsp;классическими NoSQL, однако справедливости ради стоит сказать, что сделать это достаточно сложно.

BigQuery, как и#nbsp;все РБД, нацелен на#nbsp;обеспечение свойств#nbsp;CA для большинства операций, но#nbsp;из-за своей бессерверной и#nbsp;масштабируемой архитектуры он#nbsp;также проявляет характеристики устойчивости к#nbsp;разделению сети, что выливается в#nbsp;некоторое противоречие. И#nbsp;здесь мы#nbsp;подходим к#nbsp;определенному выводу.

Необходимо понимать, что свойства CAP не#nbsp;являются строгими метками, и#nbsp;реальное поведение системы может варьироваться в#nbsp;зависимости от#nbsp;конфигурации, настроек и#nbsp;условий работы. Теорема служит лишь общим руководством для понимания компромиссов, с#nbsp;которыми сталкиваются разработчики при создании распределенных систем хранения данных. Для того чтобы начать работать с#nbsp;NoSQL хранилищами требуется знать не#nbsp;только их#nbsp;основные виды и#nbsp;популярные реализации, но#nbsp;и#nbsp;специфику использования, которая также включает в#nbsp;себя отношение различных хранилищ к#nbsp;CAP-теореме.
2024-01-10 12:14 Профильные статьи