Heim > Backend-Entwicklung > Golang > Warum wir eine Mini-Sprache für einen Golang-Hackathon entwickelt haben

Warum wir eine Mini-Sprache für einen Golang-Hackathon entwickelt haben

Mary-Kate Olsen
Freigeben: 2024-11-30 20:48:22
Original
260 Leute haben es durchsucht

Schon wieder ein Hackathon?

Zu diesem Zeitpunkt war ich bei 9 Hackathons, einer davon war ein internationaler und ich habe sogar 4 davon gewonnen. Andererseits, als meine Junioren Dhruv und Tushar mir von einem Golang-spezifischen Hackathon erzählten, schleppte ich Harsh mit, denn warum nicht? Und nicht nur Harsh, ich habe auch 40 Leute aus unserem Team Point Blank mitgeschleppt, was den Hackathon letztendlich zu unserem eigenen internen Wettbewerb gemacht hat, haha.

Wir alle in unserem Team GoGoingGone (lmao) hatten gute Erfahrungen mit Golang, aber wir wollten mehr als nur ein weiteres Tool entwickeln. Wir wollten innovativ sein. Da kam mir die Idee: Lassen Sie uns eine Minisprache erstellen, um dynamische, konfigurierbare Datenpipelines zu definieren.

Einführung

Ich bin Akash Singh, ein Ingenieurstudent im dritten Jahr und Open-Source-Mitwirkender aus Bangalore.
Hier ist mein LinkedIn, GitHub und Twitter

Why we Built a Mini-Language for a Golang Hackathon

Ich bin online unter dem Namen SkySingh04 bekannt.

Wir stellen vor: Fraktal

Fractal begann als Datenverarbeitungstool für die nahtlose Migration von Legacy-Systemen (wie SQL-Datenbanken und CSV-Dateien) auf moderne Plattformen wie MongoDB oder AWS S3. Aber wir wollten mehr als nur ein weiteres ETL-Tool. Die Idee bestand darin, es sehr flexibel und benutzerfreundlich zu machen und es Benutzern zu ermöglichen, Validierungsregeln und Transformationsregeln mit einer einfachen, deklarativen Syntax – einer Minisprache – zu definieren innerhalb des Tools.

Warum eine Mini-Sprache?

Wir haben festgestellt, dass die meisten Tools im Bereich der Datenpipeline auf starren Konfigurationen oder benutzerdefinierten Skripten basieren. Dieser Ansatz erfordert häufig umfangreiche Programmierkenntnisse, was die Zugänglichkeit für Nicht-Entwickler einschränkt. Eine deklarative Minisprache bietet:

  1. Einfachheit: Benutzer definieren Regeln in einem intuitiven, für Menschen lesbaren Format.
  2. Flexibilität: Es deckt ein breites Spektrum an Anwendungsfällen ab, von einfachen Validierungen bis hin zu komplexen Transformationen.
  3. Skalierbarkeit: Die Minisprache kann sich weiterentwickeln, wenn neue Anforderungen entstehen.

Bei dieser Minisprache ging es nicht darum, das Rad neu zu erfinden – es ging darum, eine Abstraktion bereitzustellen, um Datentransformationen und -validierungen zu optimieren.

Wenn dies mit einer einfachen Yaml-Dateikonfiguration kombiniert wird, dachten wir, wir hätten das Ziel erreicht, eine einfach zu konfigurierende Datenpipeline zu erstellen, die Daten von einer Quelle zur anderen in großem Maßstab verarbeiten kann.

Why we Built a Mini-Language for a Golang Hackathon

Der Kern: Validierungs- und Transformationssyntax

Wir haben die Syntax so gestaltet, dass sie einfach und dennoch ausdrucksstark ist und uns auf zwei Hauptoperationen konzentriert:

  1. Validierungsregeln Diese stellen sicher, dass eingehende Daten vor der Weiterverarbeitung bestimmte Qualitätsstandards erfüllen. Zum Beispiel:
   FIELD("age") TYPE(INT) RANGE(18, 65)
   FIELD("email") MATCHES(EMAIL_REGEX)
   FIELD("status") IN ("active", "inactive")
Nach dem Login kopieren
  1. Transformationsregeln Diese ermöglichen eine Datenanreicherung oder -umstrukturierung. Zum Beispiel:
   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)
Nach dem Login kopieren

Diese Abstraktion ermöglichte es Benutzern, verschiedene Datensätze mit minimalem Aufwand zu verarbeiten, was die Produktivität steigerte und die Komplexität reduzierte.

Während wir gerade darüber nachdachten, wie man den Lexer und Parser dieser Sprache erstellt, nahm uns das Team von GoFr.dev mit nach oben zu einer stressabbauenden Sitzung, die voller nächtlicher Sharayis und Jam-Sessions war!

Fraktale bauen beim Hackathon

Beim Hackathon ging es nicht nur um die Erstellung der Minisprache. Wir mussten auch die umliegende Infrastruktur aufbauen, um sicherzustellen, dass Fractal:

  1. Erweiterbar: Unterstützt mehrere Eingabe-/Ausgabeformate wie JSON, CSV, SQL-Datenbanken und Nachrichtenwarteschlangen.
  2. Konfigurierbar: YAML-basierte Konfiguration zur Definition von Pipeline-Workflows unter nahtloser Integration der Minisprache.
  3. Robust: Behandeln Sie Fehler elegant mit Optionen wie LOG_AND_CONTINUE oder STOP.

