paint-brush
¿Qué diablos es el protón?por@progrockrec
1,501 lecturas
1,501 lecturas

¿Qué diablos es el protón?

por Shawn Gordon4m2023/12/31
Read on Terminal Reader

Demasiado Largo; Para Leer

Proton es un proyecto de código abierto con licencia Apache 2.0 patrocinado por [Timeplus] Escrito en C++ y desarrollado por [ClickHouse], alberga datos históricos y de transmisión. Con un único ejecutable la instalación es sencilla. Proton tiene muchas características ingeniosas, incluida la capacidad de crear una vista materializada para guardar eventos específicos.
featured image - ¿Qué diablos es el protón?
Shawn Gordon HackerNoon profile picture
0-item
1-item

Esta serie de artículos ha sido muy divertida para mí porque he aprendido y explorado nuevas tecnologías. También es divertido ver qué se ha popularizado desde que lo descubrí por primera vez. Mi último artículo sobre Apache Paimon fue increíblemente popular, para mi sorpresa, pero parece que no fui el único interesado en qué diablos era. Gracias a ese artículo, encontré el proyecto de código abierto con licencia Apache 2.0, Proton , patrocinado por Timeplus . Es una base de datos SQL que admite datos históricos y de transmisión. Escrito en C++ y desarrollado por ClickHouse , la atención se centra en la simplicidad y el rendimiento. Con un único ejecutable la instalación es sencilla.


Una tendencia que he visto es que cada vez se crean más aplicaciones de análisis en tiempo real, pero no conviene crearlas dos veces. Una vez para streaming y otra para el backfill histórico. Habría ventajas definitivas en tener una única plataforma que pudiera realizar consultas en modo por lotes o en modo streaming o incluso en un modo híbrido en el que se unen datos históricos a un flujo de datos entrantes. Parece que Proton fue construido para hacer precisamente eso.

Descripción general del protón

En pocas palabras, tenemos una base de datos de ClickHouse y Timeplus ha agregado soporte para servicios de transmisión. Eso debería brindarle un motor de consultas tipo Flink y un almacenamiento de transmisión tipo Kafka con esa base de datos de ClickHouse. Entonces, ¿cómo se ve eso?


Arquitectura de protones


La línea de puntos es donde entra en juego Proton. Sugiero leer los documentos de arquitectura para tener una buena idea de lo que es posible.


Para crear un flujo aleatorio de datos y consultarlo con Proton, podemos hacer algo como esto:

 -- 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 │ └─────────┴─────────┴──────────────────┴──────────────────┘


Características de los protones

Proton tiene muchas características ingeniosas; Uno que me llamó la atención de inmediato fue la capacidad de crear una vista materializada para guardar eventos específicos en Proton. Tomando prestado de la documentación, digamos que tiene una secuencia de Kafka que informa eventos web y desea guardar los informes de enlaces rotos para poder consultarlos más tarde, incluso con Kafka inactivo o los eventos eliminados. Se vería algo como esto:

 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';


Luego, si desea consultar directamente la vista materializada y crear un gráfico de barras a partir de los datos, se vería así:

 -- 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 │ ██ │ └────────┴─────┴─────┘


Algunas de estas funciones me recuerdan a Upsolver , una empresa en la que trabajé hace unos años.


Hay controladores para otros lenguajes disponibles para Java, Go y Python. Usar Proton con algo como Redpanda ocuparía un espacio mínimo para la transmisión de datos históricos.


Hay muchas otras funciones disponibles, pero esto no pretende ser un tutorial. Quiero hacer una explicación ligera y llamar la atención sobre algunas características. Los documentos son concisos y, en general, están bien escritos, sin duda mejores que muchos proyectos de código abierto.

Resumen

Si bien personalmente no necesito este tipo de acuerdo en este momento, ciertamente he estado en lugares y he visto compañías donde sería muy, muy bueno tenerlo. ¿Tan genial como este chico?

Mongol con leopardo de las nieves


Probablemente no, pero claro, nada lo es :). Dejando a un lado la frivolidad, el equipo de Proton ha hecho un excelente trabajo documentando el proyecto y haciéndolo lo más sencillo posible de instalar y usar. Me encantan estos proyectos de un solo binario que no necesitan un vasto ecosistema Java con toneladas de dependencias. Sin embargo, no se equivoque: Timeplus tiene una versión comercial que le brinda más capacidades que la versión estándar de Proton. Sin embargo, parecen apoyar mucho a Proton y dar la bienvenida a la comunidad.


Consulte mis otros artículos de Qué diablos es... en los enlaces siguientes: