How to generate time based UUIDs?

匿名 (未验证) 提交于 2019-12-03 01:58:03

问题:

I want to generate time based UUID in java - java.util.UUID.randomUUID() genrates a UUID version 4. How to generate a version 1 (time based) UUID ? Is there a separate library for that or is it some how provided in the Java 7 API and I am missing it.

回答1:

Be very careful using com.eaio.uuid.UUID, if you need to generate GUID by time other than current time, as this will always generate the same UUID for given time. So if your data has requirement to generate UUID, where records may have same time, this will generate same UUID.

We needed this to generate UUID for records, which are created ahead and also multiple records at same time, we tried to tweak it by trying to use UUIDGen.createTime(). We found that it has a side effect to mutate the time for records out of order. If a subsequent request to create UUID has a time stamp older than previous request, you end up having a UUID, which is based on previous request's time stamp.

After all the analysis, we had to simply go back to create UUID at the time of creation, so that we don't have to pass it as an argument. Whichever solution we come up with to generate UUID at a later time, every one has a drawback.



回答2:

String timeuuid = com.datastax.driver.core.utils.UUIDs.timeBased().toString(); 

have a look at https://docs.datastax.com/en/drivers/java/2.0/com/datastax/driver/core/utils/UUIDs.html



回答3:

FasterXML Java Uuid Generator (JUG)

https://github.com/cowtowncoder/java-uuid-generator

UUID uuid = Generators.timeBasedGenerator().generate(); 


标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!