Kostean Kehän Laskin - Hydraulitekniikan Työkalu
Laske kostea kehä eri kanavamuodoille, mukaan lukien puolisuunnikkaat, suorakulmiot/neliöt ja pyöreät putket. Välttämätön hydraulitekniikan ja virtausmekaniikan sovelluksissa.
ULID-generaattori
Generoitu ULID:
ULID-rakenne
Aikaleima (10 merkkiä)
Satunnaisuus (16 merkkiä)
Dokumentaatio
ULID Generaattori
Johdanto
ULID (Universally Unique Lexicographically Sortable Identifier) on ainutlaatuinen tunniste, joka yhdistää aikaleiman satunnaisiin tietoihin luodakseen 26-merkkisen merkkijonon. ULIDit on suunniteltu olemaan leksikografisesti lajitteltavissa samalla kun ne säilyttävät korkean ainutlaatuisuuden ja satunnaisuuden.
ULIDin rakenne
ULID koostuu kahdesta pääosasta:
- Aikaleima (10 merkkiä): Ensimmäiset 10 merkkiä edustavat aikaa millisekunteina Unix-ajan (1970-01-01) jälkeen.
- Satunnaisuus (16 merkkiä): Loput 16 merkkiä generoidaan käyttäen kryptografisesti turvallista satunnaisdatan lähdettä.
Tuloksena oleva 26-merkkinen merkkijono on koodattu Crockfordin base32 -aakkostolla (0-9 ja A-Z, lukuun ottamatta I, L, O ja U).
Kaava
ULID generoidaan seuraavien vaiheiden avulla:
- Generoi 48-bittinen aikaleima (millisekuntia Unix-ajan jälkeen).
- Generoi 80 bittiä kryptografisesti turvallista satunnaisdataa.
- Koodaa yhdistetyt 128 bittiä Crockfordin base32 -koodauksella.
Laskenta
ULID-generaattori suorittaa seuraavat vaiheet:
- Hanki nykyinen aikaleima millisekunteina.
- Generoi 10 satunnaista tavua (80 bittiä) käyttäen kryptografisesti turvallista satunnaislukugeneraattoria.
- Yhdistä aikaleima ja satunnaisdatan 128-bittiseksi kokonaisluvuksi.
- Koodaa 128-bittinen kokonaisluku Crockfordin base32 -koodauksella.
Käyttötapaukset
ULIDit ovat hyödyllisiä erilaisissa skenaarioissa, mukaan lukien:
- Tietokannan avaimet: ULIDit voidaan käyttää ainutlaatuisina tunnisteina tietokantakirjauksille, varmistaen ainutlaatuisuuden ja lajittelun.
- Hajautetut järjestelmät: Hajautetuissa ympäristöissä ULIDit voidaan generoida ilman koordinaatiota solmujen välillä.
- Lokitus ja jäljitys: ULIDit voidaan käyttää lokimerkintöjen tai tapahtumien merkitsemiseen, tarjoten lajittelevan ja ainutlaatuisen tunnisteen.
- URL-ystävälliset tunnisteet: ULIDit ovat URL-turvallisia ja niitä voidaan käyttää verkkosovelluksissa tunnisteina URL-osoitteissa.
Vaihtoehdot
Vaikka ULIDit ovat monipuolisia, on olemassa myös muita ainutlaatuisia tunnistinjärjestelmiä, joita kannattaa harkita:
- UUID (Universally Unique Identifier): 128-bittinen tunniste, joka ei sisällä aikaleimaosaa.
- KSUID (K-Sortable Unique IDentifier): Samankaltainen kuin ULID, mutta eri aikaleiman koodauksella.
- Snowflake ID: Twitterin hajautettu ainutlaatuisten ID:iden generointijärjestelmä, joka sisältää aikaleiman ja työntekijätunnuksen.
Historia
ULIDit esiteltiin vuonna 2016 Alizain Feerastan toimesta vaihtoehtona UUID:ille. Ne on suunniteltu käsittelemään joitakin UUID:iden rajoituksia, erityisesti lajittelun ja luettavuuden osalta. ULID-spesifikaatio on pysynyt vakaana sen esittelyn jälkeen, ja erilaisia toteutuksia on saatavilla eri ohjelmointikielillä.
Esimerkit
Tässä on joitakin koodiesimerkkejä ULIDien generoimiseksi eri ohjelmointikielillä:
1// JavaScript-toteutus
2function generateULID() {
3 const timestamp = Date.now().toString(36).padStart(10, '0');
4 const randomness = crypto.getRandomValues(new Uint8Array(16))
5 .reduce((acc, byte) => acc + byte.toString(36).padStart(2, '0'), '');
6 return (timestamp + randomness).toUpperCase();
7}
8
9console.log(generateULID());
10
1## Python-toteutus
2import time
3import secrets
4import base64
5
6def generate_ulid():
7 timestamp = int(time.time() * 1000).to_bytes(6, byteorder="big")
8 randomness = secrets.token_bytes(10)
9 return base64.b32encode(timestamp + randomness).decode("ascii").lower()
10
11print(generate_ulid())
12
1// Java-toteutus
2import java.security.SecureRandom;
3import java.time.Instant;
4
5public class ULIDGenerator {
6 private static final SecureRandom random = new SecureRandom();
7 private static final char[] ENCODING_CHARS = "0123456789ABCDEFGHJKMNPQRSTVWXYZ".toCharArray();
8
9 public static String generateULID() {
10 long timestamp = Instant.now().toEpochMilli();
11 byte[] randomness = new byte[10];
12 random.nextBytes(randomness);
13
14 StringBuilder result = new StringBuilder();
15 // Koodaa aikaleima
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Koodaa satunnaisuus
21 for (byte b : randomness) {
22 result.append(ENCODING_CHARS[b & 31]);
23 }
24 return result.toString();
25 }
26
27 public static void main(String[] args) {
28 System.out.println(generateULID());
29 }
30}
31
Nämä esimerkit osoittavat, kuinka ULIDit voidaan generoida JavaScriptissä, Pythonissa ja Javassa. Voit mukauttaa näitä toimintoja omiin tarpeisiisi tai integroida ne suurempiin järjestelmiin, jotka vaativat ainutlaatuisia tunnisteita.
Viitteet
- "ULID Specification." GitHub, https://github.com/ulid/spec. Viitattu 2. elokuuta 2024.
- "Crockfordin Base32 -koodaus." Base32-koodaus, http://www.crockford.com/base32.html. Viitattu 2. elokuuta 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Viitattu 2. elokuuta 2024.
Palaute
Napsauta palautetoimintoa aloittaaksesi palautteen antamisen tästä työkalusta
Liittyvät työkalut
Löydä lisää työkaluja, jotka voivat olla hyödyllisiä työnkulussasi