Υπολογιστής Βρεγμένης Περιμέτρου για Σχήματα Καναλιών
Υπολογίστε τη βρεγμένη περίμετρο για διάφορα σχήματα καναλιών, συμπεριλαμβανομένων τραπεζοειδών, ορθογωνίων/τετραγώνων και κυκλικών σωλήνων. Απαραίτητο για εφαρμογές υδραυλικής μηχανικής και μηχανικής ρευστών.
Γεννήτρια ULID
Δημιουργημένο ULID:
Δομή ULID
Χρονική σήμανση (10 χαρακτήρες)
Τυχαιότητα (16 χαρακτήρες)
Τεκμηρίωση
Γεννήτρια ULID
Εισαγωγή
Ένα ULID (Καθολικά Μοναδικός Λεξικογραφικά Ταξινομήσιμος Αναγνωριστικός) είναι ένας μοναδικός αναγνωριστικός που συνδυάζει μια χρονική σήμανση με τυχαία δεδομένα για να δημιουργήσει μια συμβολοσειρά 26 χαρακτήρων. Τα ULIDs έχουν σχεδιαστεί για να είναι λεξικογραφικά ταξινομήσιμα διατηρώντας παράλληλα υψηλό βαθμό μοναδικότητας και τυχαιότητας.
Δομή ενός ULID
Ένα ULID αποτελείται από δύο κύρια μέρη:
- Χρονική σήμανση (10 χαρακτήρες): Οι πρώτοι 10 χαρακτήρες αντιπροσωπεύουν τον χρόνο σε χιλιοστά του δευτερολέπτου από την εποχή Unix (1970-01-01).
- Τυχαιότητα (16 χαρακτήρες): Οι υπόλοιποι 16 χαρακτήρες παράγονται χρησιμοποιώντας κρυπτογραφικά ασφαλή τυχαία δεδομένα.
Η προκύπτουσα 26-χαρακτήρων συμβολοσειρά κωδικοποιείται χρησιμοποιώντας το αλφάβητο base32 του Crockford (0-9 και A-Z, εξαιρουμένων των I, L, O και U).
Τύπος
Το ULID παράγεται χρησιμοποιώντας τα εξής βήματα:
- Δημιουργία μιας χρονικής σήμανσης 48-bit (χιλιοστά από την εποχή Unix).
- Δημιουργία 80 bit κρυπτογραφικά ασφαλών τυχαίων δεδομένων.
- Κωδικοποίηση των συνδυασμένων 128 bit χρησιμοποιώντας την κωδικοποίηση base32 του Crockford.
Υπολογισμός
Η γεννήτρια ULID εκτελεί τα εξής βήματα:
- Λάβετε την τρέχουσα χρονική σήμανση σε χιλιοστά.
- Δημιουργήστε 10 τυχαία bytes (80 bit) χρησιμοποιώντας έναν κρυπτογραφικά ασφαλή γεννήτρια τυχαίων αριθμών.
- Συνδυάστε τη χρονική σήμανση και τα τυχαία δεδομένα σε έναν ακέραιο 128-bit.
- Κωδικοποιήστε τον ακέραιο 128-bit χρησιμοποιώντας την κωδικοποίηση base32 του Crockford.
Χρήσεις
Τα ULIDs είναι χρήσιμα σε διάφορα σενάρια, όπως:
- Κλειδιά βάσης δεδομένων: Τα ULIDs μπορούν να χρησιμοποιηθούν ως μοναδικοί αναγνωριστές για εγγραφές βάσης δεδομένων, εξασφαλίζοντας μοναδικότητα και ταξινόμηση.
- Κατανεμημένα συστήματα: Σε κατανεμημένα περιβάλλοντα, τα ULIDs μπορούν να παραχθούν χωρίς συντονισμό μεταξύ κόμβων.
- Καταγραφή και παρακολούθηση: Τα ULIDs μπορούν να χρησιμοποιηθούν για την επισήμανση καταχωρίσεων καταγραφής ή την παρακολούθηση γεγονότων, παρέχοντας έναν ταξινομήσιμο και μοναδικό αναγνωριστικό.
- Φιλικοί προς το URL αναγνωριστές: Τα ULIDs είναι ασφαλή για URL και μπορούν να χρησιμοποιηθούν σε διαδικτυακές εφαρμογές ως αναγνωριστές σε URLs.
Εναλλακτικές
Αν και τα ULIDs είναι ευέλικτα, υπάρχουν άλλα συστήματα μοναδικών αναγνωριστών που πρέπει να εξεταστούν:
- UUID (Καθολικά Μοναδικός Αναγνωριστικός): Ένας 128-bit αναγνωριστικός που δεν περιλαμβάνει μια χρονική σήμανση.
- KSUID (K-Sortable Unique IDentifier): Παρόμοιο με το ULID αλλά με διαφορετική κωδικοποίηση χρονικής σήμανσης.
- Snowflake ID: Το σύστημα κατανεμημένης μοναδικής αναγνώρισης του Twitter, το οποίο περιλαμβάνει μια χρονική σήμανση και αναγνωριστικό εργαζομένου.
Ιστορία
Τα ULIDs εισήχθησαν το 2016 από τον Alizain Feerasta ως εναλλακτική λύση στα UUIDs. Σχεδιάστηκαν για να αντιμετωπίσουν κάποιους περιορισμούς των UUIDs, ιδιαίτερα όσον αφορά την ταξινόμηση και την αναγνωσιμότητα. Η προδιαγραφή ULID έχει παραμείνει σταθερή από την εισαγωγή της, με διάφορες υλοποιήσεις διαθέσιμες σε διαφορετικές γλώσσες προγραμματισμού.
Παραδείγματα
Ακολουθούν μερικά παραδείγματα κώδικα για τη δημιουργία ULIDs σε διαφορετικές γλώσσες προγραμματισμού:
1// Υλοποίηση 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## Υλοποίηση 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// Υλοποίηση 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 // Κωδικοποίηση χρονικής σήμανσης
16 for (int i = 9; i >= 0; i--) {
17 result.append(ENCODING_CHARS[(int) (timestamp % 32)]);
18 timestamp /= 32;
19 }
20 // Κωδικοποίηση τυχαιότητας
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
Αυτά τα παραδείγματα δείχνουν πώς να δημιουργήσετε ULIDs σε JavaScript, Python και Java. Μπορείτε να προσαρμόσετε αυτές τις συναρτήσεις στις συγκεκριμένες ανάγκες σας ή να τις ενσωματώσετε σε μεγαλύτερα συστήματα που απαιτούν μοναδικούς αναγνωριστές.
Αναφορές
- "Προδιαγραφή ULID." GitHub, https://github.com/ulid/spec. Πρόσβαση 2 Αυγ. 2024.
- "Κωδικοποίηση Base32 του Crockford." Κωδικοποίηση Base32, http://www.crockford.com/base32.html. Πρόσβαση 2 Αυγ. 2024.
- "UUID vs ULID." Stack Overflow, https://stackoverflow.com/questions/54222235/uuid-vs-ulid. Πρόσβαση 2 Αυγ. 2024.
Ανατροφοδότηση
Κάντε κλικ στο toast ανατροφοδότησης για να ξεκινήσετε να δίνετε ανατροφοδότηση για αυτό το εργαλείο
Σχετικά Εργαλεία
Ανακαλύψτε περισσότερα εργαλεία που μπορεί να είναι χρήσιμα για τη ροή εργασίας σας