queue plugin for leveldb.
Use level-trigger instead.
Deprecated: Expect no more changes. Avoid using this module.
This module can be used to add job queues to leveldb, and is especially useful if used with level-hooks
varlevelup=require('levelup')levelup(file,function(err,db){//adds .queue to db.require('level-queue')()(db)//add a worker, for a given job name.db.queue.add('job',function(value,done){setTimeout(function(){console.log(value)//call done() to delete this job from the database.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.
make a twitter like news feed, where messages are posted to friend's feeds.
varlevelup=require('levelup')varmap=require('map-stream')levelup(file,function(err,db){//adds .queue to db.require('level-hooks')()(db)require('level-queue')()(db)//add a worker, for a given job name.db.queue.add('job',function(value,done){setTimeout(function(){console.log(value)//call done() to delete this job from the database.done()},Math.random()*1000)})/** calling db.queue(name, value, false) will not PUT the queue into the database, but will instead return the insert so that it can be included into an atomic batch operation. **/db.hooks.pre(function(batch){//if any of the inserts is a user for(variinbatch){varrow=batch[i]if(isUserMessage(row.key))batch.push(db.queue('postToFriends',row.value,false))}})db.queue.add('postToFriends',function(value,done){varmessage=JSON.parse(''+value)//retrive all friends of a poster.db.readStream({start: 'friends:'+message.author,end: 'friends:'+message.author+'~'})//attach the message to all follower's feeds..pipe(map(function(val,next){db.put('feed:'+val+':'+message.timestamp()+':'+message.author,value,next)//note: since we take the timestamp from the message,//if the job accidentially gets run twice,//it will just overwrite the same message.//the job is idempotent!})//mark the job DONE!.on('end',done)})})MIT