2013-08-15 63 views
44

Tôi muốn tạo UUID dựa trên thời gian trong java - java.util.UUID.randomUUID() genrates một phiên bản UUID 4. Cách tạo UUID phiên bản 1 (dựa trên thời gian)? Có một thư viện riêng biệt cho điều đó hoặc là nó một số cách cung cấp trong Java 7 API và tôi đang thiếu nó.Cách tạo UUID theo thời gian?

+0

Không, Java SDK không bao gồm một lớp UUID khác nhau hơn 'UUID '. –

+0

Tuy nhiên, lớp UUID cung cấp các phương thức như dấu thời gian công khai() để lấy dấu thời gian từ UUID nếu nó dựa trên thời gian .. nhưng không có phương pháp để tạo ra nó – dogfish

+1

Kiểm tra JUG @ http://wiki.fasterxml.com/ JugHome, nó có thể làm loại 1. –

Trả lời

10

Hãy rất cẩn thận khi sử dụng com.eaio.uuid.UUID, nếu bạn cần tạo GUID theo thời gian khác với thời gian hiện tại, vì điều này sẽ luôn tạo cùng một UUID cho thời gian đã định. Vì vậy, nếu dữ liệu của bạn có yêu cầu để tạo UUID, nơi các bản ghi có thể có cùng một thời gian, điều này sẽ tạo ra cùng một UUID.

Chúng tôi cần điều này để tạo UUID cho bản ghi, được tạo trước và cũng nhiều bản ghi cùng một lúc, chúng tôi đã cố gắng tinh chỉnh nó bằng cách cố gắng sử dụng UUIDGen.createTime(). Chúng tôi thấy rằng nó có một tác dụng phụ để thay đổi thời gian cho các hồ sơ không đúng thứ tự. Nếu yêu cầu sau để tạo UUID có dấu thời gian cũ hơn yêu cầu trước đó, bạn sẽ có một số UUID, dựa trên dấu thời gian của yêu cầu trước đó.

Sau khi phân tích xong, chúng tôi phải quay trở lại để tạo ra UUID tại thời điểm tạo, để chúng tôi không phải chuyển nó làm đối số. Bất kỳ giải pháp nào chúng tôi đưa ra để tạo ra UUID sau đó, mọi giải pháp đều có một nhược điểm.

Các vấn đề liên quan