Vertica – колоночная база данных
Vertica (читается “Вертика”) — колоночная база данных. В отличие от строчных баз данных (типа Mysql), каждая колонка ее таблиц представляет из себя отдельное хранилище. Это позволяет получить большой прирост в скорости выборок (особенно агрегатных). Компрессионный формат хранения данных позволяет сэкономить место на диске, а наличие аналитических функций делает эту БД мощным инструментом для построения BI и Big Data систем.
Устанавливаем Free Edition
Качаем Verification free edition и запускаем установку:
dpkg -i vertica.deb
Теперь запустим скрипт настройки:
/opt/vertica/sbin/install_vertica --hosts 127.0.0.1 --failure=NONE --accept-eula --dba-user-password-disabled
# используем failure=NONE
и dba-user-password-disabled
только для тестирования, в продуктивной среде эту опцию нужно пропустить
Теперь создадим базу данных data
без пароля:
su - dbadmin -c "/opt/vertica/bin/admintools -t create_db -d data -s 127.0.0.1 -l /opt/vertica/config/licensing/vertica_community_edition.license.key"
Готово.
Проверяем
Теперь попробуем выполнить проверочный скрипт:
/opt/vertica/bin/vsql -U dbadmin -c "SELECT NOW();"
Выведет текущую дату:
now ------------------------------- 2017-03-14 12:57:53.115073+02 (1 row)
Базы, таблицы и данные
Не смотря на другой принцип хранения данных, Vertica работает так же, как и любая другая SQL база данных. Удобный встроенный клиент для работы с базой vsql
:
/opt/vertica/bin/vsql -U dbadmin
# запустим клиент
Создадим тестовую табличку:
CREATE TABLE test(id int, name varchar);
Вставим в нее данные:
INSERT INTO test VALUES(1, 'Den'); INSERT INTO test VALUES(2, 'Not Den');
Проверим данные в таблице:
SELECT * FROM test
Увидим:
id | name ----+--------- 1 | Den 2 | Not Den (2 rows)
Если будете вставлять большое количество данных в базу, стоит использовать операцию COPY. Она существенно ускоряет вставку данных, т.к. использует пакетное выполнение вместо строчного.
Проекции и индексы
Vertica не использует индексы (их там просто нет). Физически данные хранятся в виде проекций.
Проекции — это копии данных из таблиц на диске, которые используются для той или иной выборки.
Например, можно создать проекцию, которая будет содержать данные, отсортированные по какой-либо колонке.
Проекции создаются руками (как и индексы) и подбираются под конкретные запросы:
CREATE PROJECTION test_name AS SELECT id, name FROM test order by name ASC;
# Создадим проекцию для выборок с сортировкой по колонке name
Подробнее о проекциях в Вертике.
Аналитические функции
Vertica поддерживает набор аналитических функций. Аналитические функции отличаются от агрегатных тем, что работают не с группой записей, а с окном. Критерий размера окна задается условием OVER(...)
.
Представим, что у нас есть таблица клиентов:
customers --------- customer_state # регион customer_name # название customer_since # дата старта
Теперь мы хотим выбрать всех клиентов, которые будут отсортированы по дате старта. Однако отсортировать хотим не по всей таблице, а в рамках каждого региона. Для этого удобно использовать функцию RANK()
:
SELECT customer_state, customer_name, customer_since, RANK() OVER(PARTITION BY customer_state ORDER BY customer_since) AS rank FROM customer_dimension WHERE customer_type='Company' AND customer_since > '01/01/2007' ORDER BY customer_state LIMIT 10;
# Использование аналитической функции RANK()
Аналитическая функция RANK()
вернет номер каждой строки в рейтинге согласно условию в OVER(PARTITION BY ...)
. Это условие отсортирует данные по полю customer_since
в рамках каждого региона customer_state
.
Vertica и языки разработки
Для работы с другими технологиями Vertica использует драйвер ODBC. Например, на PHP:
$db = odbc_connect('Default','dbadmin',''); $stm = 'SELECT * FROM test LIMIT 1'; $st = odbc_prepare($db, $stm); $row = odbc_fetch_array($st) print_r($row);
# Работа с Vertica с помощью ODBC
Доступность
Vertica использует концепцию K-safety для обеспечения надежности хранения данных и доступности самой системы. В двух словах K-safety показывает количество узлов, которое может выйти из строя, но кластер продолжит работать. Например, K-safety равный 1 означает, что в кластере есть хотя бы 3 узла (один из которых может поломаться без последствий для кластера).
Бекапы
В пакете с базой данных идет скрипт бекапа данных и восстановления из бекапа. Для его использования необходимо создать файл настроек и выполнить простую команду:
/opt/vertica/bin/vbr.py --task backup --config-file backup.ini
# Создание бекапа данных
Однако для начала необходимо настроить хранилище для бекапов и доступ к нему. Подробный пример настройки бекапов в Vertica.
Vertica и Mysql
Конечно, обе базы данных стоит использовать для разных задач. Ключевое отличие Vertica – она адресует проблемы сложных выборок на большом количестве данных. Поэтому на практике, вы заходите использовать оба решения:
- MySQL для работы с данными приложения.
- Vertica для сбора аналитических данных и их последующей обработки.
Самое важное
Vertica — прекрасное решение для обработки больших (аналитических) данных. Бесплатная версия позволит работать с таблицами в миллиарды записей. А встроенные механизмы обеспечения высокой доступности и резервирования упростят поддержку.
Сообщить об опечатке
Текст, который будет отправлен нашим редакторам: