Nice programing

시간 기반 UUID를 생성하는 방법은 무엇입니까?

nicepro 2021. 1. 8. 22:52
반응형

시간 기반 UUID를 생성하는 방법은 무엇입니까?


Java에서 시간 기반 UUID를 생성하고 싶습니다.-java.util.UUID.randomUUID ()는 UUID 버전 4를 생성합니다. 버전 1 (시간 기반) UUID를 생성하는 방법은 무엇입니까? 별도의 라이브러리가 있습니까 아니면 Java 7 API에서 제공되는 방법 중 일부입니까?


현재 시간이 아닌 다른 시간으로 GUID를 생성해야하는 경우 com.eaio.uuid.UUID를 사용하면 항상 주어진 시간 동안 동일한 UUID를 생성하므로주의해야합니다. 따라서 데이터에 UUID 생성 요구 사항이있는 경우 레코드가 동일한 시간을 가질 수있는 경우 동일한 UUID가 생성됩니다.

미리 생성 된 레코드와 동시에 여러 레코드에 대한 UUID를 생성하기 위해이 기능이 필요했습니다. UUIDGen.createTime ()을 사용하여 조정하려고했습니다. 우리는 레코드의 시간을 순서에 맞지 않게 변경하는 부작용이 있음을 발견했습니다. 후속 생성 요청에 UUID이전 요청보다 오래된 타임 스탬프가있는 UUID경우 이전 요청의 타임 스탬프를 기반으로하는을 갖게 됩니다.

모든 분석이 끝난 후, 우리는 UUID창조 당시의 창조 로 돌아가서 그것을 논쟁으로 넘길 필요가 없었습니다. 우리가 UUID나중에 생성하기 위해 어떤 해결책을 제시하든 모든 솔루션 에는 단점이 있습니다.


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

https://docs.datastax.com/en/drivers/java/2.0/com/datastax/driver/core/utils/UUIDs.html을 살펴보십시오.


FasterXML Java Uuid 생성기 (JUG)

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

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

애플리케이션을 테스트하려면 com.eaio.uuid.UUID를 사용하여 시간 기반 UUID가있는 데이터를 생성해야합니다. 우리는 이전 타임 스탬프 UUID를 생성했기 때문에 테스트 케이스에 따라 타임 스탬프를 제어 할 수있었습니다. 참고 :-향후 타임 스탬프 UUID를 생성 할 수 없습니다.

우리는 아래와 같이 생성했습니다-

import com.eaio.uuid.UUID;
import com.eaio.uuid.UUIDGen;

    long time = DateUtil.getEpochtimeFromDate("21-06-2018 12:30:31", "dd-M-yyy hh:hh:ss");
    UUID time_based_uuid = new UUID(UUIDGen.createTime(time), UUIDGen.getClockSeqAndNode());

Cassandra의 구현 또는 유형 1 UUID의 Github : 사용법 알려진 버그로 인해 uuid1> uuid2 등과 같은 이러한 uuid를 비교하지 마십시오 .

참조 URL : https://stackoverflow.com/questions/18244897/how-to-generate-time-based-uuids

반응형