Можно ли использовать Instant.toEpochMilli () в качестве уникального идентификатора? - PullRequest
0 голосов
/ 26 сентября 2018

Я должен сгенерировать уникальный Id, который также может быть прочитан, поэтому не может использовать UUID.Поэтому я подумал об использовании Instant.toEpochMilli ().Можно ли использовать его как уникальный идентификатор?

Ответы [ 3 ]

0 голосов
/ 26 сентября 2018

Можно ли использовать его как уникальный идентификатор?

Только если вы можете быть уверены, что не выделите два идентификатора в течение одной миллисекунды, что маловероятно.Миллисекунда - это действительно короткое время для человека, но оно не является коротким временем для компьютера, совсем нет.

Если вы делаете это в течение определенного времени выполнениясреды и не обязательно иметь уникальные идентификаторы между средами, просто используйте вместо этого постоянно увеличивающееся число (если это нужно только в рамках запущенного процесса, это может быть просто статическое поле, где вы увеличиваете какнеобходимо: для разных процессов, но в одной и той же общей среде, последовательности базы данных или аналогичной и т. д.).Если он должен быть уникальным в разных средах, вам действительно нужно использовать GUID или аналогичный.

0 голосов
/ 26 сентября 2018

Генерирует текущее время в миллисекундах.Ну, в большинстве случаев это недостаточно хорошо.Потому что, если тайм-аут между 2 вызовами этого метода слишком короткий (например, когда вы вызываете его в цикле), он может быть дублирован.Возможно, вы захотите взглянуть на генерацию наносекунды (например, System.nanoTime () ).Подводя итог, не рекомендуется использовать миллисекунд или даже nano sec в качестве уникального идентификатора.Но в некоторых особых ситуациях это можно принять.

0 голосов
/ 26 сентября 2018

Нет. Я лично столкнулся с ситуацией, когда два объекта имели одинаковый идентификатор.Я протестировал System.nanoTime(), и все выглядело нормально, но в общем случае оба варианта не верны.

Правильные решения:

  • UUID.randomUUID()
  • AtomicLong
  • Последовательность базы данных
...