В течение последних десятилетий профессионалы в области баз данных зависели от единого стандарта, поддерживаемого всеми базами данных — языка структурированных запросов (SQL). Мы полагались на таблично ориентированную реляционную базу данных и использовали ее для хранения и доступа к данным. Никто не задумывался над альтерантивамы. Однако, времена изменились. Модель NoSQL (Not only SQL) отвергает многие устоявшиеся представления о «правильной» структуре баз данных. Зато NoSQL предлагает возможность получить повышенную производительность работы.
Изменения в модели. Появление NoSQL
Реляционные базы данных всегда основывались на неизменных структурированных правилах, регулирующих проведение транзакций. Эти правила составляют ACID модель, которая требует, чтобы база данных хранила атомарность, согласованность, изолированность и долговечность транзакций. Любое действие, которое может нарушить ACID модель, запрещено.
NoSQL переворачивает ACID модель с ног на голову и позволяет подход невмешательства в управление базой данных: BASE модель. Вместо жесткой привязки к ACID принципам, BASE предлагает три свободных директивы: базовая доступность, неустойчивое состояние, конечная согласованность. Будет справедливо сказать, что BASE принцип является непринужденной альтернативой строгой модели ACID, которую используют реляционные базы данных.
Если не таблицы, тогда что?
Вместо структурированных таблиц со многими атрибутами, NoSQL использует принцип «ключ / значение».Это достаточно просто, нет структуры базы данных. NoSQL просто сохраняет значение для каждого представленного ключа, распространяет их среди базы данных и позволяет эффективно возвращать значение. Отсутствие структуры уберегает от сложных запросов и фактически предотвращает использование NoSQL как транзакционной среды.
Есть четыре типа NoSQL баз данных:
- База данных «ключ / значение» является ничем большим, чем описанная выше функция — двоичный объект данных, ассоциированный с его ключом, сохраняется в базе данных для последующего его возвращения.
- Документоориентированная база данных немного выходит за рамки прежних принципов. Она накладывает определенную структуру на двоичный объект. Объектами должны быть документы узнаваемого формата, XML или PDF. Однако нет никаких требований по структуре или содержания документа. Каждый документ сохраняется как значение (в структуре «ключ / значение») и может сопровождаться метаданными, встроенными в себя.
- Колонноподобные базы данных является гибридом NoSQL и реляционных баз данных. Она предполагает определенную структуру строку-колонка, но не имеет жестких правил реляционной структуры.
- База данных на основе графов сохраняет данные в кортежах с многими атрибутами, которые отражают отношение другим способом. Например, «дружественные» связи в социальных сетях могут храниться в виде записи, который включает всего лишь двое пользователей, которые являются друзьями.
Архитектура NoSQL
Основой базы данных в NoSQL является хэш-функция — математический алгоритм, который превращает входные данные любого размера в выходные данные фиксированной длины. Ключ каждой пары «ключ / значение» создается с помощью хеширования, и этот хэш-код используется для направления пары к NoSQL серверу, где она будет храниться для поиска в будущем.
Для поиска пары «ключ / значение» нужно предоставить базе данных сам ключ.
После прочтения описания этого процесса может возникнуть вопрос: «Как пользователь или программа выполняет сложные запросы, такие как поиск ключей которые имеют какое-то конкретное значение, или сортировка по значению?» Ответ прост — NoSQL просто не поддерживает функционала такого типа. NoSQL создан для эффективного хранения пар «ключ / значение» с быстрым доступом к ним, когда программе просто нужно место для хранения данных с последующим поиском их только по ключу.
Если вам нужно выполнять другие запросы, тогда NoSQL не является уместной для вас платформой.
Избыточность и масштабируемость в NoSQL
Упрощенная архитектура баз данных NoSQL является основным преимуществом, когда дело доходит до избыточности и масштабируемости. Чтобы создать положительную избыточность, администратор просто создает дубликат узла и конфигурирует копирования между первичным узлом и дубликатом. Масштабируемость — это просто вопрос дополнительных узлов. Когда они добавлены, NoSQL модифицирует хэш-функцию, чтобы присваивать новые записи к новым узлам сбалансировано.
Вывод
Мы не хотим сказать, что NoSQL базы данных молниеносно захватят рынок. Более того, учитывая их ограничения, они никогда полностью не заменят реляционные базы данных. Однако, они имеют перспективное будущее по простого хранения данных высокоэффективным способом. Поэтому не удивляйтесь когда будете замечать расширение их использования.