Biz insanları dünya üzerinde benzersiz yapan (Globally Unique) şeyler vardır, örneğin parmak izi. Parmak izimiz bizim kimliğimizdir (IDentifier). Peki sıradan bir örnek vereyim: Aynı marka, aynı model bir aracın yine aynı marka ve aynı model bir araçtan ayıran şey şasi numarasıdır değil mi?. Peki son olarak cep telefonu kimliğiniz yani IMEI numarası desem. GUID mantığına güzel bir örnektir IMEI, zaten anlamı International Mobile Equipment Identity‘dir, benzersizdir.
GUID Nedir?
GUID’in orjinal açılımı “Globally Unique IDentifier” dır. Türkçe kaynaklarda çevirisi “Genel Benzersiz Tanımlayıcı” olarak tanımlanmıştır ama ben bu çeviriyi pek doyurucu bulmadım çünkü GUID yapısı size küresel anlamda bir benzersizlik vaad eder. Açılımındaki “globally” kelimesi de zaten “küresel” demektir. GUID’e “Küresel Benzersiz Kimlik(Tanımlayıcı)” demek daha uygun olacaktır. Unutmadan, GUID yapısını Intelfirması bulmuştur.
GUID’in Yapısı
GUID’ler üretildikleri sistemlerin MAC adresi, gün, ay, yıl, saat gibi değerlerini ve sistemin active directory’deki donanım bilgilerini de kullanarak 128 Bitlik (16- Bytelık) veriler olarak oluşturulup saklanır; genellikle 32 basamaklı olarak, 16’lık sayı sistemine göre (hexadecimal) ve belirli dijitler (sayı grupları) halinde görüntülenir. Örneğin : 21EC2020-3AEA-1069-A2DD-08002B30309D
GUID benzersizlik konusunda kendine fazlaca güvenir şöyle ki “dünyanın neresinde, kim, ne zaman oluşturursa oluştursun” benzersizdir.
Yazılım Dünyasında Nerede Kullanılır?
— Veritabanı Uygulamalarında GUID Kullanımı:
Bir veritabanı oluşturuyorsunuz ve tablolardaki ID’lerin de birbirleriyle benzersiz olmasını istiyorsunuz. Örneğin: Uyeler adlı tablodaki UyeId ile Siparisler adlı tablodaki SiparisId’sinin dahi aynı olmasını istemiyorsanız, bu durumda imdadınıza GUID yapısı yetişecektir. Aşağıdaki ekran görüntüsünde küçük ve orta ölçekli ASP.NET projelerinde fazlaca kullanılan Membership uygulamasında ID’lerin oluşturulmasında GUID kullanıldığını görüyoruz.
Veritabanında GUID kullanımının dezavantajı var mı?
Evet var. Veritabanı kayıtlarının fazla olmadığı küçük ve orta ölçekli projelerde etkilenmesenizde, büyük çaplı projelerde ve kayıtların yüzbinlerle veya milyonlarla ifade edildiği veritabanlarında Primary Key olarak GUID kullanımına dikkat edilmeli ve alternatiflerin olduğu, riskin olmadığı durumlarda Primary Key olarak GUID kullanmamaya özen gösterilmeli çünkü veritabanı indexlemede index yapısının hızını keseceğinden bu durum size ciddi bir performans kaybı olarak geri dönecektir. Burada dikkat edilmesi gereken GUID’in gereksiz yere Primary Key olarak kullanılmamasıdır.
— Web Tabanlı Projelerde GUID Kullanımı:
Web tabanlı projelerde GUID kullanımı daha fazla yer bulabiliyor, bu kullanım bazı yerler için neredeyse zorunlu bazı yerler içinse tercihinize bağlıdır. Bir kaç örnek vermem gerekirse:
Örnek 1:
Web sitenizde üyeler resim yüklüyor varsayalım. Resimler belirli bir dizinde saklanıyor ve veritabanında URL yolu (Path) tutuluyor. X kişisi abc.jpg adlı resim dosyasını sisteme yükledi, ardından Y kişisi de aynı ada ve uzantıya sahip abc.jpg resim dosyasını yükledi. Geçmiş olsun. Ortaya çıkacak sorunları konuşmaya gerek yok sanırım. 🙂 Bu durumu engellemek için kullanıcıların yüklediği resimlerin adlarına otomatik olarak bir GUID değeri atarsak bu sorundan kurtuluruz.
Örnek 2:
Üyelik sisteminiz var ve her bir üyeye benzersiz ID’ler vermek istiyorsunuz. Tabi bu zor bir durum değil bir çok yöntemle farklı ID atayabilirsiniz ama GUID kullanımı bu durum içinde hızlı bir çözüm sunar. Örneğin: Second Life adlı online oyun. Second Life’da her bir üyenin sistemdeki kayıtlı kimliği için GUID yapısı kullanılmış.