Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 3914|Απάντηση: 3

[Πηγή] [MSSQL] Ο SQL SERVER παρήγγειλε GUID και μη ταξινομημένα GUID ως δοκιμές ευρετηρίου συνάθροισης πρωτεύοντος κλειδιού

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 8/6/2023 9:12:26 μ.μ. | | | |
Απαιτήσεις: Όταν χρησιμοποιείτε GUID ως ευρετήρια συνάθροισης πρωτεύοντος κλειδιού, συνιστάται η χρήση παραγγελθέντων GUID, επειδή τα μη ταξινομημένα GUID θα προκαλέσουν σπατάλη χώρου και την επακόλουθη μείωση της απόδοσης ανάγνωσης και εγγραφής.

Αναθεώρηση:

Κατακερματισμός ευρετηρίου βελτιστοποιημένης απόδοσης του SQL Server
https://www.itsvse.com/thread-9508-1-1.html

[Turn] (MSSQL) Βάση δεδομένων SQL Server int και guid για σύγκριση πρωτεύοντος κλειδιού
https://www.itsvse.com/thread-10605-1-1.html

Τιμή GUID βάσης δεδομένων

Οι τύποι δεδομένων καθολικά μοναδικού αναγνωριστικού (GUID) στον SQL Server αντιπροσωπεύονται από τύπους δεδομένωνμοναδικό αναγνωριστικό, το οποίο αποθηκεύει μια δυαδική τιμή 16 byte. Το GUID είναι ένας δυαδικός αριθμός του οποίου ο κύριος σκοπός είναι ως αναγνωριστικό που πρέπει να είναι μοναδικό σε ένα δίκτυο με πολλούς υπολογιστές σε πολλές τοποθεσίες.

Τόσο το Guid όσο και το SqlGuid έχουν τρόπους σύγκρισης διαφορετικών τιμών GUID. Η υλοποίηση SqlGuid χρησιμοποιεί συμπεριφορά SQL Server,Τα τελευταία έξι byte της τιμής είναι τα πιο σημαντικά

Τα διαδοχικά GUID είναι εγγενώς μαντέψιμα, επομένως μην τα χρησιμοποιείτε σε περιβάλλοντα ευαίσθητα στην ασφάλεια

Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Η βάση δεδομένων ταξινομείται από το GUID

Η βάση δεδομένων του SQL Server έχει έναΝέοSequentialId()για να δημιουργήσετε ένα διατεταγμένο GUID. Κατά τη δημιουργία ενός πίνακα, μπορείτε να τον ορίσετε ως την προεπιλεγμένη τιμή ενός πεδίου τύπου GUID και να δημιουργήσετε αυτόματα την τιμή του πρωτεύοντος κλειδιού κατά την εισαγωγή νέων δεδομένων (αυτή η συνάρτηση μπορεί να χρησιμοποιηθεί μόνο ως προεπιλεγμένη τιμή του πεδίου, όχι απευθείας στην SQL).

Παράδειγμα:

Η συνάρτηση NewSequentialId() μπορεί να χρησιμοποιηθεί μόνο σε βάσεις δεδομένων, αν και η τεκμηρίωση MSDN της Microsoft αναφέρει ότι το NEWSEQUENTIALID είναι ένα περιτύλιγμα για τη συνάρτηση UuidCreateSequential των Windows.

Συμβουλή: Μην χρησιμοποιείτε τη λειτουργία εάν πρόκειται για ζήτημα εμπιστευτικότητας. ΕπειδήΕίναι δυνατό να μαντέψετε την τιμή του επόμενου GUID που δημιουργείταιγια να αποκτήσετε πρόσβαση στα δεδομένα που σχετίζονται με αυτό το GUID.

Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Το .NET δημιουργεί ένα ταξινομημένο GUID

Η συνάρτηση UuidCreateSequential εξαρτάται από το υπολογιστικό υλικό της μεθόδουΤα τελευταία 12 bit είναι στην πραγματικότητα η διεύθυνση MAC της κάρτας δικτύου

