Snowflake Generator

Genera ID a 64 bit in stile Twitter: timestamp + machine ID + sequenza

Il tuo Snowflake ID
Snowflake: 64 bit signed
Timestamp (41 bit)
-
Data/ora
-
Datacenter ID (5 bit)
-
Worker ID (5 bit)
-
Sequence (12 bit)
-
Rappresentazione binaria
-
64 bit: 1 sign + 41 timestamp + 5 datacenter + 5 worker + 12 sequence
Ordinabile: ordinabile per tempo grazie ai 41 bit di timestamp in alto
Throughput: fino a 4.096 ID/ms per worker (12 bit di sequence)
Epoch: Twitter usa 2010-11-04, qui personalizzabile (default 2010-01-01)
JavaScript
// Twitter Snowflake — richiede BigInt
const EPOCH = 1262304000000n; // 2010-01-01

let lastTs = 0n, seq = 0n;

function snowflake(datacenter = 1n, worker = 1n) {
    let ts = BigInt(Date.now());
    if (ts === lastTs) {
        seq = (seq + 1n) & 0xFFFn;
        if (seq === 0n) while (BigInt(Date.now()) <= ts) {}
    } else {
        seq = 0n;
    }
    lastTs = ts;
    return ((ts - EPOCH) << 22n)
         | (datacenter << 17n)
         | (worker << 12n)
         | seq;
}