Я уже упоминал, что делаю SQL-движок с нуля. Модель исполнения построена на базе моего компилятора Qumir (https://qumir.dev).
Пайплайн выглядит так:
SQL parser -> AST -> logical plan -> optimization passes -> physical plan -> Qumir kernels -> execution graph
Поскольку движок построен на Qumir, появилась возможность практически из коробки встраивать функции на языке Кумир в SQL-запросы через CREATE FUNCTION.
Пощупать можно тут: https://db.qumir.dev
А теперь просто цифры бенчмарков на M5 Pro:
Clickbench:
| Query | qdb (s) | DuckDB (s) | ClickHouse (s) | qdb ÷ DuckDB | qdb ÷ ClickHouse |
|---|---|---|---|---|---|
| q0 | 0.013 | 0.040 | 0.130 | 0.33× | 0.10× |
| q1 | 0.016 | 0.050 | 0.120 | 0.32× | 0.13× |
| q2 | 0.046 | 0.070 | 0.130 | 0.65× | 0.35× |
| q3 | 0.039 | 0.070 | 0.130 | 0.56× | 0.30× |
| q4 | 0.175 | 0.160 | 0.200 | 1.09× | 0.87× |
| q5 | 0.217 | 0.230 | 0.250 | 0.94× | 0.87× |
| q6 | 0.023 | 0.090 | 0.120 | 0.26× | 0.19× |
| q7 | 0.011 | 0.050 | 0.120 | 0.22× | 0.09× |
| q8 | 0.264 | 0.200 | 0.280 | 1.32× | 0.94× |
| q9 | 0.324 | 0.270 | 0.330 | 1.20× | 0.98× |
| q10 | 0.113 | 0.100 | 0.200 | 1.13× | 0.57× |
| q11 | 0.135 | 0.110 | 0.210 | 1.23× | 0.64× |
| q12 | 0.262 | 0.230 | 0.270 | 1.14× | 0.97× |
| q13 | 0.500 | 0.360 | 0.370 | 1.39× | 1.35× |
| q14 | 0.241 | 0.260 | 0.340 | 0.93× | 0.71× |
| q15 | 0.210 | 0.190 | 0.200 | 1.11× | 1.05× |
| q16 | 0.383 | 0.430 | 0.500 | 0.89× | 0.77× |
| q17 | 0.378 | 0.350 | 0.290 | 1.08× | 1.30× |
| q18 | 0.649 | 0.680 | 0.850 | 0.96× | 0.76× |
| q19 | 0.081 | 0.050 | 0.120 | 1.62× | 0.68× |
| q20 | 0.388 | 0.410 | 0.580 | 0.95× | 0.67× |
| q21 | 0.436 | 0.350 | 0.650 | 1.24× | 0.67× |
| q22 | 0.768 | 0.620 | 0.960 | 1.24× | 0.80× |
| q23 | 0.492 | 0.530 | 0.680 | 0.93× | 0.72× |
| q24 | 0.148 | 0.200 | 0.320 | 0.74× | 0.46× |
| q25 | 0.125 | 0.170 | 0.230 | 0.73× | 0.54× |
| q26 | 0.149 | 0.210 | 0.330 | 0.71× | 0.45× |
| q27 | 0.361 | 0.340 | 0.630 | 1.06× | 0.57× |
| q28 | 0.884 | 3.560 | 0.680 | 0.25× | 1.30× |
| q29 | 0.032 | 0.060 | 0.130 | 0.53× | 0.24× |
| q30 | 0.233 | 0.280 | 0.430 | 0.83× | 0.54× |
| q31 | 0.261 | 0.310 | 0.470 | 0.84× | 0.55× |
| q32 | 0.718 | 0.780 | 0.870 | 0.92× | 0.82× |
| q33 | 1.057 | 0.880 | 0.900 | 1.20× | 1.17× |
| q34 | 1.065 | 0.920 | 0.900 | 1.16× | 1.18× |
| q35 | 0.189 | 0.250 | 0.180 | 0.76× | 1.05× |
| q36 | 0.034 | 0.100 | 0.130 | 0.34× | 0.26× |
| q37 | 0.025 | 0.090 | 0.120 | 0.28× | 0.21× |
| q38 | 0.027 | 0.070 | 0.110 | 0.39× | 0.25× |
| q39 | 0.072 | 0.140 | 0.150 | 0.51× | 0.48× |
| q40 | 0.011 | 0.060 | 0.120 | 0.18× | 0.09× |
| q41 | 0.014 | 0.060 | 0.120 | 0.23× | 0.12× |
| q42 | 0.008 | 0.060 | 0.100 | 0.13× | 0.08× |
| total | 11.577 | 14.44 | 14.95 | 0.80× | 0.77× |
TPCH-100
| Query | qdb (s) | DuckDB (s) | DataFusion (s) | ClickHouse (s) | qdb ÷ DuckDB | qdb ÷ DataFusion | qdb ÷ ClickHouse |
|---|---|---|---|---|---|---|---|
| q1 | 1.542 | 2.200 | 1.65 | 3.30 | 0.70× | 0.93× | 0.47× |
| q2 | 0.552 | 0.420 | 0.56 | 0.77 | 1.31× | 0.99× | 0.72× |
| q3 | 1.683 | 1.390 | 1.19 | 30.18 | 1.21× | 1.41× | 0.06× |
| q4 | 1.082 | 0.930 | 0.59 | 1.10 | 1.16× | 1.83× | 0.98× |
| q5 | 2.512 | 1.450 | 1.87 | 54.38 | 1.73× | 1.34× | 0.05× |
| q6 | 0.591 | 0.870 | 0.65 | 1.43 | 0.68× | 0.91× | 0.41× |
| q7 | 1.786 | 1.350 | 3.08 | 4.05 | 1.32× | 0.58× | 0.44× |
| q8 | 1.328 | 1.570 | 1.68 | 110.26 | 0.85× | 0.79× | 0.01× |
| q9 | 2.963 | 3.090 | 3.23 | 120.44 | 0.96× | 0.92× | 0.02× |
| q10 | 2.123 | 1.770 | 1.74 | 3.88 | 1.20× | 1.22× | 0.55× |
| q11 | 0.272 | 0.260 | 0.42 | 0.65 | 1.05× | 0.65× | 0.42× |
| q12 | 1.383 | 1.090 | 0.92 | 3.42 | 1.27× | 1.50× | 0.40× |
| q13 | 3.198 | 2.190 | 1.75 | 3.02 | 1.46× | 1.83× | 1.06× |
| q14 | 0.783 | 1.130 | 0.78 | 1.66 | 0.69× | 1.00× | 0.47× |
| q15 | 0.696 | 1.080 | 0.71 | 3.07 | 0.64× | 0.98× | 0.23× |
| q16 | 0.554 | 0.460 | 0.41 | 0.52 | 1.20× | 1.35× | 1.07× |
| q17 | 0.998 | 1.280 | 3.76 | 2.14 | 0.78× | 0.27× | 0.47× |
| q18 | 2.040 | 2.300 | 29.72 | 1.93 | 0.89× | 0.07× | 1.06× |
| q19 | 1.956 | 1.610 | 1.00 | 2.85 | 1.21× | 1.96× | 0.69× |
| q20 | 0.848 | 1.160 | 1.15 | 1.86 | 0.73× | 0.74× | 0.46× |
| q21 | 3.409 | 3.890 | 5.46 | 8.74 | 0.88× | 0.62× | 0.39× |
| q22 | 0.544 | 0.610 | 0.36 | 0.59 | 0.89× | 1.51× | 0.92× |
| total | 32.843 | 32.10 | 62.680 | 360.240 | 1.02× | 0.52× | 0.09× |
TPCDS-100
| Query | qdb (s) | DuckDB (s) | qdb ÷ DuckDB |
|---|---|---|---|
| q1 | 0.143 | 0.200 | 0.72× |
| q2 | 0.965 | 0.520 | 1.86× |
| q3 | 0.470 | 0.430 | 1.09× |
| q4 | 6.876 | 3.560 | 1.93× |
| q5 | 2.061 | 1.200 | 1.72× |
| q6 | 0.371 | 0.610 | 0.61× |
| q7 | 0.981 | 0.850 | 1.15× |
| q8 | 3.751 | 0.640 | 5.86× |
| q9 | 4.048 | 3.250 | 1.25× |
| q10 | 0.556 | 0.410 | 1.36× |
| q11 | 4.045 | 2.160 | 1.87× |
| q12 | 0.156 | 0.180 | 0.87× |
| q13 | 1.679 | 1.800 | 0.93× |
| q14 | 11.775 | 7.720 | 1.53× |
| q15 | 0.273 | 0.220 | 1.24× |
| q16 | 0.769 | 0.150 | 5.13× |
| q17 | 0.920 | 0.770 | 1.19× |
| q18 | 0.895 | 0.360 | 2.49× |
| q19 | 0.718 | 0.730 | 0.98× |
| q20 | 0.207 | 0.110 | 1.88× |
| q21 | 0.394 | 0.080 | 4.92× |
| q22 | 4.297 | 2.070 | 2.08× |
| q23 | 18.164 | 12.70 | 1.43× |
| q24 | 1.399 | 1.990 | 0.70× |
| q25 | 1.126 | 0.940 | 1.20× |
| q26 | 0.534 | 0.200 | 2.67× |
| q27 | 0.987 | 0.840 | 1.17× |
| q28 | 3.896 | 2.980 | 1.31× |
| q29 | 0.853 | 0.960 | 0.89× |
| q30 | 0.227 | 0.170 | 1.34× |
| q31 | 0.944 | 0.740 | 1.28× |
| q32 | 0.371 | 0.090 | 4.12× |
| q33 | 0.920 | 0.680 | 1.35× |
| q34 | 0.746 | 0.670 | 1.11× |
| q35 | 0.730 | 0.810 | 0.90× |
| q36 | 0.925 | 1.020 | 0.91× |
| q37 | 0.362 | 0.140 | 2.59× |
| q38 | 1.468 | 0.800 | 1.84× |
| q39 | 1.343 | 0.330 | 4.07× |
| q40 | 0.810 | 0.200 | 4.05× |
| q41 | 0.070 | 0.040 | 1.75× |
| q42 | 0.505 | 0.450 | 1.12× |
| q43 | 0.695 | 0.530 | 1.31× |
| q44 | 1.601 | 1.140 | 1.40× |
| q45 | 0.229 | 0.290 | 0.79× |
| q46 | 1.385 | 1.370 | 1.01× |
| q47 | 2.614 | 1.170 | 2.23× |
| q48 | 1.290 | 1.240 | 1.04× |
| q49 | 1.462 | 1.290 | 1.13× |
| q50 | 0.661 | 0.780 | 0.85× |
| q51 | 3.108 | 2.910 | 1.07× |
| q52 | 0.520 | 0.470 | 1.11× |
| q53 | 0.538 | 0.480 | 1.12× |
| q54 | 0.754 | 0.630 | 1.20× |
| q55 | 0.449 | 0.470 | 0.96× |
| q56 | 0.897 | 0.690 | 1.30× |
| q57 | 1.069 | 0.360 | 2.97× |
| q58 | 0.694 | 0.590 | 1.18× |
| q59 | 1.791 | 1.370 | 1.31× |
| q60 | 0.996 | 0.740 | 1.35× |
| q61 | 1.245 | 0.090 | 13.83× |
| q62 | 0.456 | 0.210 | 2.17× |
| q63 | 0.540 | 0.480 | 1.13× |
| q64 | 4.348 | 2.400 | 1.81× |
| q65 | 1.746 | 0.880 | 1.98× |
| q66 | 0.855 | 0.470 | 1.82× |
| q67 | 38.700 | 11.69 | 3.31× |
| q68 | 1.282 | 1.520 | 0.84× |
| q69 | 0.548 | 0.440 | 1.25× |
| q70 | 2.148 | 0.710 | 3.02× |
| q71 | 1.003 | 0.840 | 1.19× |
| q72 | 1.511 | 1.120 | 1.35× |
| q73 | 0.615 | 0.660 | 0.93× |
| q74 | 2.773 | 1.840 | 1.51× |
| q75 | 2.839 | 1.820 | 1.56× |
| q76 | 0.940 | 1.060 | 0.89× |
| q77 | 1.351 | 1.100 | 1.23× |
| q78 | 11.622 | 3.070 | 3.79× |
| q79 | 1.508 | 1.470 | 1.03× |
| q80 | 4.303 | 1.870 | 2.30× |
| q81 | 0.278 | 0.170 | 1.64× |
| q82 | 0.461 | 0.240 | 1.92× |
| q83 | 0.080 | 0.120 | 0.67× |
| q84 | 0.121 | 0.130 | 0.93× |
| q85 | 0.466 | 0.830 | 0.56× |
| q86 | 0.239 | 0.200 | 1.19× |
| q87 | 2.101 | 0.910 | 2.31× |
| q88 | 3.502 | 2.690 | 1.30× |
| q89 | 0.798 | 0.560 | 1.43× |
| q90 | 0.207 | 0.130 | 1.59× |
| q91 | 0.086 | 0.120 | 0.72× |
| q92 | 0.230 | 0.220 | 1.05× |
| q93 | 0.599 | 1.360 | 0.44× |
| q94 | 0.392 | 0.360 | 1.09× |
| q95 | 14.049 | 2.630 | 5.34× |
| q96 | 0.423 | 0.380 | 1.11× |
| q97 | 3.381 | 0.990 | 3.42× |
| q98 | 0.553 | 0.550 | 1.01× |
| q99 | 0.893 | 0.240 | 3.72× |
| total | 212.676 | 117.86 | 1.80× |