Wednesday, February 17, 2016

GUID (Evrensel Eşsiz Tanımlayıcı Nedir) - What is GUID (Globally Unique Identifier) or UUID (Universally Unique Identifier)?

GUID (Globally Unique Identifier) X.667 dökümanında tanımlı, genellikle nesneler için eşsiz tanımlayıcılar kullanılması gerektiği durumlarda tanımlayıcı olarak kullanılan ikili bir sayıdır. UUID (Universally Unique Identifier) ve GUID aynı şeyi ifade etmektedir.

Otomatik artırılan sayılar tablo içinde PK (Primary Key) olarak kullanıldığında tablo içindeki eşsizliği garanti ederken tablolar arasındaki eşsizliği sağlayamaz. Yani 1 değeri Personel tablosunda Ali'yi tanımlarken aynı 1 değeri Şehir tablosunda Ankara'yı belirtebilir. Ayrıca otomatik sayıların kullanılması bir yönetim maliyeti ortaya çıkarır.

GUID'ler yapısı gereği teoride genel olarak eşsizlik sunarlar. Yani bir veritabanı nesnesine atanan GUID sadece o nesnenin tanımlayıcısı olmakta ve veri tabanında başka bir eşi olmamaktadır. Bu durum insanlardaki parmak izinin sağladığı eşsizlikle de benzerdir.

GUID 128 bit (16 oktet - 16 byte) ikili bir sayı olarak tanımlanmaktadır.  Ayrıca GUID URN (Uniform Resource Name) olarak hexadecimal formatta string olarak da aşağıdaki gibi ifade edilebilmektedir.

f81d4fae-7dec-11d0-a765-00a0c91e6bf6

GUID tanımı hexadecimal sayılardan oluştuğu için sadece aşağıdaki karakterleri içerebilmektedir:

A B C D E F a b c d e f 0 1 2 3 4 5 6 7 8 9

GUID aşağıdaki alanlardan oluşmaktadır:

a) "TimeLow" Alanı: 4 oktet;
b) "TimeMid" Alanı: 2 oktet;
c) "VersionAndTimeHigh" Alanı: 2 oktet;
d) "VariantAndClockSeqHigh" Alanı: 2 oktet;
e) "ClockSeqLow" Alanı: 1 oktet;
f) "Node" Alanı: 6 oktet.

Bu alanlar GUID oluşturulurken GUID içinde aşağıda gösterilen formatta yerleştirilmektedir.

 

Node alanı görüldüğü üzere 6 sekizliden yani 48 bitten oluşmaktadır. Genellikle Node olarak MAC (Media Access Control) adresi kullanılmaktadır. Bilindiği üzere MAC adresleri teoride Dünya geneli eşsizlik sağlamaktadır. Genel eşsizlik MAC üzerinden sağlanırken aynı makinenin oluşturduğu sayılar arasındaki eşsizlik ise zaman ve ClockSeq alanları kullanılarak sağlanmaktadır.

GUID içinde yer alan zaman alanı bir başlangıç noktasından itibaren (15 Ekim 1582) 100 nanosaniye aralıklı sayılan şimdiki zamanı ifade etmektedir. Bu değer .NET framework içince "Tick" olarak adlandırılmaktadır.

ClockSeq alanı GUID'lerin birbiriyle çok yakın zamanda oluşturulması, makine zamanının geriye alınması veya node değerinin değişmesi durumunda eşsizliğin sürdürülebilmesi amacıyla kullanılmaktadır. Bu değer eğer makine içinde sıralı tutuluyorsa sıradaki sayı, eğer tutulmuyorsa rastgele bir sayı olarak kullanılabilmektedir.

Versiyon alanı GUID çeşidini belirtmektedir. GUID'ler aşağıdaki versiyonlarda olabilmektedir.

* Zaman Tabanlı
* İsim Tabanlı
* Rastgele Sayı Tabanlı

GUID alanlarının hangi oktetlerde olduğu aşağıdaki tabloda gösterilmektedir:




C# kullanılarak GUID'ler aşağıdaki kod ile oluşturulabilmektedir:

Guid g = Guid.NewGuid()

No comments:

Post a Comment