Maison > développement back-end > Golang > Pourquoi nous avons créé un mini-langage pour un hackathon Golang

Pourquoi nous avons créé un mini-langage pour un hackathon Golang

Mary-Kate Olsen
Libérer: 2024-11-30 20:48:22
original
248 Les gens l'ont consulté

Encore un hackathon ?

À ce stade, j'ai participé à 9 hackathons, l'un d'eux étant international, gagnant même à 4 d'entre eux. Là encore, lorsque mes juniors Dhruv et Tushar m'ont parlé d'un hackathon spécifique à Golang, j'ai entraîné Harsh avec nous parce que pourquoi pas. Et pas seulement Harsh, j'ai entraîné 40 personnes de notre équipe Point Blank, ce qui a fini par faire du hackathon notre propre compétition interne haha.

Nous tous dans notre équipe GoGoingGone (lmao) avons eu une bonne expérience de travail avec Golang, mais nous voulions faire plus que simplement créer un autre outil. Nous voulions innover. C'est à ce moment-là que l'idée est venue : créons un mini-langage pour définir des pipelines de données dynamiques et configurables.

Introduction

Je m'appelle Akash Singh, étudiant en troisième année d'ingénierie et contributeur Open Source de Bangalore.
Voici mon LinkedIn, GitHub et Twitter

Why we Built a Mini-Language for a Golang Hackathon

Je m'appelle SkySingh04 en ligne.

Présentation de Fractale

Fractal a commencé comme un outil de traitement de données permettant une migration transparente des systèmes existants (comme les bases de données SQL et les fichiers CSV) vers des plates-formes modernes telles que MongoDB ou AWS S3. Mais nous voulions plus qu’un simple outil ETL. L'idée était de le rendre très flexible et convivial, permettant aux utilisateurs de définir des validation et des règles de transformation avec une syntaxe simple et déclarative : un mini-langage dans l'outil.

Pourquoi un mini-langage ?

Nous avons observé que la plupart des outils dans le domaine des pipelines de données reposent sur des configurations rigides ou des scripts personnalisés. Cette approche nécessite souvent une expertise importante en programmation, ce qui limite l'accessibilité pour les non-développeurs. Un mini-langage déclaratif fournit :

  1. Simplicité : les utilisateurs définissent les règles dans un format intuitif et lisible par l'homme.
  2. Flexibilité : Il s'adapte à un large éventail de cas d'utilisation, des validations de base aux transformations complexes.
  3. Évolutivité : Le mini-langage peut évoluer en fonction de nouveaux besoins.

Ce mini-langage ne visait pas à réinventer la roue, mais à fournir une abstraction pour rationaliser les transformations et les validations des données.

Lorsque cela est combiné avec une simple configuration de fichier yaml, nous avons pensé avoir atteint le but de créer un pipeline de données facile à configurer, capable de traiter les données d'une source à une autre à grande échelle.

Why we Built a Mini-Language for a Golang Hackathon

Le noyau : syntaxe de validation et de transformation

Nous avons conçu la syntaxe pour qu'elle soit simple mais expressive, en nous concentrant sur deux opérations principales :

  1. Règles de validation Ceux-ci garantissent que les données entrantes répondent à des normes de qualité spécifiques avant leur traitement ultérieur. Par exemple:
   FIELD("age") TYPE(INT) RANGE(18, 65)
   FIELD("email") MATCHES(EMAIL_REGEX)
   FIELD("status") IN ("active", "inactive")
Copier après la connexion
  1. Règles de transformation Ceux-ci permettent un enrichissement ou une restructuration des données. Par exemple:
   RENAME("old_field", "new_field")
   MAP("status", {"0": "inactive", "1": "active"})
   ADD_FIELD("processed_at", CURRENT_TIME())
   IF FIELD("age") > 50 THEN ADD_FIELD("senior_discount", TRUE)
Copier après la connexion

Cette abstraction a permis aux utilisateurs de traiter divers ensembles de données avec un minimum d'effort, améliorant ainsi la productivité et réduisant la complexité.

En train de déterminer comment créer le lexer et l'analyseur de ce langage, l'équipe de GoFr.dev nous a tous emmenés à l'étage pour une séance de lutte contre le stress, pleine de sharayis et de jam sessions de fin de soirée !

Construire Fractal au Hackathon

Le hackathon ne consistait pas seulement à créer le mini-langage. Nous avons également dû construire l'infrastructure environnante, en veillant à ce que Fractal soit :

  1. Extensible : prise en charge de plusieurs formats d'entrée/sortie tels que JSON, CSV, bases de données SQL et files d'attente de messages.
  2. Configurable : configuration basée sur YAML pour définir des workflows de pipeline, intégrant le mini-langage de manière transparente.
  3. Robuste : Gérez les erreurs avec élégance avec des options telles que LOG_AND_CONTINUE ou STOP.

