PipelineDB

Материал из Национальной библиотеки им. Н. Э. Баумана
Последнее изменение этой страницы: 12:16, 22 января 2019.
PipelineDB
Pipelinedb logo.png
Разработчики: Derek Nelson
Выпущена: August 2015; 4 years ago (2015-08)
Постоянный выпуск: 1.0.0 / 24 October 2018 года; 16 months ago (2018-10-24)
Состояние разработки: Active
Написана на: SQL
Операционная система: Кроссплатформенная
Тип ПО: Потоковая СУБД
Лицензия: Apache License 2.0
Веб-сайт pipelinedb.com

PipelineDBоткрытая СУБД предоставляющая средства для непрерывной обработки потока данных.

PipelineDB основан на кодовой базе PostgreSQL 10 и 11, который полностью совместим с данной СУБД. Код проекта распространяется через GitHub. Из дополнительных возможностей PipelineDB отмечается поддержка выполнения непрерывных SQL-запросов, вероятностные структуры данных, возможность слияния непрерывно наполняемых таблиц.

Основным элементом для непрерывной обработки данных выступает специальный тип представлений - CONTINUOUS VIEW, отличающийся от обычных представлений возможностью использования потоков в качестве источника данных для SELECT-запросов. По мере поступления новых данных в потоке, выдаваемый представлением вывод непрерывно обновляется. В качестве примеров областей применения непрерывных запросов можно отметить отслеживание в реальном времени активности в логах и оценка выполнения периодического опроса датчиков.[Источник 1]

Особенности

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

Совместимость с PostgreSQL. PipelineDB встроен в ядро PostgreSQL и может использоваться как замена для замены PostgreSQL без изменения кода приложения. Он поставляется с предустановленной PostGIS и поддерживает все другие расширения.

Нет ETL.PipelineDB устраняет уровень ETL. Поток гранулированных данных непосредственно в базу данных и непрерывно перегонять его с запросами SQL, которые вы объявили.

Эффективный и устойчивый. PipelineDB хранит только выходные данные непрерывных запросов, которые постепенно обновляются по мере поступления данных. Размер базы данных не зависит от количества данных, поступающих с течением времени.

Обработка данных в реальном времени

Принцип работы PipelineDB можно сформулировать так: «постоянные запросы, кратковременные данные». В реляционных СУБД всё обстоит ровно наоборот: «кратковременные запросы, постоянные данные. В PipelineDB данные не хранятся, а поступают в потоке; их обработка происходит «на лету», в движении.

Первые попытки создания инструментов для обработки данных в движении восходят к концу 1980-х годов, когда появились так называемые активные базы данных (Active Database Systems). Они представляли собой расширения к существующим СУБД для обработки событий при помощи триггеров и правил. В качестве примера решений подобного плана можно назвать HiPAC, Starburst или ODE. Широкого распространения они, однако, не получили: сфера их применения была достаточно узкой, а синтаксис правил — слишком сложным и запутанным.

В 1990-х — начале 2000-х появились системы управления потоками данных (Data Stream Management Systems): TelegraphCQ (форк PostgreSQL), StreamBase, StreamSQL. Принцип работы этих инструментов заключался в следующем: при помощи так называемых оконных операторов (window operators) потоки преобразовывались в таблицы, по отношению к которому затем можно было применять SQL-запросы.

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

Инструменты, ориентированные на обработку данных без хранения, получили распространение в течение последних 5 — 6 лет. Из самых известных примеров следует выделить, в частности, Storm и Heron. Из появившихся относительно недавно — Apache Calcite. Все эти решения характеризуются сложностью установки и настройки, а также очень высоким порогом вхождения.

Преимущества PipelineDB перед упомянутыми выше инструментами очевидны:

  • простота настройки: чтобы начать работу, достаточно просто скачать и установить необходимые пакеты;
  • простота освоения (следствие совместимости с PostgreSQL).

Рассмотрим, как в PipelineDB строится работа с потоками данных. Начнём с анализа двух важнейших понятий: «непрерывное представление» и «поток».

Потоки и непрерывные представления

