C-Store

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 18:11, 30 января 2019.
C-Store
C-storesize.png
Создатели: Vertica
Разработчики: Samuel Madden и коллеги
Выпущена: 2005
Постоянный выпуск: 0.2 / Октябрь 2006
Состояние разработки: Разработка завершена
Написана на: C++
Операционная система: Linux
Тип ПО: СУБД
Лицензия: BSD лицензия
Веб-сайт db.lcs.mit.edu/projects/cstore

C-Store (англ. Column Store — столбцовое хранение) - свободно распространяемая СУБД с открытым исходным кодом, распределённая на основе архитектуры без общих ресурсов (англ. shared nothing architecture[1]). Разработана объединённой командой Брауновского университета, университета Брандейса и Массачусетского технологического института под руководством Майкла Стоунбрейкера[Источник 1].

Введение

C-Store является оптимизированной на чтение реляционная СУБД, имеющая резкий контраст по сравнению с большинством существующих систем, которые оптимизированы для записи. Среди множества различий в ее конструкции таковыми являются: хранение данных по столбцам, а не по строкам, бережное кодирование и упаковка объектов в хранилище, включая основную память во время обработки запроса, хранения перекрывающегося набора проекций, ориентированных на столбцы, а не на текущую стоимость таблиц и индексов, нетрадиционное осуществление транзакций, которое предполагает высокую доступность и изоляцию моментального снимка для транзакций на чтение, и широкое использование битовых индексов для дополнения B-древовидных структур[Источник 1].

История создания

В 2005 году Стоунбрекер и коллеги основали компанию Vertica для коммерциализации проекта. В 2011 году компания была поглощена корпорацией Hewlett-Packard. На момент 2011 года последняя доступная версия в исходных кодах — 0.2, датированная 2006 годом, более современные версии на основе C-Store выпущены как собственническое программное обеспечение компаний Vertica и Hewlett-Packard под наименованием Vertica Analytics Platform. В середине 2010-х годов после серии разделений и поглощений продукт Vertica перешёл под контроль британской компании корпорации Micro Focus[Источник 2].

Архитектура

Рисунок 1 - Архитектура C-project

Разработчики объединяют в одном продукте программное обеспечение, сочетающее в себе как и хранение столбцов, оптимизированных на чтение, так и доступное на запись хранение, ориентированное на обновление / вставку, соединенных, с помощью Tuple mover, как отмечено на рисунке 1. На верхнем уровне, есть небольшой компонент Writeable Store (WS), который спроектирован для поддержки высокой производительности вставки и обновления. Существует также намного больший компонент, который называется Read-optimized Store (RS), способеный поддерживать очень большие объемы информации. RS, как следует из названия, оптимизирован для чтения и поддерживает только очень ограниченную форму вставки, а именно: пакетное движение записей от WS до RS, задача, которая выполняется с помощью Tuple mover[Источник 1].

Модель данных

C-Store поддерживает стандартную реляционную модель логических данных, где база данных состоит из набора поименованных таблиц с поименованным набором атрибутов (столбцы). Как и в большинстве реляционных систем, атрибуты (или набор атрибутов) в таблицах C-Store могут образовывать уникальный первичный ключ или быть внешним ключом, который ссылается на первичный ключ в другой таблице. В качестве языка запросов C-Store предполагается SQL со стандартной семантикой. Данные в C-Store физически не хранятся с помощью этой модели логических данных[Источник 1].

Производительность

Беглый взгляд на среднее время выполнения запросов (около 4 секунд) в C-Store сразу позволяет понять, что эта система работает быстрее не только колоночных хранилищ, моделируемых в строчном хранилище (от 80 до 220 секунд), то также и наилучших для строчного хранилища сценариев, когда запросы известны заранее, и в строчном хранилище созданы материализованные представления, подогнанные под планы выполнения запросов (10.2 секунд). Эту разницу в производительности можно частично объяснить безо всяких экспериментов – в колоночных хранилищах отсутствуют покортежные накладные расходы, и не требуются соединения столбцов[Источник 3].

Индексы соединения и хранение ключей

Рисунок 2 - Индексы соединения

