Skip to content

lcneves/mongodb-leaky-bucket

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

mongodb-leaky-bucket

A leaky bucket queue/deque backed by MongoDB.

Uses

May be used to throttle queries to expensive resources such as email or file servers.

The same queue can be accessed by multiple NodeJS servers connected to a database, provided that the same instance options are passed and that their clocks are synchronized.

Installation

$ npm install mongodb-leaky-bucket --save

Usage

const LeakyBucket = require('mongodb-leaky-bucket');

const bucket = new LeakyBucket(db, {
  collectionName: 'my-bucket', // MongoDB collection to use
  interval: 500,               // Allows one dequeue op each 500ms
  limit: 200                   // Maximum elements in bucket
});

bucket.push('Element one', 'Element two', 'Element three')
  .then(queueLength => console.log(queueLength)); // 3

bucket.shift()
  .then(element => console.dir(element)); // 'Element one'
bucket.shift()
  .then(element => console.dir(element)); // undefined

// a second later
bucket.shift()
  .then(element => console.dir(element)); // 'Element two'
bucket.shift()
  .then(element => console.dir(element)); // undefined

// another 500ms later
bucket.shift()
  .then(element => console.dir(element)); // 'Element three'

API

new LeakyBucket(db, [options])

Returns a new LeakyBucket deque.

db [MongoDB 'Db' instance]

A collection in this database will be used to store the deque.

options [Object]

collectionName [String]: Name of the mongodb collection to use. Default: leaky-bucket-default.

interval [Number]: Minimum time, in milliseconds, between dequeue operations. Default: 0.

limit [Integer]: Maximum number of elements that the deque will store before refusing an enqueue operation. Default: 2147483648 (2^31).

bucket.push(elementOne[, ...[, elementN]])

Appends the parameter(s) to the queue. Returns a Promise with the new length of the queue. If operation would cause an overflow of the bucket's limit, Promise resolves to null and queue is not changed.

bucket.shift()

Dequeues the first element of the queue and returns a Promise containing this element. If the queue is empty or if the time passed since the last dequeuing operation is less than options.interval, operation does not alter the queue and returns undefined.

bucket.unshift(elementOne[, ...[, elementN]])

Same as push, but prepends to queue instead of appending.

bucket.pop()

Same as shift, but dequeues and retrieves the last element instead of the first.

Disclaimer

This project is not affiliated with MongoDB.

License

MIT

About

A throttled queue backed by MongoDB.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published