Vertica - колоночная база данных

Vertica (читается "Вертика") — колоночная база данных. В отличие от строчных баз данных (типа Mysql), каждая колонка ее таблиц представляет из себя отдельное хранилище. Это позволяет получить большой прирост в скорости выборок (особенно агрегатных). Компрессионный формат хранения данных позволяет сэкономить место на диске, а наличие аналитических функций делает эту БД мощным инструментом для построения BI и Big Data систем.

Устанавливаем Free Edition

Качаем Vertica free edition (в примере — версия для Debian) и запускаем установку:

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 — прекрасное решение для обработки больших (аналитических) данных. Бесплатная версия позволит работать с таблицами в миллиарды записей. А встроенные механизмы обеспечения высокой доступности и резервирования упростят поддержку.

Подпишитесь на Хайлоад с помощью Google аккаунта
или закройте эту хрень