git ssb

0+

Dominic / flumeview-query



Tree:
📄.travis.yml
📄LICENSE
📄README.md
📄index.js
📄package.json
📄query.js
📄select.js
📁test
📄util.js
README.md

streamview-links

A streamview index for links.

Motivation

This particular module was because I needed to index links in secure-scuttlebutt
It also builds in

Example

var StreamviewLinks = require('streamview-links')
//directory where you want this index stored
var dirname = path.join(dbPath, 'links')

//a function that extracts links from an document.
//
function links (doc, emit) {
  //call emit for every link in the document.
  //`ts` is the sequence number of this document.
  // you could use other field names, but these are the names I used.
  emit({source: s, dest: d, rel: r, ts: ts})
}

//indexes to create. you could create more or less indexes than this.
//up to you.
var indexes = {
  'sdr': ['source', 'dest', 'rel', 'ts'],
  'rds': ['rel', 'dest', 'source', 'ts'],
  'drs': ['dest', 'rel', 'source', 'ts'],
}
//change the version number, and the view will rebuild on start up.
var version = 1
var svl = StreamviewLinks(dirname, indexes, links, version)

streamview-links is now setup. to connect to a database via it's log

svl.init(function (err, since) {
  pull(db.createLogStream({gt: since, live: true}), svl.write())
})

now you can query the database.

var pull = require('pull-stream')
//read 
pull(
  svl.read({
    query: [
      {$filter: {source: s, dest: d}},
      {$reduce: {$count: true}}
    ]
  }),
  pull.collect(cb)
)

queries

This module uses map-filter-reduce queries, if the filter stage uses fields that are in a index, then streamview-links
can choose the best index and perform many queries very quickly.

see map-filter-reduce for documentation of the syntax, and ssb-links for example queries, performed on top of secure-scuttlebutt

License

MIT

Built with git-ssb-web