Колоночная база данных NoSQL
Продолжаем разбираться в типах СУБД NoSQL. В этот раз расскажем о колоночной базе данных.
В колоночных БД данные хранятся в ячейках, которые сгруппированы не в строки, а в колонки. Эти колонки логически группируются в соответствующие колоночные семейства, которые могут состоять, по сути, из неограниченного числа колонок (колонки могут создаваться либо во время работы программы, либо во время определения схемы). Запись и чтение осуществляются с применением колонок, а не строк.
Если сравнивать эту базу с хранением данных в строках, как это принято в большинстве реляционных БД, то у хранения в колонках есть свои плюсы. Например, быстрый поиск/доступ и агрегация данных. SQL-базы хранят каждую строку в виде непрерывной записи на диске, то есть различные строки хранятся в различных местах на диске. В случае с колоночной структурой, БД хранят все ячейки, которые относятся к колонке, в виде непрерывной записи — это и делает выполнение операций по поиску и доступу быстрее.
Простой пример: если мы захотим получить список заголовков нескольких миллионов статей, то при использовании SQL-баз это станет весьма трудоёмкой задачей, ведь для извлечения заголовков понадобится проходить по каждой записи. В случае с NoSQL мы сможем получить все заголовки посредством всего одной операции доступа к диску.
Модель данных в колоночных БД:
- Колоночное семейство представляет собой структуру, которая может без проблем группировать колонки и суперколонки.
- Ключ является постоянным именем записи. Ключи могут иметь различное число колонок, следовательно, БД способна расширяться неравномерно.
- Есть термин пространства ключей. Это пространство определяет самый внешний уровень организации, обычно это имя приложения или имя БД.
- Колонка характеризуется упорядоченным списком элементов, которые представляют собой кортежи со значениями и именами.
Примеры успешных решений
Наиболее известные примеры колоночных БД — Google BigTable и HBase с Cassandra.
Если говорить о BigTable, то она представляет собой сжатое, проприетарное и высокопроизводительное хранилище данных от Google со следующими атрибутами: • разреженность (какие-нибудь ячейки могут иметь пустое значение); • распределённость (все данные разделяются между множеством узлов); • постоянство (данные хранятся на диске); • многомерность (более одного измерения); • сопоставление — ключ и значение; • отсортированность (как правило, сопоставления не сортируются, но данный случай является исключением).
2-мерная таблица, которая состоит из колонок и строк, является частью реляционной системы БД.
Данную таблицу мы можем представить в качестве BigTable-сопоставления следующим образом:
Внешние ключи «3PillarCluj», «3PillarTimisoara», «3PillarNoida» и «3PillarFairfax» — это аналоги строк. При этом: • «address» и «details» являются колоночными семействами; • в семействе «address» присутствуют колонки «city» и «pincode»; • в семействе «details» присутствуют колонки «projects» и «strength».
Ссылаться на колонки мы можем посредством колоночного семейства.
Источник — «EXPLORING THE DIFFERENT TYPES OF NOSQL DATABASES».