Каждый сегмент связывает каждое значение данных каждого столбца с ключом хранения (SK)[Источник 1]. Значения из разных столбцов в том же сегменте с соответствующими ключами хранения принадлежат одному и тому же логической строке. Для того, чтобы восстановить все записи в таблице T (рисунок 2) из различных ее проекций, C-Store использует индексы соединения. Если T1 и T2 представляют собой две проекции, которые охватывают таблицу T, индекс соединения из М сегментов в T1 к N сегментам в Т2 является логически M таблицами, одну на сегмент, S, из Т1, состоящих из строк вида:

(s: SID in T2, k: Storage Key in Segment s)


Операторы запроса

Ниже представлены операторы запроса в C-Store и их описание[Источник 1]:

  • Decompress преобразует сжатый столбец в несжатое представление;
  • Select эквивалентно оператору выбора реляционной алгебры (), но не выполняет ограничение своего входа, а вместо этого производит битовое представление результата;
  • Mask принимает битовую строку В и проекцию Cs, и ограничивает Cs, пропуская только те значения, чьи соответствующие биты в B равны 1;
  • Project эквивалентно оператору проекции реляционной алгебры ();
  • Sort сортирует все столбцы в проекции на некоторое подмножество этих столбцов (столбцы сортировки);
  • Aggregation Operators вычисляет SQL-подобные совокупности над поименованным столбцом, и для каждой группы они определяются значениями в проекции;
  • Concat соединяет одну или несколько проекций, отсортированных в том же порядке, в одну проекцию;
  • Permute представляет проекцию в соответствии с порядком, определенным индексом соединения;
  • Join соединяет две проекции согласно предикату, который их соотносит;
  • Bitstring Operators BAnd выполняет побитовое И двух битовых строк. BOr производит побитовое ИЛИ. BNot применяет операцию дополнение к битовой строке.

Установка

C-Store разрабатывается и запускается на платформах Fedora Core 2 и 3[2]. Для запуска C-Store необходимо выполнить несколько пунктов:настройка конфигурации системы, скачивание установщика, коомпиляция бинарных файлов и некоторые тесты[Источник 4].

Скачивание C-Store

Вам потребуется 20 ГБ свободного места на диске для выполнения всех инструкций. Для установки C-Store необходимо иметь следующие компоненты:

  • Berkeley DB версии не ниже 4.2;
  • LZO version one - это внешний алгоритм сжатия, который использует С-Store. Для загрузки используйте ссылку LZO installer.

Установка C-Store

Далее для установки C-Store используйте команды:

$ cd cstore/Build

Отредактируйте makefile.init. Измените переменные в верхней части файла, чтобы отразить расположение BerkeleyDB 4.2 и LZO:

$ cd cstore/src

Далее необходимо выполнить следующие команды. Это это займет некоторое время. У вас должно быть около 10 ГБ свободного места на жестком диске):

$ make data

Далее коомпилируем бинарные файлы. Это также займет некоторое время, т.к. коомпилировать необходимо довольно много файлов:

$ make

Запуск C-Store

Затем заполните некоторые таблицы базы данных для запроса:

$ cstoreqptest 0 createData.cnf global.cnf

Теперь необходимо выполнить некоторые тесты:

$ cstoreqptest

Тесты на этом завершены и можно приступать к запуску C-Store:

$ cstoreqptest 0 projectionMaker.cnf global.cnf <data-file>

Примечания

  1. Shared-nothing architecture https://en.wikipedia.org/wiki/Shared-nothing_architecture
  2. Предполагая, что доступны правильные библиотеки, CStore должен работать на других платформах.

Источники

  1. 1,0 1,1 1,2 1,3 1,4 1,5 C-Store Overview // C-Store [2014-2019]. Дата обновления 13.12.18.URL: http://db.lcs.mit.edu/projects/cstore/ (дата обращения: 22.01.2019)
  2. Theregister HP buys Vertica // Theregister [1998-2019]. Дата обновления 10.01.19.URL: https://www.theregister.co.uk/2011/02/14/hp_buys_vertica/ (дата обращения: 30.01.2019)
  3. CitForum: column vs row store // СitForum [2014-2019]. Дата обновления 13.12.18.URL: http://citforum.ru/database/articles/column_vs_row_store/ (дата обращения: 22.01.2019)
  4. C-Store installation // C-Store[2014-2019]. Дата обновления 13.12.18.URL: http://db.lcs.mit.edu/projects/cstore/README (дата обращения: 22.01.2019)