Files: 008629bad0826f698889a686293256b806ad2db9 / README.md
flumeview-reduce
A flumeview into a reduce function. Stream append-only log data into a reduce function to calculate a state.
Example
var FlumeLog = require('flumelog-offset')
var codec = require('flumecodec')
var Flume = require('flumedb')
var Reduce = require('flumeview-reduce')
//statistics exports a reduce function that calculates
//mean, stdev, etc!
var statistics = require('statistics')
//initialize a flumelog with a codec.
//this example uses flumelog-offset, but any flumelog is valid.
var log = FlumeLog(file, 1024*16, codec.json) //use any flume log
//attach the reduce function.
var db = Flume(log).use('stats',
Reduce(1, statistics, function (data) {
return data.value
})
db.append({value: 1}, function (err) {
db.stats.get(function (err, stats) {
console.log(stats) // => {mean: 1, stdev: 0, count: 1, sum: 1, ...}
})
})
FlumeViewReduce(version, reduce, map?) => FlumeView
construct a flumeview from this reduce function. version
should be a number,
and must be provided. If you make a breaking change to either reduce
or map
then increment version
and the view will be rebuilt.
map
is optional. If map is applied, then each item in the log is passed to map
and then if the returned value is not null, it is passed to reduce.
var _data = map(data)
if(_data != null)
state = reduce(state, map(data))
using a map
function is useful, because it enables efficiently streaming the realtime
changes in the state to a remote client.
then, pass the flumeview to db.use(name, flumeview)
and you'll have access to the flumeview methods on db[name]...
db[name].get(cb)
get the current state of the reduce. This will wait until the view is up to date, if necessary.
db[name].stream({live: boolean}) => PullSource
Stream the changing reduce state. for this to work, a map function must be provided.
If so, the same reduce function can be used to process the output.
License
MIT
Built with git-ssb-web