Snowflake ID
A tiny module to generate time based 64-bit unique id, inspired by Twitter id (snowflake).
Snowflake-ID takes 42 bit of timestamp, 10 bit of machine id (or any random number you provide), 12 bit of sequence number . As javascript is limited to 53 bit integer precision, Snowflake-ID generates id in string format like "285124269753503744", which can be easily type casted into 64 bit bigint in database.
Installation
npm install snowflake-id
Usage
Initializtion
var SnowflakeId = require('snowflake-id');
var snowflake = new SnowflakeId({
mid : 42,
timeOffset : (2013-1970)*31536000*1000
});
Create a instance of snowflake as shown above which will be used to generate snowflake ids afterward.
Snowflake ID generation
var id1 = snowflake.gen(); \\returns something like 285124269753503744
var id2 = snowflake.gen(); \\returns something like 285124417543999488
Options
mid : (Default to 1) A machine id or any random id. If you are generating id in distributed system, its highly advised to provide a proper mid which is unique to different machines.
timeOffset : (Defaults to 0) Time offset will be subtracted from current time to get the first 42 bit of id. This help in generating smaller ids.
Method
gen : Method to generate id from Snowflake instance.
This was originally forked and modified from github.com/s-yadav/FlakeId, this was done because people neglect their code and I'm tired of it being broken.
As js have 53bit integer precision, Flake Id uses a smart solution by Dan Vanderkam danvk.org/hex2dec.html to convert hex to decimal without loosing precision.
Source code for converting hex to decimal is taken from danvk.org/hex2dec.html which have APACHE LICENCE