«Поток» и «непрерывное представление» — главные абстракции PipelineDB.

Поток — это последовательность событий. Запись событий в поток осуществляется точно так же, как запись в таблицы в реляционных ДБ (подробнее об этом см. здесь). Когда событие поступает в поток, к нему добавляется временная метка (timestamp).

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

Непрерывное представление (англ. continuous view) — это выборка из потоков и таблиц, обновляемая по мере поступления новых данных. В непрерывные представления попадают события, отбираемые по определённым параметрам.

Чтобы лучше понять, как работает PipelineDB, приведём несколько примеров непрерывных представлений.

Вот так, например, можно создать непрерывное представление для ежедневного подсчёта числа уникальных посетителей, приходящих на сайт по внешним ссылкам:

CREATE VIEW uniques AS 
SELECT 
day(arrival_timestamp), 
referrer::text, 
COUNT(DISTINCT user_id::integer)
FROM users_stream GROUP BY day, referrer;

Ещё один пример — подсчёт числа показов рекламы на сайте за последние 5 минут:

CREATE VIEW imps WITH (sw = '5 minutes') AS 
SELECT COUNT(*) FROM imps_stream

Как видим, непрерывные представления имеют следующую форму:

CREATE CONTINUOUS VIEW name AS query

При создании непрерывного представления по отношению к потокам выполняется операция SELECT; с её помощью отбираются данные, соответствующие требуемым параметрам.

Основные теоретические сведения, необходимые для понимания принципов работы PipelineDB, мы изложили. Переходим к практической части. Сначала мы опишем процедуру установки и первичной настройки PipelineDB, а затем перейдём к практическому примеру.

Установка и первичная настройка


Процедуру установки PipelineDB мы будем описывать на материале OC Ubuntu 16.04. Если вы используете другой дистрибутив Linux, обратитесь к официальной документации.

Чтобы установить PipelineDB, достаточно выполнить две команды:

$ wget https://www.pipelinedb.com/download/0.9.9/ubuntu
$ sudo dpkg -i ubuntu16

После этого инициализируем сервер PipelineDB:

$ pipeline-init -D [имя директории]

В опции -D можно указывается имя новой директории, которая будет создана автоматически. Вот список содержимого этой директории:

base          pg_hba.conf    pg_replslot   pg_subtrans  pipelinedb.auto.conf
global        pg_ident.conf  pg_serial     pg_tblspc    pipelinedb.conf
pg_clog       pg_logical     pg_snapshots  pg_twophase  postmaster.opts
pg_commit_ts  pg_multixact   pg_stat       PG_VERSION   postmaster.pid
pg_dynshmem   pg_notify      pg_stat_tmp   pg_xlog

Основные настройки PipelineDB хранятся в файле pipelinedb.conf. Они почти не отличаются от соответствующих настроек PostgreSQL.

По умолчанию PipelineDB не может принимать соединения с удалённых хостов. Чтобы изменить эту настройку, откроем файл pipelinedb.conf, найдём в нём раздел Connections and Authentication, расскомментируем первую строку и отредактируем её следующим образом:

listen_addresses = '*'

После этого пропишем конкретные хосты в файле pg_hba.conf:

host    all             all             <IP-адрес>/<подсеть>            md5

Если нам нужно принимать соединения со всех возможных хостов, эта строка должна выглядеть так:

host    all             all             0.0.0.0/0            md5

Вот и всё. PipelineDB готова к работе.[Источник 2] Чтобы запустить её в фоновом режиме, выполним следующую команду:

$ pipeline-ctl -D [имя директории] -l pipelinedb.log start

Работа с потоками данных

Источники

  1. Первый выпуск PipelineDB, СУБД для непрерывной обработки потоков // OpenNet [1996–2018]. Дата изменения: 08.07.2015. URL: https://www.opennet.ru/opennews/art.shtml?num=42582 (Дата обращения: 13.06.2018).
  2. PipelineDB: работа с потоками данных // Habr [2006–2018]. Дата изменения: 03.08.2016. URL: https://habr.com/company/selectel/blog/306978/ (Дата обращения: 13.06.2018).