Wir haben die Arbeit in vier Module unterteilt:

  • Mini-Language-Implementierung: Entwerfen des Lexers und Parsers zur Interpretation der benutzerdefinierten Syntax.
  • Datenintegrationen: Unterstützung für gängige Datenquellen und -ziele hinzugefügt.
  • Pipeline Engine: Orchestrierung der Validierung, Transformation und Fehlerbehandlung.
  • CLI-Schnittstelle: Bereitstellung einer einfachen Schnittstelle zum Definieren und Ausführen von Pipelines.

Herausforderungen, denen wir gegenüberstanden

  1. Entwerfen der Syntax Es war eine Herausforderung, ein Gleichgewicht zwischen Einfachheit und Flexibilität zu finden. Wir haben mehrere Iterationen durchgeführt, um die Syntax zu finalisieren.
  2. Erstellen des Parsers Die Implementierung eines benutzerdefinierten Lexers und Parsers in Golang war zeitaufwändig, aber lohnend.
  3. Echtzeit-Feedback Für die Benutzerfreundlichkeit war es von entscheidender Bedeutung, sicherzustellen, dass die Minisprache aussagekräftige Fehlermeldungen zur Orientierung der Benutzer bereitstellt.
  4. Zeitliche Einschränkungen Der Aufbau eines Tools dieser Größenordnung im Rahmen eines Hackathons erforderte präzise Planung und nahtlose Koordination.

Und was geschah danach?

Trotz unserer starken Leistung beim GO for GOFR-Hackathon standen wir bei der Abschlussbewertung vor einer entscheidenden Herausforderung. Die Jury verlangte zusätzlich zu unserer aufgezeichneten Demo eine Live-Demonstration, und leider stießen wir während des Live-Laufs auf einen unerwarteten Fehler in unserer Parser-Logik. Angesichts der Komplexität, einen robusten benutzerdefinierten Parser innerhalb von nur 24 Stunden zu erstellen, war die Entwicklung dieser Funktion eine ehrgeizige Aufgabe, und während unsere aufgezeichnete Demo seine Funktionalität demonstrierte, erwies es sich als schwierig, unter Zeitdruck eine 100-prozentige Genauigkeit zu erreichen. Dieser Schluckauf hat uns letztendlich den Hauptpreis gekostet. Unsere Bemühungen wurden jedoch weiterhin hoch geschätzt und die klare Vision und die überzeugende Leistung unseres Teams brachten uns die Auszeichnung „Bester Pitch“ ein, was unser Potenzial und unseren Einfallsreichtum hervorhebt.

Also Hackathons, oder?

Bei Hackathons geht es oft darum, Grenzen zu überschreiten und Neuland zu erkunden. Fractal war unser Versuch, die Funktionsweise von Datenverarbeitungstools neu zu definieren – indem wir sie zugänglich, modular und entwicklerfreundlich machten.

Ich hätte mir keine gleichgesinntere Gruppe von Leuten wünschen können, die mit mir an dieser Aufgabe zusammenarbeiten würden, ohne den geringsten Zweifel die absolut besten und fleißigsten Teamkollegen. Ich freue mich darauf, was mich zu meinem nächsten Hackathon führt, darf ich sagen: Ein RUST-basierter Hackathon? xD

Schauen Sie sich Fractal auf GitHub an

Why we Built a Mini-Language for a Golang Hackathon SkySingh04 / Fraktal

Ein flexibles, konfigurierbares Datenverarbeitungstool

Fraktal

Fractal ist ein flexibles, konfigurierbares Datenverarbeitungstool, das mit GoFr und Golang erstellt wurde. Fractal ist darauf ausgelegt, die Datenaufnahme aus mehreren Quellen zu verarbeiten, leistungsstarke Transformationen und Validierungen anzuwenden und die Ausgabe an eine Vielzahl von Zielen zu liefern. Mit Fractal können Sie komplexe Datenworkflows automatisieren, ohne sich um die Verwaltung untergeordneter Details kümmern zu müssen Hier ist die Dokumentation zum Einrichten einer neuen Integration in Ihrem Projekt:

Benutzerdefinierte Syntaxdokumentation für Validierungs- und Transformationsregeln

1. Übersicht

Die benutzerdefinierte Syntax ermöglicht Benutzern Folgendes:

  1. Validieren Sie eingehende Daten, um sicherzustellen, dass sie vordefinierte Bedingungen erfüllen.
  2. Transformieren Sie Datenfelder, um sie an die gewünschten Formate, Strukturen oder Anforderungen anzupassen.
  3. Definieren Sie flexible Fehlerbehandlungsstrategien für Datenverarbeitungspipelines.

Regeln können für jede Datenquelle oder jedes Datenziel geschrieben werden, z. B. JSON, YAML, CSV, SQL-Datenbanken, Message Brokers oder Cloud Dienstleistungen.


2. Validierungsregeln

Validierungsregeln stellen sicher, dass Daten bestimmte Qualitäts- und Integritätsanforderungen erfüllen.

Auf GitHub ansehen



Pitch Deck: Drive Link

Oder probieren Sie es selbst aus und teilen Sie uns Ihre Meinung mit!

Why we Built a Mini-Language for a Golang Hackathon

Das obige ist der detaillierte Inhalt vonWarum wir eine Mini-Sprache für einen Golang-Hackathon entwickelt haben. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage