Cerințe: Când se utilizează GUID-uri ca indici principali de agregare a cheilor, se recomandă utilizarea GUID-urilor ordonate, deoarece GUID-urile neordonate vor duce la risipă de spațiu și la scăderea eficienței citirii și scrierii.
Recenzie:
Valoarea GUID a bazei de date
Tipurile de date cu Identificator Unic Global (GUID) în SQL Server sunt reprezentate prin tipuri de dateUnicidentificator, care stochează o valoare binară de 16 octeți. Un GUID este un număr binar al cărui scop principal este ca un identificator care trebuie să fie unic într-o rețea cu multe calculatoare pe mai multe locații.
Atât GUID, cât și SqlGuid au metode de a compara valori GUID diferite. Implementarea SqlGuid folosește comportamentul SQL Server,Ultimii șase octeți ai valorii sunt cei mai importanți。
GUID-urile secvențiale sunt în mod inerent ghicibile, așa că nu le folosi în contexte sensibile la securitate。
Referință:Autentificarea cu hyperlink este vizibilă.
Baza de date este ordonată de GUID
Baza de date SQL Server are unulNewSequentialId()funcția de a crea un GUID ordonat. Când creezi un tabel, îl poți seta ca valoare implicită a unui câmp de tip GUID și poți crea automat valoarea cheii principale la inserarea de date noi (această funcție poate fi folosită doar ca valoare implicită a câmpului, nu apelată direct în SQL).
Exemplu:
Funcția NewSequentialId() poate fi folosită doar în baze de date, deși documentația MSDN a Microsoft afirmă că NEWSEQUENTIALID este un wrapper pentru funcția Windows UuidCreateSequential.
Sfat: Nu folosi funcția dacă este o problemă de confidențialitate. FiindcăEste posibil să ghicești valoarea următorului GUID generatpentru a accesa datele asociate acelui GUID.
Referință:Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
.NET creează un GUID ordonat
Funcția UuidCreateSequential depinde de hardware-ul de calcul al metodeiUltimii 12 biți sunt de fapt adresa MAC a plăcii de rețea。
Codul este următorul:
Rezultatele sunt următoarele:
Neajuns:
- Această metodă necesită DllImport pentru a chema biblioteca Windows, deci nu este cross-platform.
- Nu poate fi folosit într-un mediu clusterizat, unde mai multe mașini scriu în aceeași bază de date, deoarece GUID-urile rezultate vor fi diferite între ele (hardware de calcul dependent de funcție), ceea ce duce la fragmentarea indicilor.
- Dacă serverul tău Windows se repornește, GUID-ul poate începe dintr-un interval mai mic, ceea ce duce la fragmentarea indexului.
Referință:
Autentificarea cu hyperlink este vizibilă.
Autentificarea cu hyperlink este vizibilă.
Dacă folosești un program .NET pentru a crea un GUID ordonat de SQL SERVER, este recomandat să folosești o bibliotecă de clase terță:RT. Pieptene, comanda nuget este următoarea:
Codul este următorul:
Ieşire:
Referință:Autentificarea cu hyperlink este vizibilă.
Fragmente ordonate și neordonate ale indexului cheie primară GUID
Începe prin a crea două tabele cu următorul script:
Testul introduce 100.000 de date și codul este următorul:
Rezultatele testelor sunt următoarele:
| GUID | Timp consumat (ms) | Densitatea scanării [Cel mai bun numărător: Numărătoarea reală], cu cât valoarea este mai mare, cu atât mai bună | Fragmentarea prin scanare logică, cu cât valoarea este mai mică, cu atât mai bună | Densitatea medie a paginilor (completă) (Medie: Densitatea paginilor (completă), cu cât valoarea este mai mare, cu atât mai bună | | GUID neordonat | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | Ordina GUID | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Testul inserează din nou 1 milion de bucăți de date, cu un GUID în afara ordinii care durează 135203 ms și un GUID ordonat care durează 135134 ms. Ocuparea spațiului de depozitare este următoarea:
GHID neordonat: 36,547 MB GHID comandat: 26,609 MB
Referință:Autentificarea cu hyperlink este vizibilă.
(Sfârșit)
|