LINUXTALKS.CO

Уникальность (что б её) и коллизии

 , ,

L


0

1

Короче (если получится):

В настоящее время, для обеспечения уникальности неких «элементов», хранимых в базе данных, используется uuid V4.

И всё бы ничего, но, предполагается генерация этих uuid на разных инстансах. Что, не теоретически, а практически, точно приведёт к коллизиям (генерации разными инстансами одинаковых значений). Чтобы эти инстансы не зависили от некоего единственного провайдера uuid’ов, который в состоянии проверять, выдавал ли он ранее такой uuid или нет, появилась идея использовать «пространства имён» на основе даты и времени создания нового «элемента».

Вообще, понятно, что в самой таблице, хранящей данные «элементов», присутствует автоинкрементное поле «id», которое эту уникальность, конечно же, обеспечивает. Но вот беда, некоторые приложения, пользующиеся этими данными, не используют автоинкрементные айдишники, а используют выше обозначеный uuid V4. Засим, дабы не патчить эти приложения, вместо uuid V4 им можно подсунуть строковый уникальный идентификатор, о котором ниже:

Я хочу генерировать уникальные ключи вида (без квадратных скобок, они тут только для того, чтобы вам было понятно из чего состоит ключ):

[year][month][day][hour][min][sec][usec][usec][usec]

Где:

year – год, всегда 4 цифры

month – месяц в году, всегда 2 цифры

day – день, всегда 2 цифры

hour – текущий час, всегда 2 цифры

min – текущие минуты, всегда 2 цифры

sec – текущие секунды, всегда 2 цифры

usec – текущие микросекунды, всегда 6 цифр, три раза по 6

Теперь подробнее про микросекунды:

Тики процессора, в принципе, по частоте их следования, сопоставимы с его тактовой частотой и значениями микросекунд. Кроме того, процессор, как правило, выполняет несколько задач, циклически обходя каждую из них, и, возвращаясь к задаче генерации ключа, эта задача, трижды запрашивающая текущее значение микросекунд, будет получать немного отличающиеся значения (уже проверено). Ну а три раза подряд – это и есть защита от коллизий в пределах одной секунды, ещё и на разных инстансах.

Так вот вопрос:

Насколько по вашему подход, выбранный мной, будет надёжным? Конечно же, учитывая генерацию на разных инстансах.

★★★★★★★★★★
Ответ на: комментарий от deep-purple

А инстанс это то, что это АПИ предоставляет?

И как я понимаю выполняется это всё, и гондозавры, и инстанс, паралельно (потоком или процессом не важно)на материнке с 4 ЦПУ по 32 ядра каждый?

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 2)

Android / Chrome
Ответ на: комментарий от deep-purple

А инстанс это то, что это АПИ предоставляет?

И как я понимаю выполняется это всё, и гондозавры, и инстансы, паралельно (потоком или процессом не важно)на нескольких компах с материнками с 4 ЦПУ по 32 ядра каждый?

torvn77    
★★★
Последнее исправление: torvn77 (всего исправлений: 1)

Android / Chrome