md5 Algoritması nedir? Hash fonksiyonları nedir? Hash join nasıl kullanılır?
md5 algoritması nedir? Hash join nedir?
md5 algoritması wikipedia’nın açıklaması ile “ Girilen verinin boyutundan bağımsız olarak, 128-bit özet değeri üretir. MD5 ilk olarak kriptografik özet fonksiyonu olarak tasarlanmış olmasına rağmen geniş çaplı güvenlik açıkları tespit edilmiştir.” Bugün size kriptografik yönüyle değil de hash join kullanımı ile ilgili bilgilendireceğim. md5'in açılımı Message-Digest algorithm 5'dir. md5, 32 hexadecimal sayıdan oluşan 128bit bir yapı ile ifade edilir(1 hexadecimal 4 bayt). md5 algoritması hash join yaparken kullanılabilir. Google Cloud Platform Standart SQL yapısında Hash fonksiyonları olarak MD5, SHA-1, SHA-256, SHA-512 algoritmalarını kullanır. Bu yazıdaki amacım GCP’de karşıma çıkan bu yapının temel olarak ne anlama geldiğini paylaşmaktır. MD5 algoritmasını açıklamaya çalıştım şimdi hash fonksiyonunu ve hash joini anlatıp yazımı sonlandıracağım.
Hash joine girmeden önce hash fonksiyonundan biraz bahsedelim. Hash fonksiyonu girdileri, matematiksel fonksiyonlar vasıtasıyla sabit uzunlukta saklamak için kullanılabilir. Bu değerler unique olarak tutulur. Burdaki amaç çok sayıda farklı girdileri belirli bir yapıya sokup diyelimki bu yapı tablo olsun, daha sonrasında bu tablo üzerinde sorgu(query) işlemlerini daha verimli hale getirir. Hash fonksiyonları, veritabanında genellikle tabloda aranan bir veriyi hızlı bir şekilde bulmak veya veri karşılaştırma işlemlerini hızlandırmak, büyük bir dosyada veya tabloda aynı veya benzer kayıtları tespit etmek gibi işlemler için kullanılır.
Hash join, iki girdi arasındaki eşleşen satırları bulmak için bir hash table’ın kullanıldığı join yapabilmenin bir yoludur. build ve probe olmak üzere 2 aşamada gerçekleşir. build aşamasında küçük olan veri seti için bir hash table oluşturulur. probe aşamasında ise diğer setteki her kayıt hashlenerek daha önce oluşturalan hash table ile joinlenir. Küçük olan veri setinin kullanılma nedeni in-memory’de depolayabilmektir. Eğer in-memory’e sığmaz da bellekte(diskte) saklamaya başlarsak bu table üzerinde yapacağımız sorguların süresi uzayacak yani verimi düşecektir. Bundan dolayı hash fonksiyon kullanmamızın bir anlamı olmayacaktır. Bu, verinin tüm yapı girdisini in-memory’de depolayabildiği zaman çok iyi-verimli çalışır.