Esta biblioteca é uma estrutura para análise de processamento de fluxo. Ele deve ser usado como uma biblioteca para programas go que precisam fazer processamento de fluxo de grandes volumes de dados.
É composto por um grafo conectando uma fonte a 1 ou mais operadores, terminando em um sink. As operadoras passam dados de uma para outra com canais go. Um exemplo de gráfico para codificar objetos para snappy é:
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))
Os operadores são os principais componentes de uma cadeia. Eles processam tuplas para produzir resultados. Fontes são operadores sem saída. Os coletores são operadores sem entrada. Os operadores implementam stream.Operator. Se for necessária entrada, implementa stream.In; se produzir saída, implementa stream.Out.
Os mapeadores oferecem uma maneira simples de implementar operadores. mapper.NewOp() assume uma função no formato func(input stream.Object, out Outputer) que processa a entrada e a envia para o objeto Outputer. Os mapeadores são automaticamente paralelizados. Os geradores fornecem uma maneira de fornecer armazenamento local de thread aos mapeadores por meio de fechamentos. Você também pode fornecer funcionalidades especiais aos mapeadores depois que eles terminarem de processar a última tupla.
Você também pode dividir os dados de uma cadeia em outras cadeias. stream.Fanout recebe a entrada e a copia para N outras cadeias. O Distribuidor recebe a entrada e a coloca em 1 de N cadeias de acordo com uma função de mapeamento.
As correntes podem ser ordenadas ou não. Cadeias ordenadas preservam a ordem das tuplas da entrada à saída (embora os operadores ainda usem paralelismo).
Compilando: vá construir
Teste: vá testar