Ο κωδικός έχει ως εξής:

Τα αποτελέσματα έχουν ως εξής:



Έλλειψη:

  • Αυτή η μέθοδος απαιτεί από το DllImport να καλεί τη βιβλιοθήκη των Windows, επομένως δεν είναι cross-platform.
  • Δεν μπορεί να χρησιμοποιηθεί σε περιβάλλον συμπλέγματος, όπου πολλά μηχανήματα γράφουν στην ίδια βάση δεδομένων, επειδή τα προκύπτοντα GUID θα είναι διαφορετικά μεταξύ τους (υπολογιστικό υλικό που εξαρτάται από τη λειτουργία), με αποτέλεσμα τον κατακερματισμό του ευρετηρίου.
  • Εάν ο διακομιστής των Windows επανεκκινηθεί, το GUID μπορεί να ξεκινήσει σε χαμηλότερο εύρος, με αποτέλεσμα τον κατακερματισμό του ευρετηρίου.

Αναφορά:

Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Εάν χρησιμοποιείτε ένα πρόγραμμα .NET για να δημιουργήσετε ένα SQL SERVER παραγγελθέν GUID, συνιστάται να χρησιμοποιήσετε μια βιβλιοθήκη κλάσεων άλλου κατασκευαστή:RT. Χτένα, η εντολή nuget έχει ως εξής:


Ο κωδικός έχει ως εξής:

Απόδοση:



Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.

Ταξινομημένα και μη ταξινομημένα τμήματα ευρετηρίου πρωτεύοντος κλειδιού GUID

Ξεκινήστε δημιουργώντας δύο πίνακες με το ακόλουθο σενάριο:

Το τεστ εισάγει 100,000 κομμάτια δεδομένων και ο κώδικας έχει ως εξής:

Τα αποτελέσματα των δοκιμών είναι τα εξής:

GUIDΧρόνος που καταναλώνεται (ms)Πυκνότητα σάρωσης [Best Count: Actual Count], όσο υψηλότερη είναι η τιμή, τόσο το καλύτεροΚατακερματισμός λογικής σάρωσης, όσο χαμηλότερη είναι η τιμή, τόσο το καλύτεροΜέση πυκνότητα σελίδων (πλήρης) (Μ.Ο. Πυκνότητα σελίδας (πλήρης), όσο μεγαλύτερη είναι η τιμή, τόσο το καλύτερο
Μη ταξινομημένο GUID 1336712.58% [61:485]98.97%63.66%
GUID παραγγελίας 14139100.00% [39:39]0.32%99.61%





Η δοκιμή εισάγει ξανά 1 εκατομμύριο κομμάτια δεδομένων, με ένα GUID εκτός σειράς να λαμβάνει 135203 ms και ένα ταξινομημένο GUID να λαμβάνει 135134 ms. Η πληρότητα του αποθηκευτικού χώρου έχει ως εξής:

Μη ταξινομημένο GUID: 36.547 MB
GUID παραγγελίας: 26.609 MB



Αναφορά:Η σύνδεση με υπερσύνδεσμο είναι ορατή.


(Τέλος)




Προηγούμενος:Πρόγραμμα .NET Core πολύγλωσσα αρχεία πόρων ανάγνωσης και εγγραφής (.resx)
Επόμενος:.NET/C# Βελτιστοποίηση μνήμης αρχείων δίσκου ανάγνωσης ροής
 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 27/1/2024 11:07:12 π.μ. |
Το ABP δημιουργεί ένα διατεταγμένο GUID για τη βάση δεδομένων του sql server, ο πηγαίος κώδικας είναι ο εξής:



 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 24/3/2024 11:43:45 π.μ. |
Το EF Core δημιουργεί έναν παραγγελθέντα κωδικό GUID:





Η σύνδεση με υπερσύνδεσμο είναι ορατή.

 Σπιτονοικοκύρης| Δημοσιεύτηκε στις 11/4/2024 3:00:11 μ.μ. |
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com