Nous avons divisé le travail en quatre modules :

  • Implémentation d'un mini-langage : Conception du lexer et de l'analyseur pour interpréter la syntaxe personnalisée.
  • Intégrations de données : ajout de la prise en charge des sources et destinations de données communes.
  • Pipeline Engine : orchestration de la validation, de la transformation et de la gestion des erreurs.
  • Interface CLI : fournit une interface simple pour définir et exécuter des pipelines.

Les défis auxquels nous avons été confrontés

  1. Concevoir la syntaxe Trouver un équilibre entre simplicité et flexibilité était un défi. Nous avons itéré plusieurs fois pour finaliser la syntaxe.
  2. Construire l'analyseur La mise en œuvre d'un lexer et d'un analyseur personnalisés dans Golang prenait du temps mais était gratifiante.
  3. Commentaires en temps réel S'assurer que le mini-langage fournisse des messages d'erreur significatifs pour guider les utilisateurs était essentiel pour la convivialité.
  4. Contraintes de temps Construire un outil de cette envergure dans le cadre d’un hackathon nécessitait une planification précise et une coordination transparente.

Et que s’est-il passé après ça ?

Malgré notre solide performance au hackathon GO for GOFR, nous avons été confrontés à un défi critique lors de l'évaluation finale. Les juges ont demandé une démonstration en direct en plus de notre démo enregistrée, et malheureusement, nous avons rencontré un bug inattendu dans la logique de notre analyseur pendant l'exécution en direct. Compte tenu de la complexité de la création d'un analyseur personnalisé robuste en seulement 24 heures, il s'agissait d'une fonctionnalité ambitieuse à développer, et même si notre démo enregistrée a présenté ses fonctionnalités, atteindre une précision de 100 % dans des contraintes de temps s'est avéré difficile. Ce contretemps nous a finalement coûté le premier prix. Cependant, nos efforts étaient toujours très appréciés, et la vision claire et la prestation convaincante de notre équipe nous ont valu l'honneur du « Meilleur pitch », soulignant notre potentiel et notre ingéniosité.

Alors les Hackathons, hein ?

Les hackathons consistent souvent à repousser les limites et à explorer des territoires inexplorés. Fractal était notre tentative de redéfinir le fonctionnement des outils de traitement de données, en les rendant accessibles, modulaires et conviviaux pour les développeurs.

Je n'aurais pas pu demander à un groupe de personnes partageant les mêmes idées de travailler avec moi sur ce projet, des coéquipiers absolument meilleurs et travailleurs, sans l'ombre d'un doute. Dans l'attente de ce qui m'amène à mon prochain hackathon, oserais-je dire, un hackathon basé sur RUST ? xD

Découvrez Fractal sur GitHub

Why we Built a Mini-Language for a Golang Hackathon CielSingh04 / fractale

Un outil de traitement de données flexible et paramétrable

Fractale

Fractal est un outil de traitement de données flexible et configurable construit avec GoFr et Golang. Fractal est conçu pour gérer l'ingestion de données provenant de plusieurs sources, appliquer des transformations et des validations puissantes et fournir des résultats vers un large éventail de destinations. Avec Fractal, vous pouvez automatiser des flux de données complexes sans avoir à gérer des détails de bas niveau Voici la documentation pour mettre en place une nouvelle intégration dans votre projet :

Documentation de syntaxe personnalisée pour les règles de validation et de transformation

1. Aperçu

La syntaxe personnalisée permet aux utilisateurs de :

  1. Validez les données entrantes pour vous assurer qu'elles répondent aux conditions prédéfinies.
  2. Transformez les champs de données pour les adapter aux formats, structures ou exigences souhaités.
  3. Définissez des stratégies flexibles de gestion des erreurs pour les pipelines de traitement de données.

Les règles peuvent être écrites pour n'importe quelle source ou destination de données, telles que JSON, YAML, CSV, Bases de données SQL, Courtiers de messages, ou Cloud Prestations.


2. Règles de validation

Les règles de validation garantissent que les données répondent à des exigences spécifiques en matière de qualité et d'intégrité.

Voir sur GitHub



Pitch Deck : Lien vers le lecteur

Ou essayez-le vous-même et dites-nous ce que vous en pensez !

Why we Built a Mini-Language for a Golang Hackathon

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

source:dev.to
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal