Ein 40MB-Parquet-Würfel ersetzt Datenbank und Query-Engine für Drilldown-Dashboards
Fast drilldown dashboards from a single Parquet file

Hamilton Ulmer zeigt, wie man mit einem einzigen 40MB großen Parquet-Datenwürfel, einem 18KB großen JavaScript-Reader und Range-Requests an R2 ein schnelles Drilldown-Dashboard für Kundendaten baut – ganz ohne Datenbank oder Query-Engine. Der Trick liegt in der geschickten Anordnung der Daten im File und der Nutzung von Metadaten, sodass der Browser nur winzige Ausschnitte lädt. Am Beispiel des NYC-311-Datensatzes demonstriert er, wie Latenzen von unter einer Sekunde möglich sind und wie die Komplexität in die Datenpipeline verlagert wird.
In der Analytik, wenn man nur Objektspeicher hat, sieht alles wie ein Range-Request aus.
- simonw
> Die Bytes passieren auf dem Weg einen kleinen Cloudflare Worker, weil die kostenlose r2.dev-URL ratenbegrenzt ist.
Für eine 40MB-Datei schlage ich vor, sie direkt auf GitHub Pages zu hosten – das ist praktisch ein kostenloses CDN mit CORS-Unterstützung und unterstützt HTTP-Range-Anfragen, sodass du die Demo zum Laufen bekommen solltest, ohne Cloudflare Workers überhaupt einbinden zu müssen.
- wyck
Oberflächlich betrachtet (ich habe es nicht getestet) sieht es nach einem großen Kosten- und Laufzeit-Sparer aus, aber nur für Datensätze, die eine Aktualisierungsrate von etwa 5 Minuten oder mehr benötigen. Du könntest keinen Aktualisierungs-Button haben, um die "neuesten" Daten außerhalb dieses Fensters zu erhalten, abhängig von Größe und Build-Zeit? Ich frage mich, ob man einen hybriden Ansatz anwenden kann, der die historische Parquet-Datei mit einer Live-Abfrage kombiniert.
- mrbluecoat
Eine clevere Zweckentfremdung von Technologien, aber realistisch gesehen nur für statische Datensätze mit Bereichs-Payloads sinnvoll, die klein genug sind, um in eine Web-Antwort zu passen.
> Ihre Pipeline muss die Datei jedes Kunden schnell genug neu erstellen, um die Aktualisierungsrate einzuhalten. ... Daten, die nach einem groben Zeitplan und nicht in Echtzeit aktualisiert werden.