1 Punkte von GN⁺ 2023-11-06 | 1 Kommentare | Auf WhatsApp teilen
  • Ein Artikel über den Aufbau eines leistungsstarken JSON-Parsers in der Programmiersprache Go
  • Ein Projekt mit dem Ziel, Streaming-Workloads zu unterstützen, Kompatibilität mit dem Paket encoding/json zu bieten und APIs ohne oder mit nur wenigen Allokationen bereitzustellen
  • Ein Artikel, der die Zeitkomplexität des JSON-Parsings erklärt und betont, dass die Untergrenze der zur Verarbeitung der Eingabe benötigten Zeit in der Größe der Eingabe liegt
  • Ein Artikel über den Tokenisierungsprozess, bei dem ein Bytestrom in einen JSON-Tokenstrom umgewandelt wird
  • Ein Artikel, der den Prozess des Lesens von Daten aus einer JSON-Datei erklärt und die Schwierigkeiten bei der Verwendung von io.Reader hervorhebt
  • Der Autor stellt das Konzept eines byteReader vor, das ähnlich wie bufio.Reader arbeitet, aber eine effizientere API bietet
  • Ein Artikel über den Scan-Prozess, bei dem identifiziert wird, welche Zeichen Token sind und welche lediglich Leerraum darstellen
  • Der Autor erklärt, wie sich die Leistung des Scanners verbessern lässt, indem Funktionsaufrufe auf dem Hot Path vermieden werden
  • Ein Artikel über den Dekodierungsprozess, bei dem geprüft wird, ob eine Token-Sequenz gültig ist
  • Der Autor schlägt vor, dass sich die Leistung des Decoders verbessern lässt, indem ein berechnetes Goto verwendet wird, das Methoden direkt speichert und direkt aufruft

1 Kommentare

 
GN⁺ 2023-11-06
Hacker-News-Kommentar
  • Ein Artikel, der einen detaillierten Leitfaden zum Aufbau eines Hochleistungs-JSON-Parsers bietet
  • Der Autor schlägt vor, dass für JSON keine explizite Tokenisierung erforderlich ist und dass Parsing und Tokenisierung zusammengeführt werden können
  • Für bessere Leistung empfiehlt der Autor, Heap-Allokationen bei Tokenisierung und Parsing zu vermeiden
  • Die Wahl der JSON-Bibliothek kann einen großen Einfluss auf die Leistung haben, mit Unterschieden von bis zu 3-10x
  • Wenn die Klassen, die serialisiert oder deserialisiert werden sollen, zur Compile-Zeit bekannt sind, funktioniert Jackson Java gut, aber der Artikel legt nahe, dass sorgfältiges Coding und Profiling die Leistung verdoppeln können
  • Für Hochleistungs-Produktionsumgebungen empfiehlt der Autor, sich die Arbeit von Daniel Lemire oder deren Portierung nach Go durch MinIO anzusehen
  • Der Autor verweist außerdem auf die JSON-Benchmark-Seite von RapidJSON
  • Es wird eine Lösung für das Problem der "Müllfabrik" bei der Tokenisierung diskutiert, die darin besteht, eine Funktion von byteslice zu T statt von String zu verwenden
  • Der Autor erwähnt einen ähnlichen Ansatz, der zum Aufbau eines allokationsfreien und sehr schnellen GraphQL-Tokenizers und -Parsers verwendet wurde
  • Der Autor diskutiert außerdem die Technik des computed goto als platzsparendere Methode
  • Der Autor schlägt vor, die Standardbibliothek mit besserem API-Design zu verbessern, hält aber einen vollständig streamenden Parser, der Strukturen halb füllt, bevor Fehler gefunden werden, für unrealistisch
  • Der Autor stimmt nicht mit der Vorstellung überein, dass es für die meisten Anwendungen unrealistisch sei, die gesamte Eingabe im Speicher zu haben
  • Der Artikel bedankt sich bei Phil Pearl und empfiehlt, sich die Sonic-Bibliothek auf GitHub anzusehen