level-queue
queue plugin for leveldb.
Deprecated
Use level-trigger instead.
Stability
Deprecated: Expect no more changes. Avoid using this module.
Example
This module can be used to add job queues to leveldb,
and is especially useful if used with level-hooks
var levelup = require('levelup')
levelup(file, function(err, db) {
require('level-queue')()(db)
db.queue.add('job', function (value, done) {
setTimeout(function () {
console.log(value)
done()
}, Math.random() * 1000)
})
db.queue('job', 'todo - may be any string or buffer')
})
If the process crashes before the job is completed,
it will be restarted when the process restarts.
The job must be idempotent.
Example with hooks
make a twitter like news feed,
where messages are posted to friend's feeds.
var levelup = require('levelup')
var map = require('map-stream')
levelup(file, function(err, db) {
require('level-hooks')()(db)
require('level-queue')()(db)
db.queue.add('job', function (value, done) {
setTimeout(function () {
console.log(value)
done()
}, Math.random() * 1000)
})
db.hooks.pre(function (batch) {
for(var i in batch) {
var row = batch[i]
if(isUserMessage(row.key))
batch.push(db.queue('postToFriends', row.value, false))
}
})
db.queue.add('postToFriends', function (value, done) {
var message = JSON.parse(''+value)
db.readStream({
start: 'friends:'+message.author,
end: 'friends:'+message.author + '~'
})
.pipe(map(function (val, next) {
db.put('feed:'+val+':'
+message.timestamp()+':'
+message.author, value, next)
})
.on('end', done)
})
})
License
MIT