Tóm tắt: Tôi đang phát triển ứng dụng web Java liên tục và tôi cần đảm bảo rằng tất cả tài nguyên tôi vẫn tồn tại có số nhận dạng duy nhất trên toàn cầu để ngăn trùng lặp.Tạo số nhận dạng duy nhất toàn cầu trong Java
Print Fine:
- tôi không sử dụng một RDBMS, vì vậy tôi không có bất kỳ máy phát điện tự ưa thích (ví dụ như một cung cấp bởi Oracle)
- Tôi muốn nó phải nhanh chóng, tốt nhất là tất cả trong bộ nhớ - tôi không muốn mở một tệp và tăng thêm một số giá trị
- Nó cần phải an toàn cho chủ đề (tôi dự đoán rằng chỉ một JVM tại một thời điểm sẽ cần phải tạo ID)
- Cần phải nhất quán ngay lập tức iations của JVM. Nếu máy chủ tắt và khởi động, trình tạo ID sẽ không tạo lại cùng một ID mà nó tạo ra trong các cảnh báo trước đó (hoặc ít nhất cơ hội phải thực sự, rất mỏng - tôi dự đoán có hàng triệu tài nguyên được phân bổ)
- Tôi đã xem các ví dụ trong bài viết mẫu ID duy nhất EJB. Chúng sẽ không làm việc cho tôi (tôi không muốn chỉ dựa vào System.currentTimeMillis() vì chúng tôi sẽ duy trì nhiều tài nguyên trên mỗi mili giây).
- Tôi đã xem câu trả lời được đề xuất trong this question. Mối quan tâm của tôi về họ là, cơ hội mà tôi sẽ nhận được một ID trùng lặp theo thời gian là gì? Tôi bị hấp dẫn bởi đề xuất sử dụng java.util.UUID cho một số UUID, nhưng một lần nữa, cơ hội trùng lặp cần phải nhỏ gọn.
- Tôi đang sử dụng JDK6
bạn đang chạy nhiều trường hợp của các ứng dụng trên các máy khác nhau? Nếu bạn đang có, bạn có khả năng để bắt đầu máy lên theo lô - để nó có khả năng là nhiều quá trình sẽ bắt đầu trong cùng một mili giây? Nếu kẻ tấn công tìm cách gây ra vụ va chạm UUID, điều đó có ảnh hưởng đến tính bảo mật của ứng dụng của bạn không? –
(A) Tập ID nào sẽ được tạo? Nhanh như thế nào? (Bao nhiêu/giây/phút) (B) Có, UUID được phát minh chính xác cho mục đích của bạn. –