Что такое «столбцовые базы данных»?

4 Августа 2014
Если облака для вас
не просто теория
Широкий спектр услуг
по выделенным северам
и мультиклауд-решениям
Конфигурация VPS и бесплатный тест уже через 2 минуты
Организация вашей IT-инфраструктуры на основе мультиклауд-решения
Как часто бывает, словам «columnar database» или «column-oriented database» еще не подобрался стандартный русский перевод. Иногда говорят «столбцовая база данных», иногда встречается перевод «колончатая».

Что же такое «столбцовая база данных», и что нового в таком подходе?

Большинство современных реляционных баз данных являются «строчными», то есть данные, хранящиеся в базе данных в виде таблицы, со строками и столбцами, записываются на диск построчно.

Как вы, вероятно знаете, самая «дорогая» в плане быстродействия операция, которую совершает жесткий диск, это так называемый «seek» - операция позиционирования головки жесткого диска. Если данные в базе записаны на диск построчно, то как правило за чтение одного блока, будет считана вся строка с данными. Поэтому при построчной записи данных, минимизируется время на чтение одной записи в базе данных о каком-то объекте, например, о сотруднике, в базе сотрудников – то есть все его хранимые данные, Ф.И.О., год рождения, и так далее.

В итоге мы имеем, что строчные базы данных более эффективно работают, когда сценарий работы с данными как правило требует частой работы с отдельными записями, например введение данных, просмотр, изменение.

Но строчные базы данных начинают испытывать проблемы с быстродействием, когда необходимо провести какие-то операции со всеми данными, вместо того, чтобы извлечь какую-то одну запись. Например, для того, чтобы найти всех сотрудников компании, родившихся в определенном году, базе данных нужно прочитать данные обо всех сотрудниках, в поисках нужных совпадений.

Чтобы улучшить эффективность работы над такими задачами, в большинстве баз данных применяют так называемые индексы, в которых хранятся все значения какого-то выбранного столбца базы данных с указателями на те строки базы данных, откуда они взяты.

Развитием идеи индексов и стали столбцовые базы данных, в которых данные записываются на диск по столбцам. Таким образом для многих запросов типа «найти всех людей, с таким-то годом рождения», ответ может быть выдан за одну дисковую операцию. Другие операции, такие как подсчет записей, соответствующих условию, или выполнение каких-то математических операций над набором данных, могут получить гигантский прирост в скорости выполнения, если база данных является столбцовой.

Хотя эффективность базы данных разных типов (строчной или столбцовой) очень сильно зависит от задач и типичных сценариев их использования, можно утверждать, что как правило:

Столбцовые базы данных более эффективны в случаях, когда часто требуется вычислять какие-то совокупные величины – средние, суммы, и прочие по каким-то значениям.

Строчные базы данных более эффективны в случаях, когда часто требуется извлекать данные по строкам целиком, например – извлекая карточки клиентов для работы с ними менеджеров.

Иными словами, в тех случаях, когда основное предназначение базы данных – это какой-то агрегированный анализ, поиск средних, максимальных, минимальных величин и прочие операции над всем набором данных – столбцовые базы данных будут более эффективны. В случаях же, когда агрегированные значения вычисляются достаточно редко (например, раз в месяц, для отчета), а основа работы состоит в просмотре и изменении индивидуальных записей в каждой строке, то в этом случае более эффективны строчные базы данных.

Если вас заинтересовала эта тема для дальнейшего изучения, то например, вот здесь можно найти список столбцовых баз данных, которые существуют в мире. Список, вероятно, не является исчерпывающим, но вы можете найти там решения для своих экспериментов с таким типом базы данных.