GitHub - Level/read-stream: Read from an abstract-level database using Node.js streams. (original) (raw)
level-read-stream
Read from an abstract-level database using Node.js streams.
📌 To instead consume data using Web Streams, see level-web-stream.
Usage
If you are migrating from levelup
or level <= 7
: please see UPGRADING.md.
const { EntryStream } = require('level-read-stream') const { Writable, pipeline } = require('readable-stream')
await db.put('a', '1') await db.put('b', '2') await db.put('c', '3')
const src = new EntryStream(db, { gte: 'b' })
const dst = new Writable({ write (entry, _, next) { console.log('%s: %s', entry.key, entry.value) next() } })
pipeline(src, dst)
Yields:
To only read keys or values rather than entries:
const { KeyStream, ValueStream } = require('level-read-stream')
pipeline(new KeyStream(db), new Writable({ write (key, _, next) { console.log(key) next() } }))
Install
With npm do:
npm install level-read-stream
Usage from TypeScript also requires npm install @types/readable-stream
.
API
stream = new EntryStream(db[, options])
Create a readable stream that will yield entries. An entry is an object with key
and value
properties. The db
argument must be an abstract-level
database. The optional options
object may contain:
highWaterMark
(number): the maximum number of entries to buffer internally before ceasing to read further entries. Default 1000.
Any other options are forwarded to db.iterator(options)
. The stream wraps that iterator. If you prefer to consume entries with for await...of
then it's recommended to directly use db.iterator()
. In either case, most databases will read from a snapshot (thus unaffected by simultaneous writes) as indicated by db.supports.snapshots
.
Upon stream end or having called stream.destroy()
the underlying iterator will be closed after which a close
event is emitted on the stream.
stream = new KeyStream(db[, options])
Same as EntryStream
but yields keys instead of entries, using db.keys()
instead of db.iterator()
. If only keys are needed, using KeyStream
may increase performance because values won't have to be fetched.
stream = new ValueStream(db[, options])
Same as EntryStream
but yields values instead of entries, using db.values()
instead of db.iterator()
. If only values are needed, using ValueStream
may increase performance because keys won't have to be fetched.
stream
An instance of EntryStream
, KeyStream
or ValueStream
has the following special properties.
stream.db
A read-only reference to the database that this stream is reading from.
Contributing
Level/read-stream is an OPEN Open Source Project. This means that:
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
See the Contribution Guide for more details.
Donate
Support us with a monthly donation on Open Collective and help us continue our work.