[МУЗЫКА]
[МУЗЫКА] На волне появления
больших данных стали разрабатываться специализированные системы,
которые получили название NoSQL, что расшифровывается как Not Only SQL.
Автором этого термина является Йохан Оскарсон, который использовал
его на конференции по нереляционным базам данных в 2009 году.
Этот термин используется в качестве главной классификации,
подразумевающей большое количество разнообразных хранилищ данных, многие
из которых основаны на нереляционной модели, а имеют узко ориентированную,
специфическую модель, заточенную на хранение определённого вида данных.
Какими основными характеристиками обладают эти системы,
хотя они, конечно, очень разнообразны?
В первую очередь, это простые и гибкие нереляционные модели,
предназначенные для решения специфических задач.
Эти модели поддерживают масштабирование по горизонтали — что это такое?
Обычно реляционные СУБД часто используют вертикальное масштабирование.
Представим, что у нас есть очень большая таблица.
Она может быть разделена на некоторые партиции, или части,
и каждая из этих частей может храниться на отдельном устройстве хранения.
NoSQL-ные системы часто используют другой вид масштабирования — по горизонтали,
когда они отдельно хранят не строки таблицы, а целые столбцы.
Также NoSQL-ные системы позиционируют себя как обеспечивающие
высокую степень доступности данных.
Продекларированные ими принципы формулируются так:
BASE-принципы: Basically Available, Soft state, Eventually consistent.
Что это за принципы?
Basically Available означает, что данные доступны всегда,
когда к ним происходит обращение.
И даже если часть данных, которая должна быть подвергнута обработке, недоступна,
то ответ будет сгенерирован путём обработки доступной части информации.
Приведём пример.
Например, вам захочется увидеть, как выглядит собака породы шпиц; для
этого вам не нужно получить всё множество фотографий с этой породой собаки,
вам достаточно лишь какого-то небольшого набора.
Soft state: данные могут в процессе обработки находиться
в рассогласованном состоянии, и в этот момент их могут увидеть пользователи, но
следующий принцип, Eventually consistent, гарантирует нам, что в конечном счёте,
после некоторого периода времени, данные будут приведены в согласованное состояние.
Для большого количества NoSQL-ных систем используется технология распараллеливания,
про которую мы уже говорили, под названием MapReduce.
Основное преимущество этой технологии — продолжить
обработку данных даже в случае отказа оборудования на некоторых узлах.
Особенно эффективно эта система работает,
когда абсолютная точность ответа нам не нужна.
Принято подразделять NoSQL-ные СУБД на четыре вида.
Это хранилища типа «ключ-значение», документные хранилища,
колоночные хранилища и граф-ориентированные модели.
Для того чтобы найти наиболее популярных представителей
каждого класса моделей, можно воспользоваться рейтингом.
Один из рейтингов вы видите на экране.
На этом рейтинге приведены оценки по некоторым формальным критериям
реально существующих СУБД для каждого вида NoSQL-ных моделей.
Первое, что мы рассмотрим, это хранилище типа «ключ-значение».
Наиболее популярных представителей вы видите на экране.
Назовём основные характеристики системы типа «ключ-значение».
Во-первых, они могут легко масштабироваться,
они обеспечивают нам эффективный поиск по значению ключа,
ключом обладает каждый элемент хранимых данных.
При этом объекты, которые мы храним в такой модели,
могут иметь достаточно сложную структуру.
Разработчики таких систем декларируют их высокую производительность.
Надо отметить в качестве недостатка таких систем,
что в них полностью отсутствует возможность связи между объектами,
которую мы привыкли использовать в реляционной модели.
И, соответственно, проверка целостности в базе данных переносится
на плечи отдельного пользователя или приложения, работающего с данными.
Этот класс приложений может быть эффективно
использован для определённого круга задач, например,
для хранения изображений, видеороликов, файлов программы и так далее.
Следующий вид систем — это документные хранилища.
Наиболее популярными из них являются MongoDB и Amazon.
Как они устроены?
Они хранят объекты в специализированном формате, который называется JSON,
— это Java Script Object Notation, или BSON — Binary JSON.
Рассмотрим, как устроено хранение таких объектов.
Строка JSON содержит либо массив значений, либо объект,
содержащий неупорядоченное множество пар «ключ-значение».
Массив заключается в квадратные скобки, объект — в фигурные скобки,
сами элементы разделяются запятыми.
Пара имя/значение состоит из имени поля, заключённого в кавычки,
после него ставится двоеточие, и приводится само значение.
Значение в массиве или объекта может быть числом, строкой,
а может иметь уровни вложенности, то есть содержать вложенные массивы или объекты.
Приведём пример, как можно было бы хранить информацию о студенте из
нашей демонстрационной базы на примере JSON.
Мы видим, что у каждого студента хранится его идентификатор в виде номера зачётки,
фамилия, имя, отчество, номер группы.
Также он содержит вложенный массив, состоящий из телефонов.
Для каждого телефона мы храним тип телефона и его номер.
Основные характеристики документных хранилищ заключаются в том,
что они позволяют атрибуты простых типов, а также вложенные объекты;
можно строить индексы по отдельным полям таких документов,
что позволяет нам строить достаточно сложные запросы.
Надо отметить, что такие структуры не поддерживают основные принципы транзакций,
характерных для реляционных СУБД,
однако обработка каждого отдельного документа обычно является атомарной.
И такие системы могут эффективно применяться в системах управления
контентом, в издательском деле, в документном поиске и так далее.
Колоночные хранилища.
Колоночные хранилища основаны на представлении данных в виде таблиц,
и дробление таблицы происходит не за счёт деления по строкам,
как принято в обычных реляционных СУБД, а по столбцам.
Для многих систем этого класса характерно наличие SQL-подобных языков
достаточно высокого уровня.
Последние представители класса NoSQL-ных систем — это
граф-ориентированные хранилища.
Их имена вы сейчас видите на экране.
Надо отметить, что они предназначены для хранения узлов связи и могут
удобно представлять связи между ними.
Большинство таких систем позволяет задавать узлы и связывать между
произвольным набором атрибутов,
и мы можем выбирать узлы и связи, задавая значения этих атрибутов.
Они поддерживают всевозможные алгоритмы обхода графов и построения
маршрутов и эффективно используются для задач, связанных с анализом,
например, социальных сетей, выбором транспортного маршрута и так далее.
На этом мы закончили рассмотрение NoSQL-ных систем.