0.0.1 • Published 9 years ago
hyperlog-reduce v0.0.1
hyperlog-reduce
Implement an async reduce function over a hyperlog.
This was inspired by @dominictarr's flumedb and clean approach to materialized views. This module implements something akin to a flumeview-reduce over a hyperlog.
Usage
Create a sum reduce function over a hyperlog of numbers:
var reduce = require('hyperlog-reduce')
var memdb = require('memdb')
var hyperlog = require('hyperlog')
var log = hyperlog(memdb(), {valueEncoding: 'json'})
var sum = reduce({
db: memdb(),
log: log,
// create the materialized view default value
init: function () {
return 0
},
// runs on each node in the hyperlog
reduce: function (node, sum, next) {
sum += node.value.amount
next(null, sum)
}
})
log.append({amount: 3}, function () {
log.append({amount: 6}, function () {
log.append({amount: 1}, function () {
})
})
})
// blocks until the index is caught up
sum.get(function (err, value) {
console.log('sum is', value)
})This will output
sum is 10API
var reduce = require('hyperlog-reduce')var reducer = reduce(opts)
Create an async reducer over a hyperlog. opts is required and must have the
following key/values:
db: a levelup instance that the reducer's index will be stored inlog: a hyperlog instanceinit: a function that returns the initial value of the reducerreduce: a function of the formfunction (node, accum, next), wherenodeis a hyperlog node,accumis the current value of the reduce function, andnextis a function to be called when the reduce function has completed. It expects arguments of the formnext(err, newAccumValue).
reducer.get(done)
Asynchronously retrieves the current value of the reduce function. If nodes are
still being processed, done isn't called until the index catches up.
done is a callback of the form function (err, value) { ... }.
Install
With npm installed, run
$ npm install hyperlog-reduceLicense
ISC
0.0.1
9 years ago