Вычисление

В Tengri вычисление производится в виртуальных вычислительных пулах — вычислителях.

Вычислители

SQL-вычислитель — это легковесный контейнер, запускаемый на аппаратном кластере за ~100 миллисекунд.

SQL-вычислитель:

  • получает эксклюзивные ядра (vCPU) и RAM-бюджет

  • подгружает данные и выполняет SQL-запросы

  • отключается системой после некоторого периода ожидания (если простаивает без нагрузки)

За счет такой архитектуры вычислителей:

  • Каждый аналитик работает со своим SQL-вычислителем.

  • Аналитики не мешают друг другу.

sql workers

Каждый аналитик в каждой сессии может выбрать размер вычислителя для SQL-запроса:
XS / S / M / L / XL. Каждый следующий размер вычислителя в два раза больше предыдущего.

Время выполнения теста TPC-H на вычислителях разного размера:

worker sizes
Код, использованный для выполнения этого теста
SELECT profit.nation AS nation,
profit.o_year AS o_year,
SUM(profit.amount) AS sum_profit

FROM (SELECT s100_nation.n_name AS nation,

EXTRACT(YEAR FROM s100_orders.o_orderdate) AS o_year,

s100_lineitem.l_extendedprice * (1 - s100_lineitem.l_discount) -
s100_partsupp.ps_supplycost * s100_lineitem.l_quantity AS amount

FROM s100_part, s100_supplier, s100_lineitem,
s100_partsupp, s100_orders, s100_nation

WHERE s100_supplier.s_suppkey = s100_lineitem.l_suppkey
AND s100_partsupp.ps_suppkey = s100_lineitem.l_suppkey
AND s100_partsupp.ps_partkey = s100_lineitem.l_partkey
AND s100_part.p_partkey = s100_lineitem.l_partkey
AND s100_orders.o_orderkey = s100_lineitem.l_orderkey
AND s100_supplier.s_nationkey = s100_nation.n_nationkey
AND s100_part.p_name LIKE '%' || 'black' || '%')
AS profit

GROUP BY profit.nation, profit.o_year ORDER BY nation, o_year
DESC NULLS FIRST LIMIT 1000;

В Tengri также поддерживаются вычислители Python.

Ускорение вычислений

Для ускорения вычислений в Tengri поддержаны:

Morsel-driven parallelism

OLAP SQL-запросы работают быстрее за счет использования Morsel-алгоритмов, позволяющих загружать все vCPU, выделенные системой.

SIMD-инструкции

OLAP SQL-запросы работают быстрее за счет использования SIMD-инструкций современных CPU.