Gereksinimler: GUID'ler birincil anahtar toplama indeksleri olarak kullanılırken, sıralanmamış GUID'ler alan israfına ve okuma ile yazma verimliliğinin düşmesine yol açacağı için sıralı GUID'lerin kullanılması önerilir.
Eleştiri:
Veritabanı GUID değeri
SQL Server'daki Küresel Benzersiz Tanımlayıcı (GUID) veri tipleri veri tipleriyle temsil ediliruniqueidentifier, bu da 16 baytlık ikili değer depolar. GUID, ana amacı birçok sayıda bilgisayarın bulunduğu bir ağda benzersiz olması gereken bir tanımlayıcı olarak tanımlanan ikili bir sayıdır.
Hem Guid hem de SqlGuid, farklı GUID değerlerini karşılaştırma yolları sunuyor. SqlGuid uygulaması SQL Server davranışını kullanır,Değerin son altı baytı en önemlisidir。
Ardışık GUID'ler doğası gereği tahmin edilebilir, bu yüzden güvenlik açısından hassas bağlamlarda kullanmayın。
Referans:Bağlantı girişi görünür.
Veritabanı GUID tarafından sıralanır
SQL Server veritabanında bir tane vardırNewSequentialId()işlevi için düzenlenmiş bir GUID oluşturabilir. Bir tablo oluştururken, bunu bir GUID tür alanının varsayılan değeri olarak ayarlayabilir ve yeni veri eklendiğinde otomatik olarak birincil anahtarın değerini oluşturabilirsiniz (bu fonksiyon yalnızca alanın varsayılan değeri olarak kullanılabilir, SQL'de doğrudan çağrılmaz).
Örnek:
NewSequentialId() fonksiyonu yalnızca veritabanlarında kullanılabilir, ancak Microsoft'un MSDN dokümantasyonu NEWSEQUENTIALID'in Windows UuidCreateSequential fonksiyonu için bir wrapper olduğunu belirtir.
İpucu: Gizlilik meselesiyse bu fonksiyonu kullanma. ÇünküBir sonraki oluşturulan GUID'nin değerini tahmin etmek mümkündüro GUID ile ilişkili verilere erişmek için.
Referans:Bağlantı girişi görünür.
Bağlantı girişi görünür.
.NET, sıralı bir GUID oluşturur
UuidCreateSequential fonksiyonu, yöntemin hesaplama donanımına bağlıdırSon 12 bit aslında ağ kartının MAC adresidir。
Kod şöyledir:
Sonuçlar şu şekildedir:
Eksiklik:
- Bu yöntem, Windows kütüphanesini çağırmak için DllImport'u gerektirir, bu yüzden platformlar arası değildir.
- Aynı veritabanına birden fazla makinenin yazdığı kümelenmiş ortamda kullanılamaz; çünkü ortaya çıkan GUID'ler birbirinden farklı olur (fonksiyona bağlı hesaplama donanımı), bu da indeks parçalanmasına yol açar.
- Windows sunucunuz yeniden başlatılırsa, GUID daha düşük bir aralıkta başlayabilir ve bu da indeks parçalanmasına yol açabilir.
Referans:
Bağlantı girişi görünür.
Bağlantı girişi görünür.
Eğer .NET programı kullanarak SQL SERVER sıralı bir GUID oluşturuyorsanız, üçüncü taraf sınıf kütüphanesi kullanmanız önerilir:RT. Tarak, nuget komutu şöyledir:
Kod şöyledir:
Çıktı:
Referans:Bağlantı girişi görünür.
Sıralı ve sıralanmamış GUID birincil anahtar indeks parçaları
Aşağıdaki betikle iki tablo oluşturarak başlayın:
Test 100.000 veri parçası ekler ve kod şu şekildedir:
Test sonuçları aşağıdaki gibidir:
| GUID | Tüketilen Zaman (MS) | Tarama Yoğunluğu [En İyi Sayı: Gerçek Sayı], değer ne kadar yüksekse o kadar iyi | Mantıksal Tarama Parçalanması, değer ne kadar düşükse, o kadar iyi | Ortalama sayfa yoğunluğu (tam) (Ortala. Sayfa yoğunluğu (dolu), değer ne kadar yüksekse, o kadar iyi | | Düzenlenmemiş GUID | 13367 | 12.58% [61:485] | 98.97% | 63.66% | | GUID siparişi | 14139 | 100.00% [39:39] | 0.32% | 99.61% |
Test tekrar 1 milyon veri parçası ekliyor; sırasız bir GUID 135203 ms alırken, belirlenmiş bir GUID 135134 ms alıyor. Depolama alanı doluluğu aşağıdaki gibidir:
Sıralanmamış GUID: 36.547 MB Sipariş edilen GUID: 26.609 MB
Referans:Bağlantı girişi görünür.
(Son)
|