Kikokotoo cha Mzunguko wa Maji kwa Mifereji na Mabomba
Hesabu mzunguko wa maji kwa maumbo mbalimbali ya mifereji ikiwa ni pamoja na trapezoidi, mstatili/mraba, na mabomba ya mviringo. Muhimu kwa matumizi ya uhandisi wa majimaji na mitambo ya maji.
Kizazi cha ULID
ULID iliyozalishwa:
Muundo wa ULID
Wakati (herufi 10)
Nasibu (herufi 16)
Hati
Kizazi cha ULID
Utangulizi
ULID (Universally Unique Lexicographically Sortable Identifier) ni kitambulisho cha kipekee kinachounganisha muda na data ya nasibu ili kuunda mfuatano wa herufi 26. ULIDs zimeundwa kuwa na uwezo wa kuandikwa kwa lexicographically wakati wa kudumisha kiwango cha juu cha kipekee na nasibu.
Muundo wa ULID
ULID ina sehemu mbili kuu:
- Muda (herufi 10): Herufi 10 za kwanza zinawakilisha wakati katika milisekunde tangu Epoch ya Unix (1970-01-01).
- Nasibu (herufi 16): Herufi 16 zilizobaki zinaundwa kwa kutumia data ya nasibu ya usalama wa kifyatu.
Mfuatano wa herufi 26 uliofikiwa unatumia alfabeti ya Crockford's base32 (0-9 na A-Z, ikiondoa I, L, O, na U).
Formula
ULID inazalishwa kwa kutumia hatua zifuatazo:
- Zalisha muda wa bits 48 (milisekunde tangu Epoch ya Unix).
- Zalisha bits 80 za data ya nasibu ya usalama wa kifyatu.
- Pata mchanganyiko wa bits 128 kwa kutumia usimbuaji wa Crockford's base32.
Hesabu
Mzalishaji wa ULID unatekeleza hatua zifuatazo:
- Pata muda wa sasa katika milisekunde.
- Zalisha bytes 10 za nasibu (bits 80) kwa kutumia jenereta ya nambari ya nasibu ya usalama wa kifyatu.
- Changanya muda na data ya nasibu kuwa integer ya bits 128.
- Fanya usimbuaji wa integer ya bits 128 kwa kutumia usimbuaji wa Crockford's base32.
Matumizi
ULIDs ni muhimu katika hali mbalimbali, ikiwa ni pamoja na:
- Funguo za hifadhidata: ULIDs zinaweza kutumika kama vitambulisho vya kipekee kwa rekodi za hifadhidata, kuhakikisha kipekee na uwezo wa kuandikwa.
- Mifumo iliyosambazwa: Katika mazingira yaliyosambazwa, ULIDs zinaweza kuzalishwa bila uratibu kati ya nodi.
- Kurekodi na kufuatilia: ULIDs zinaweza kutumika kuweka alama za entries za log au kufuatilia matukio, kutoa kitambulisho kinachoweza kuandikwa na kipekee.
- Vitambulisho vya kirafiki kwa URL: ULIDs ni salama kwa URL na zinaweza kutumika katika programu za wavuti kama vitambulisho katika URLs.
Mbadala
Ingawa ULIDs ni za matumizi mengi, kuna mifumo mingine ya vitambulisho vya kipekee ya kuzingatia:
- UUID (Universally Unique Identifier): Kitambulisho cha bits 128 ambacho hakijumuishi kipengele cha muda.
- KSUID (K-Sortable Unique IDentifier): Kifananishi na ULID lakini na usimbuaji tofauti wa muda.
- Snowflake ID: Mfumo wa uzalishaji wa vitambulisho vya kipekee wa Twitter, ambao unajumuisha muda na kitambulisho cha mfanyakazi.
Historia
ULIDs zilianzishwa mwaka 2016 na Alizain Feerasta kama mbadala wa UUIDs. Ziliundwa ili kushughulikia baadhi ya vikwazo vya UUIDs, hasa katika suala la uwezo wa kuandikwa na usomaji. Spec ya ULID imebaki thabiti tangu kuanzishwa kwake, na utekelezaji mbalimbali zinapatikana katika lugha tofauti za programu.
Mifano
Hapa kuna mifano ya msimbo wa kuzalisha ULIDs katika lugha tofauti za programu:
1// Utekelezaji wa JavaScript
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## Utekelezaji wa Python
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// Utekelezaji wa Java
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 // Usimbuaji wa muda
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Usimbuaji wa nasibu
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
Mifano hii inaonyesha jinsi ya kuzalisha ULIDs katika JavaScript, Python, na Java. Unaweza kubadilisha kazi hizi kulingana na mahitaji yako maalum au kuziunganisha katika mifumo kubwa inayo hitaji vitambulisho vya kipekee.
Marejeleo
- "ULID Specification." GitHub, https://github.com/ulid/spec. Upatikanaji 2 Aug. 2024.
- "Crockford's Base32 Encoding." Usimbuaji wa Base32, http://www.crockford.com/base32.html. Upatikanaji 2 Aug. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Upatikanaji 2 Aug. 2024.
Maoni
Bonyeza toast ya maoni kuanza kutoa maoni kuhusu zana hii
Zana Zinazohusiana
Gundua zana zaidi ambazo zinaweza kuwa na manufaa kwa mtiririko wako wa kazi