Является ли это жизнеспособным, монотонно увеличивающимся timeId в javascript? - PullRequest
0 голосов
/ 04 ноября 2018

[NodeJS 10.x / 11.x]

Я ищу постоянно увеличивающийся временной идентификатор, который будет уникальным и монотонно увеличивающимся в разных процессах (но не обязательно в разных серверах). Я смотрел на монотонно увеличивающееся время в Node.js , но это для оценки производительности. По сути, я ищу timeId, который можно сохранить в базе данных.

Примечание: я пробовал process.hrTime (), но на моем MacMini монотонно не увеличивается. Обновление до Node10 / 11 и использование hrtime.bigInt (), казалось, решили часть моей проблемы.

Вот моя текущая идея (где bigIntToBase64String () опущена, но выполняет то, что вы ожидаете):

let startHrTime = process.hrtime.bigint();
let systemStartTime = BigInt(new Date().getTime()) * BigInt(2**16) * BigInt(2**5);

class TimeId {
    getTimeId() {
        let t1 = process.hrtime.bigint() - startHrTime;
        let ticks = t1 + systemStartTime;
        return this.bigIntToBase64String(ticks);
    };
}

Как видите, это что-то вроде хака. Я вычитаю первое полученное время, а затем добавляю это к времени запуска системы (которое я исказил в BigInt). При условии идеально синхронизированных часов (ха!) Это может быть использовано как глобальный идентификатор времени. (Для моих целей, надеюсь, что перекос между системными часами будет решен другим способом).

В настоящее время я настраиваю некоторые тесты для проверки своего предположения, но, поскольку я все еще довольно плохо знаком с JavaScript / Node.JS, я подумал, что могу спросить ... это разумный подход?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...