Tantor PipelineDB

Расширение для СУБД Tantor или PostgreSQL с открытым исходным кодом для непрерывного выполнения SQL-запросов на потоках данных с инкрементальным сохранением результатов в таблицах.
Высокопроизводительная агрегация временных рядов для PostgreSQL
  • Непрерывная агрегация
    Агрегация и фильтрация потоковых данных, объединение их в сводные данные в реальном времени с помощью непрерывных SQL-запросов. Результаты сохраняются в Tantor PipelineDB.
  • Объединение потоков c таблицами
    Для аналитики потоковых данных часто требуется контекст. Интегрированный реляционный механизм хранения Tantor PipelineDB позволяет соединять потоковые данные с историческими данными для сопоставления в режиме real-time.
  • Запросы с заданными временными интервалами
    Запуск непрерывных запросов с заданными временными интервалами (секунда, минута, день, 30 дней и т. д.). Интервальные запросы сохраняются в Tantor PipelineDB, а сырые данные вне заданных интервалов могут опускаться.
  • Вероятностные структуры данных
    В real-time аналитике допустимы компромиссы точности ради скорости. Tantor PipelineDB поддерживает структуры и алгоритмы для приближенных вычислений на потоках (фильтры Блума, count-min sketch, Filtered-Space-Saving top-k, HyperLogLog, and t-digest).

Как работает Tantor PipelineDB?

  • Без прикладного кода
    Tantor PipelineDB позволяет обрабатывать данные в реальном времени, используя только SQL. Сложность вычислений на потоках данных берут на себя планировщик выполнения непрерывных запросов и механизм их исполнения.
  • Без ETL
    Tantor PipelineDB устраняет слой ETL. Данные запросов передаются напрямую в базу и непрерывно обрабатываются согласно выставленным SQL-запросам. Размер БД по мере поступления новых данных остается неизменным.
  • На СУБД Tantor и PostgreSQL
    Tantor PipelineDB – стандартное расширение для СУБД Tantor и PostgreSQL. Для высокопроизводительных потоковых рабочих нагрузок используются все возможности этих СУБД.

Примеры использования

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

Пример 1.
Вычислить количество уникальных пользователей, проследовавших в день по url-ссылке, используя только постоянный объем памяти
CREATE VIEW uniques AS
SELECT
day(arrival_timestamp),
referrer::text,
COUNT(DISTINCT user_id::integer)
FROM users_stream GROUP BY day, referrer;
Пример 2.
Сколько показов рекламы мы осуществили за последние пять минут?
CREATE VIEW imps WITH (sw = '5 minutes') AS
SELECT COUNT(*) FROM imps_stream
Пример 3.
Объединить конверсии по любым предыдущим кликам, которые могли их вызвать
CREATE VIEW click_throughs AS
SELECT
day(arrival_timestamp),
campaign_id, COUNT(*), COUNT(DISTINCT user_id)
FROM conversions JOIN clicks USING(user_id, campaign_id)
WHERE conversions.timestamp > clicks.timestamp
GROUP BY day, campaign_id;
Пример 4.
Выяснить, каковы 90-й, 95-й и 99-й процентили задержки запроса серверов
CREATE VIEW latency AS
SELECT
percentile_cont(array[90, 95, 99])
WITHIN GROUP (ORDER BY latency::integer)
FROM latency_stream;
Пример 5.
Узнать, сколько трафика потребляет каждый из топ-10 IP-адресов, отправляющих запросы к серверу
CREATE VIEW heavy_hitters AS
SELECT
day(arrival_timestamp),
topk_agg(ip, 10, response_size)
FROM requests_stream GROUP BY day;

Глоссарий потоковой обработки

  • 1
    Непрерывные представления (continuous views)
    основная абстракция Tantor PipelineDB. Их можно воспринимать, как материализованные представления с высокой пропускной способностью, инкрементально обновляемые в режиме реального времени. Самое важное свойство непрерывных представлений в том, что в БД фактически хранится только результат их выполнения.
  • 2
    Буфер потока (stream buffer)
    кортежи, вставленные в поток. Хранятся в кольцевом буфере общей памяти с параллельным доступом.
  • 3
    Рабочий процесс (worker)
    Рабочие процессы читают микропакеты из буфера потока, агрегируют их в промежуточные результаты и отправляют на обработку в комбинирующие процессы.
  • 4
    Комбинирующий процесс (combiner)
    принимает промежуточные результаты от рабочих процессов и непрерывно объединяет их с кортежами, хранящимися на диске.
Связаться с нами
Расскажите о своей задаче, и мы оперативно вернемся к вам с ответом.

Новости