1 Haziran 2020 Pazartesi

Guid Sınıfı

Giriş
Not : Bu sınıfın Java'daki karşılığı UIID Sınıfı

Bilgi Notu
Windows'ta UUID yerine GUID (Globally Unique Identifier) kelimesi kullanılıyor. Ancak ben bu yazıda UUID kelimesini kullanacağım.

UUID'ler de bir çeşit random sayı üreteci sayılabilir. Bir UUID 36 karakter uzunluğundadır. Geleneksel gösteriminde 8-4-4-4-12 şeklinde gruplanır. 32 alfanümerik karaketer + 4 tane çizgi ile toplam 36 karakter eder. UUID şöyledir.
D00077B4-EBFB-4BD8-9E3F-1F3943CBCE35
UUID 128 bit veri saklar. String hali 32 karakter ile temsil edilir. Her karakter 0x0 - 0xF (4 bit)
arasında bir rakamdır.

Çakışma/Collision
UUID çok hızlı üretilirse küçük bir olasılıkla da olsa çakışma olabilir yani aynı değer elde edilebilir.
Açıklaması şöyle.
128-bits is big enough and the generation algorithm is unique enough that if 1,000,000,000 GUIDs per second were generated for 1 year the probability of a duplicate would be only 50%. Or if every human on Earth generated 600,000,000 GUIDs there would only be a 50% probability of a duplicate.

Veritabanı
Açıklaması şöyle.
GUIDs are central to how Microsoft envisioned database clustering to work, and if you need to incorporate data from sometimes connected sources, they really help prevent data collisions.

Some Pro-GUID Facts:
  • GUIDs prevent key collisions
  • Row IDs in SQL Server are GUIDs, so you are using them even if you don't think you are
  • GUIDs help with merging data between networks, machines, etc.
Some Ugliness with GUIDs
  • They are big, 16 bytes each
  • They are out of order, so you can't sort on ID and hope to get the insertion order like you can on auto-increment ids
  • They are more cumbersome to work with, particularly on small data sets (like look up tables)
  • The new GUID implementation is more robust on SQL Server than it is in the C# library.
Constructor - byte []
16 byte uzunluğunda bir diziyi girdi olarak veririz.
byte[] bytes = new byte[16] = ...;
Guid guid = new Guid (bytes);
Şöyle yaparız.
var guid = new Guid(
  SHA256.Create()
    .ComputeHash(Encoding.UTF8.GetBytes("70c3bdc5ceeac673")).Take(16).ToArray());
Empty Alanı
Şöyle yaparız.
Guid id = Guid.Empty;
NewGuid metodu
Şöyle yaparız.
string userId = Guid.NewGuid().ToString();
ToString metodu
Şöyle yaparız.
var newGuid = Guid.NewGuid();
Console.WriteLine(newGuid.ToString());
Döndürdüğü string'in boyutunu küçültmek için şöyle yaparız.
var newGuid = Guid.NewGuid();
var messageID = Convert.ToBase64String(newGuid.ToByteArray());

Hiç yorum yok:

Yorum Gönder