Эта библиотека представляет собой основу для анализа обработки потоков. Он предназначен для использования в качестве библиотеки для программ Go, которым необходимо выполнять потоковую обработку больших объемов данных.
Он состоит из графа, соединяющего источник с одним или несколькими операторами и заканчивающегося приемником. Операторы передают данные друг другу по каналам go. Пример графа для кодирования объектов в 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))
Операторы являются основными компонентами цепочки. Они обрабатывают кортежи для получения результатов. Источники — это операторы без вывода. Приемники — это операторы без ввода. Операторы реализуют поток.Оператор. Если требуется ввод, реализуется поток.In; если он производит вывод, реализует поток.Out.
Картографы предоставляют простой способ реализации операторов. Mapper.NewOp() принимает функцию формы func(inputstream.Object, out Outputer), которая обрабатывает входные данные и выводит их в объект Outputer. Картографы автоматически распараллеливаются. Генераторы дают возможность предоставить мапперам локальное хранилище потоков посредством замыканий. Вы также можете предоставить картографам специальные функции после того, как они завершат обработку последнего кортежа.
Вы также можете разделить данные цепочки на другие цепочки. поток.Fanout принимает входные данные и копирует их в N других цепочек. Дистрибьютор принимает входные данные и помещает их в 1 из N цепей в соответствии с функцией отображения.
Цепочки могут быть упорядоченными и неупорядоченными. Упорядоченные цепочки сохраняют порядок кортежей от входа до выхода (хотя операторы по-прежнему используют параллелизм).
Компиляция: идем строить
Тестирование: иди тестируй