SORU
15 NİSAN 2010, PERŞEMBE


Nasıl Deterministik bir GUID Oluşturmak için

Bizim uygulama Guıd değeri olan bir öznitelik Xml dosyalarını oluşturuyoruz. Bu değer, dosya yükseltmeleri arasında tutarlı olması gerekli. Eğer öyleyse bu dosya, diğer her şey değişirse bile, öznitelik için guıd değeri aynı kalır.

Bir bariz çözüm dosya adını ve GUID ile statik bir sözlük oluşturmak için kullanılırdı. Dosya oluşturmak zaman, dosya adı için sözlüğe bakmak ve karşılık gelen guıd kullanın. Ama bu dosyalar 100 ölçek olabilir, çünkü mümkün değildir ve GUID büyük bir listesini tutmak istemedi.

Başka bir yaklaşım Guıd aynı yapmak için dosya yolu dayanıyordu. Dosya yolları ve uygulama dizin yapısı bizim farklı olduğu için bu kilitli olan yol için benzersiz olmalıdır. Her zaman yükseltme o zaman koşarız, dosya aynı guıd Yolu üzerinde temel alır. Bu tür oluşturmak için güzel bir yol buldum 'Deterministic Guids (Teşekkürler Elton Stoneman)'. Temelde bu

private Guid GetDeterministicGuid(string input) 

{ 

//use MD5 hash to get a 16-byte hash of the string: 

MD5CryptoServiceProvider provider = new MD5CryptoServiceProvider(); 

byte[] inputBytes = Encoding.Default.GetBytes(input); 

byte[] hashBytes = provider.ComputeHash(inputBytes); 

//generate a guid from the hash: 

Guid hashGuid = new Guid(hashBytes); 

return hashGuid; 

} 

Bu yüzden bir dize verilen bu kilitli her zaman aynı olacaktır.

Başka yaklaşımlar ya da bunu yapmak için önerilen yolu vardır? Bu yöntemin artıları veya eksileri nelerdir?

CEVAP
14 NİSAN 2011, PERŞEMBE


@Tarafından belirtildiği gibi bacar, RFC 4122 §4.3 isme dayalı bir UUID oluşturmak için bir yol tanımlar. Avantaj yapıyor (sadece kullanarak bir MD5 hash) bunlar garanti değil çarpışır olmayan adlı tabanlı olacak biçimde ve çok çok küçük bir ihtimal çarpışma ile diğer isme dayalı olacak biçimde.

Bu yerel destek var .NET bu oluşturmak için bir Çerçeve, ancak algoritma uygulayan code on GitHub yayınlanmıştır. Aşağıdaki gibi kullanılabilir

Guid guid = GuidUtility.Create(GuidUtility.UrlNamespace, filePath);

Diğer bir GUID ile çarpışma riskini daha da azaltmak için, Ad KİMLİĞİ olarak kullanmak için özel bir GUID (yerine URL ad ID RFC tanımlı kullanarak) oluşturabilirsiniz.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • alexis gillis

    alexis gilli

    23 HAZİRAN 2011
  • FOSDEM

    FOSDEM

    13 Ocak 2009
  • MrSuicideSheep

    MrSuicideShe

    9 NİSAN 2010