git ssb


0+

noffle / hyperlog-reduce



Branch:

Stephen Whitmore committed 0.0.1Latest: d3afc4a on 1/28/2017, 2:03:11 PM
📄README.md
📄example.js
📄index.js
📄package.json

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 10

API

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:

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-reduce

License

ISC


Built with git-ssb-web