Эта серия статей принесла мне массу удовольствия, поскольку я узнал и исследовал новые технологии. Также интересно посмотреть, что приобрело популярность с тех пор, как я впервые это обнаружил. Моя последняя статья об , к моему большому удивлению, пользовалась невероятной популярностью, но, похоже, я был не единственным, кто интересовался, что это за чертовщина. Благодаря этой статье я наткнулся на лицензионный проект Apache 2.0 с открытым исходным кодом , спонсируемый . Это база данных SQL, в которой хранятся как исторические, так и потоковые данные. Написанный на C++ и основанный на , упор делается на простоту и производительность. Благодаря одному исполняемому файлу установка проста. Apache Paimon Proton Timeplus ClickHouse Тенденция, которую я заметил, заключается в том, что создается все больше и больше приложений для анализа в реальном времени, но вы не хотите создавать их дважды. Один раз для потоковой передачи и один раз для исторической засыпки. Наличие единой платформы, которая могла бы выполнять запросы либо в пакетном, либо в потоковом режиме, либо даже в гибридном режиме, в котором вы объединяете исторические данные с потоком входящих данных, имело бы определенные преимущества. Похоже, что «Протон» был создан именно для этого. Обзор Протона Короче говоря, у нас есть база данных ClickHouse, а в Timeplus добавлена поддержка потоковых сервисов. Это должно дать вам механизм запросов, подобный Flink, и потоковое хранилище, подобное Kafka, с базой данных ClickHouse. Итак, как это выглядит? Пунктирная линия — это место, где появляется Proton. Я предлагаю прочитать документацию , чтобы получить хорошее представление о том, что возможно. по архитектуре Чтобы создать случайный поток данных и запросить его с помощью Proton, мы можем сделать что-то вроде этого: -- Create a stream with random data. CREATE RANDOM STREAM devices(device string default 'device'||to_string(rand()%4), temperature float default rand()%1000/10); -- Run the long-running stream query. SELECT device, count(*), min(temperature), max(temperature) FROM devices GROUP BY device; ┌─device──┬─count()─┬─min(temperature)─┬─max(temperature)─┐ │ device0 │ 2256 │ 0 │ 99.6 │ │ device1 │ 2260 │ 0.1 │ 99.7 │ │ device3 │ 2259 │ 0.3 │ 99.9 │ │ device2 │ 2225 │ 0.2 │ 99.8 │ └─────────┴─────────┴──────────────────┴──────────────────┘ Особенности Протона У Proton много отличных функций; Меня сразу поразила возможность создавать материализованное представление для сохранения определенных событий в Proton. Воспользовавшись документацией, предположим, что у вас есть поток Kafka, сообщающий о веб-событиях, и вы хотите сохранить отчеты о неработающих ссылках, чтобы можно было запросить их позже, даже если Kafka отключен или события удалены. Это будет выглядеть примерно так: create materialized view mv_broken_links as select raw:requestedUrl as url,raw:method as method, raw:ipAddress as ip, raw:response.statusCode as statusCode, domain(raw:headers.referrer) as referrer from frontend_events where raw:response.statusCode<>'200'; Затем, если вы хотите напрямую запросить материализованное представление и построить на основе данных гистограмму, это будет выглядеть так: -- streaming query select * from mv_broken_links; -- historical query select method, count() as cnt, bar(cnt,0,40,5) as bar from table(mv_broken_links) group by method order by cnt desc; ┌─method─┬─cnt─┬─bar─┐ │ GET │ 25 │ ███ │ │ DELETE │ 20 │ ██▌ │ │ HEAD │ 17 │ ██ │ │ POST │ 17 │ ██ │ │ PUT │ 17 │ ██ │ │ PATCH │ 17 │ ██ │ └────────┴─────┴─────┘ Некоторые из этих функций напоминают мне , компанию, в которой я работал несколько лет назад. Upsolver Драйверы для других языков доступны для Java, Go и Python. Использование Proton с чем-то вроде потребует минимального объема потоковой передачи исторических данных. Redpanda Доступно множество других функций, но это не руководство. Хочу сделать легкое пояснение и обратить внимание на некоторые особенности. Документация краткая и в целом хорошо написанная, определенно лучше, чем во многих проектах с открытым исходным кодом. Краткое содержание Хотя лично мне сейчас не нужна такая договоренность, я определенно бывал в местах и видел компании, где это было бы очень, очень здорово. Такой же крутой, как этот парень? Наверное нет, но опять же ничего нет :). Если отбросить легкомыслие, команда Proton проделала отличную работу, документируя проект и максимально упрощая его установку и использование. Мне нравятся эти однобинарные проекты, которым не нужна обширная экосистема Java с множеством зависимостей. Однако не заблуждайтесь: у Timeplus есть коммерческая версия, которая дает вам больше возможностей, чем стандартная версия Proton. Тем не менее, они, похоже, очень поддерживают Протон и приветствуют сообщество. Прочтите мои другие статьи «Что, черт возьми…», по ссылкам ниже: Что, черт возьми, такое DuckDB? Что, черт возьми, такое Маллой? Что, черт возьми, такое PRQL? Что, черт возьми, такое GlareDB? Что такое SeaTunnel? Что, черт возьми, такое LanceDB? Что, черт возьми, такое СДС? Что, черт возьми, такое Пеймон?