Awesome
SSB partial replication
A collection of functions useful for replicating a part of the log instead of everything. This is superseeded by SSB secure partial replication.
api
getFeed({id: feedId, seq: int?, live: bool?, limit: int?, keys: bool?, values: bool?}) -> PullSource
The method has exactly the same interface as createHistoryStream
because it just wraps the function. It is much faster though. See
appendix for more information.
getFeedReverse({id: feedId, seq: int?, live: bool?, limit: int?, keys: bool?, values: bool?}) -> PullSource
This function does the same as getFeed
except if one does
not specify seq
the latest sequence for the feed with be fetched and
used. This allows one to get the latest X messages from a feed using
the limit
option without knowing how many messages the feed
currently has.
getTangle(msgId, cb)
Get all the messages of a tangle given a root message id. This can be used to fetch threads or similar tangles. This is similar in spirit to ssb-ooo except there is no protocol involved to fetch messages from other nodes.
getMessagesOfType({id: feedId, type: string, seq: int?, limit: int?}) -> PullSource
Get messages of a particular type for a feed. This can be used to fetch say all contact messages for a particular feed to construct the social graph without having to download all the messages of the feed.
Appendix
There is something wrong with createHistoryStream over a network connection. Locally it takes around 600ms, using net protocol the same call takes 6.500ms and using ws the exact same call takes 20.000ms?
var pull = require('pull-stream')
var remote = 'ws:between-two-worlds.dk:8989~shs:lbocEWqF2Fg6WMYLgmfYvqJlMfL7hiqVAV6ANjHWNw8=.ed25519'
//remote = 'net:between-two-worlds.dk:8008~shs:lbocEWqF2Fg6WMYLgmfYvqJlMfL7hiqVAV6ANjHWNw8=.ed25519'
require('ssb-client')({ remote }, (err, sbot) => {
if (err) throw err
console.time("downloading messages")
pull(
sbot.createHistoryStream({id: '@ye+QM09iPcDJD6YvQYjoQc7sLF/IFhmNbEqgdzQo3lQ=.ed25519', seq: 27000, keys: false}),
pull.drain((msg) => {
console.log(msg)
}, (err) => {
if (err) throw err
console.timeEnd("downloading messages")
sbot.close()
})
)
})
The problem seems to be buried in the legacy protocol for ssb-replication somewhere.
This module simply exposes
createHistoryStream
as partialReplication
without any of the legacy overhead and we are
back to 600ms again.