Ein Universally Unique Identifier (UUID) ist ein Standard für Identifikatoren. Wer eindeutige einmalige IDs braucht, kann die in Java einfach erzeugen. Es gibt da ab 1.5 die Klasse UUID mit der man einfach diese IDs erzeugen kann.
Die RFC 4122 beschreibt den Aufbau und den Algorithmus für die Erzeugung. Das ganze ist schon ziemlich sicher, da die SecureRandom Klasse in Java verwendet wird.
Habe mich gefragt, ob die auch wirklich eindeutig sind. Dafür mal eben einen kleinen JUnit Test geschrieben der 1 Millionen UUIDs erzeugt und testet ob zwei gleiche erzeugt werden. Nach 4889,556 Sekunden das Ergebnis:
Hier die Testklasse:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
package de.wenzlaff.tools; import static org.junit.Assert.fail; import java.util.ArrayList; import java.util.List; import java.util.UUID; import org.junit.Test; public class TestUuid { private static final int MAX = 1000000; @Test public void testIdGen() { List<String> c = new ArrayList<>(); for (int i = 0; i < MAX; i++) { String id = UUID.randomUUID().toString(); if (c.contains(id)) { fail("Doppelte ID " + id + " generiert!"); } c.add(id); System.out.println(id); } } } |
Die CPU war schon teilweise zu 100% ausgelastet, zumindestens einer der acht Kerne:
Ein UUID in ihrer Normalform sieht beispielsweise so aus:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
4ca875fe-6643-43fb-8cf4-ac05f1d06d67 2ea4d266-68e7-49ed-b927-c25e6a3a6909 eb24cbf6-daac-4ba3-8f08-fea35d04121b e59fd813-61c1-460a-a428-c679241db823 47f39849-9096-4e48-9aa7-4b251c995155 f89489d1-d0ba-4935-8447-dee46dffcaaf 7686a777-95cf-40ff-8255-88f503eb86b4 8c5b08ed-e450-4e28-a98c-a1d369a06afe 4a464282-6034-4b3b-990f-7527cedb8133 c2e58ff2-6d55-4e64-8bc4-5a57f6c5f1ad 79577947-93b6-4c45-8b42-38b1632aa4b9 50d35068-7cb2-4902-a5a5-427fa361a879 7f48e781-928f-4213-bd55-d00d54cd57c9 0be5cbb0-fcb1-4ad8-a1e6-66ff36563325 6fbc9e62-119e-42c1-a855-793a2d2fafc0 1792a513-e9de-4894-b6f2-c0992e14ef94 feb931bb-5b7f-4e3a-b1ff-1f295b127a83 a84cfe70-f118-4ec8-b067-2ff1ccecce7e 9c5e8efc-04e1-4dde-b44a-109f678aecf8 953ae098-923b-4fbc-8bcc-76cfc418b171 7eb6470d-b199-4454-9344-493e16587bf1 b82ed01a-1f33-4495-8c5b-d4c41b7c2c25 9dceb9ca-a955-4416-97fa-f9b8b406c667 548b64a0-fd2b-4559-87f8-cefe5b559c83 ba40af96-0172-401f-a3cf-4245846003f7 cfe78533-6a1a-4fcb-b4b0-fb6216361334 773fed57-0831-4d29-890e-52fb37f66af3 0c022ad1-a649-40e0-9ef3-3d9b7d9fecf2 9d0d8179-be5f-448f-a3a7-722d71927122 be89d391-11dd-49c9-b1c1-c9eb8315e30a ce6e32f1-3d23-4a41-9260-beae98af470f e25bbfc3-c8f0-4883-93af-626f22e2f7bd d6155be7-8dcd-4c09-b451-2b546b01c42d 5689a990-2d67-428c-bc1c-10781bfa286c 7d858ccc-1936-4dd4-89a5-9b46e63afa40 |
Wie lange läuft bei Euch der Test? Wie lange läuft er auf einem Raspberry Pi?