Diese Bibliothek ist ein Framework für die Stream-Verarbeitungsanalyse. Es soll als Bibliothek für Go-Programme verwendet werden, die die Stream-Verarbeitung großer Datenmengen durchführen müssen.
Es besteht aus einem Diagramm, das eine Quelle mit einem oder mehreren Operatoren verbindet und an einer Senke endet. Mit Go-Kanälen leiten Betreiber Daten von einem zum anderen weiter. Ein Beispieldiagramm zum Codieren von Objekten in Snappy ist:
var from *util.MemoryBuffer
// fill up from
var to *util.MemoryBuffer
ch := stream.NewOrderedChain()
ch.Add(source.NewNextReaderSource(from))
timingOp, _, dur := timing.NewTimingOp()
ch.Add(timingOp)
ch.Add(compress.NewSnappyEncodeOp())
ch.Add(sink.NewWriterSink(to))
ch.Start()
log.Printf("RES: Compress Snappy.ttRatio %v", float64(to.ByteSize())/float64(from.ByteSize()))
log.Printf("RES: Compress Snappy.ttBuffered Items: %dtItem: %vttook: %vtrate: %dtsize: %Etsize/item: %E", to.Len(), *counter, *dur, int( float64(*counter)/(*dur).Seconds()), float64(to.ByteSize()), float64(to.ByteSize())/float64(*counter))
Operatoren sind die Hauptbestandteile einer Kette. Sie verarbeiten Tupel, um Ergebnisse zu erzielen. Quellen sind Operatoren ohne Ausgabe. Senken sind Operatoren ohne Eingabe. Operatoren implementieren stream.Operator. Wenn eine Eingabe erforderlich ist, wird stream.In implementiert; Wenn es eine Ausgabe erzeugt, wird stream.Out implementiert.
Mapper bieten eine einfache Möglichkeit, Operatoren zu implementieren. mapper.NewOp() übernimmt eine Funktion der Form func(input stream.Object, out Outputer), die die Eingabe verarbeitet und an das Outputer-Objekt ausgibt. Mapper werden automatisch parallelisiert. Generatoren bieten eine Möglichkeit, Mappern durch Schließungen Thread-lokalen Speicher zu geben. Sie können Mappern auch spezielle Funktionen zuweisen, nachdem sie die Verarbeitung des letzten Tupels abgeschlossen haben.
Sie können die Daten einer Kette auch in andere Ketten aufteilen. stream.Fanout nimmt Eingaben entgegen und kopiert sie in N andere Ketten. Der Verteiler nimmt Eingaben entgegen und ordnet sie gemäß einer Zuordnungsfunktion einer von N Ketten zu.
Ketten können bestellt oder ungeordnet sein. Geordnete Ketten bewahren die Reihenfolge der Tupel von der Eingabe bis zur Ausgabe (obwohl die Operatoren immer noch Parallelität verwenden).
Kompilieren: Los bauen
Testen: Machen Sie einen Test