JavaScript Unique Monotonic ID Class
A unique monotonic ID class that is based on UUID version 1.
The UUID sequence is stripped of the -
separator and is organized such that IDs are far more likely to be sequential.
The resulting ID can be indexed as a binary value providing a reliable format for large databases with negligible performance loss and smaller footprint than auto incremented IDs (MySQL/MariaDB binary(16) vs bigint).
For more information see the following Percona UUID Blog Post which was referenced to create this package.
- NodeJS v5.0.x or higher
- NPM
See ./package.json
Source available on GitHub or install module via NPM:
$ npm install monotonic-id
Create instances of the monotonic-id require class.
// get MID class
var MID = require('monotonic-id')
// create MID class instance
var mid = new MID()
// cast mid instance in various formats
var midID = mid.toID()
var midUUID = mid.toUUID()
var midHex = mid.toString('hex')
var midBuffer = mid.toBuffer()
// additional functionality
// test for valid ID
MID.isID(midID) // returns true
MID.isID(midHex) // returns false
// create MID class instance from ID
var midFromID = new MID(null, midID)
// create MID class instance from buffer
var midFromBuffer = new MID(null, midBuffer)
// create MID class with uuid.v1 options
var mid = new MID({
node: [0x01, 0x23, 0x45, 0x67, 0x89, 0xab],
clockseq: 0x1234,
msecs: new Date('2011-11-01').getTime(),
nsecs: 5678
})
The above first creates a instance of the monotonic-id class then casts the instance to an id string and hex string.
After there are some examples of additional monotonic-id functionality.
The following are the supported options for creating a new monotonic-id instance.
[options ] |
Object with one or more of the following properties: |
[options.node = (random) ] |
RFC "node" field as an Array[6] of byte values (per 4.1.6) |
[options.clockseq = (random) ] |
RFC "clock sequence" as a Number between 0 - 0x3fff |
[options.msecs = (current time) ] |
RFC "timestamp" field (Number of milliseconds, unix epoch) |
[options.nsecs = 0 ] |
RFC "timestamp" field (Number of nanoseconds to add to msecs , should be 0-10,000) |
[options.random = (random) ] |
Array of 16 random bytes (0-255) used to generate other fields, above |
[options.rng ] |
Alternative to options.random , a Function that returns an Array of 16 random bytes (0-255) |
[buffer ] |
Uint8Array or Uint8Array subtype (e.g. Node.js Buffer ). If provided, binary UUID is written into the array, starting at offset |
[offset = 0] |
Number Index to start writing UUID bytes in buffer |
returns | UUID String if no buffer is specified, otherwise returns buffer |
throws | Error if more than 10M UUIDs/sec are requested |
[mid ] |
String or Buffer to cast as a monotonic-id. |
For more information on options checkout the uuid v1 docs.