Anahtar-Değer (Key-Value) Veri Tabanları
Bilgi çağında, verilerin hızlı ve güvenilir bir şekilde işlenmesi ve saklanması giderek daha da önemli hale geliyor. İşte tam da bu noktada, anahtar-değer (key-value) veri tabanları sahneye giriyor ve bize verilerimizi organize etme ve erişme konusunda büyük bir kolaylık sağlıyor.
Bu yazımda NoSQL veri tabanı türlerinden biri olan anahtar-değer veri tabanı sistemlerinin temel kavramlarını, çalışma prensibini, kullanım alanlarını ve popüler anahtar-değer veri tabanlarından kısaca bahsettim.
Anahtar-değer veri tabanından bahsetmeden önce kısaca ilişkisiz veri modelinden bahsedelim.
İlişkisiz (NoSQL) Veri Modeli Nedir?
İlişkisiz veri modeli, geçmişten bu yana halen kullanılan ilişkisel veri tabanlarından farklı olarak esnek ve dağıtık veri saklama yöntemlerini ifade etmektedir. NoSQL anlam olarak “SQL’e hayır” anlamında değil, “Not Only SQL- Sadece Sql Değil” anlamına gelmektedir. Bu tanım SQL’e karşı çıkmak veya reddetme anlamının aksine, ilişkisel veri tabanının sınırlamalarından kaçınmak istemenin sonucunda ortaya çıkmıştır. Genellikle büyük veri kümelerini ve yüksek performanslı uygulamaları desteklemek amacıyla tasarlanmıştır. Sürekli değişen ve karmaşık hale gelen veri yapılarına sahip uygulamalar için uygundur. Bu veri tabanları ilişkisel şema ve ACID (Atomicity, Consistency, Isolation, Durability) özelliklerine bağlı kalmadan tasarlanabilir. Tam olarak ilişkisel veri tabanları alternatifi değildir.
Anahtar-Değer Veri Tabanları Nedir?
Anahtar-değer veri tabanı, verilerin anahtar-değer çiftleri olarak saklandığı bir NoSQL veri tabanı türüdür. Temel olarak çalışma prensibi veri tabanında tutulacak her bir değerin (value), benzersiz bir anahtarla (key) ilişkilendirilmesidir. Bir Anahtar-değer veri tabanı genellikle hafızaya dayalı (in-memory) veri depolama sistemleri olarak tasarlanır ve yüksek performanslı veri erişimi sağlar. Yaygın bir kullanım alanı, kullanıcı bilgilerinin saklandığı durumlardır; burada kullanıcı ID’si anahtar olarak, kullanıcı verisi ise değer olarak kullanılabilir. Anahtar-değer veri tabanları yüksek performanslı okuma ve yazma işlemleri için optimize edilmiştir ve büyük veri kümelerini işlemek için kullanılabilmektedir. Günümüzde kullanılan en popüler anahtar-değer veri tabanları Redis, Memcached, Riak, Amazon DynomaDB, Cassandra’dır.
Temel Kavramlar
Anahtar (Key) Nedir?
Anahtar (Key), bir anahtar-değer veri tabanında veriye erişim için kullanılan benzersiz bir tanımlayıcıdır. Genellikle bir string (dize) veya sayı olarak tanımlanır. Her bir değer için özel bir anahtar ilişkilendirilir. İlişkilendirilmiş değere hızlı ve doğrudan erişim sağlanır. Her bir anahtarın bir adet değeri bulunabilir, bir anahtara iki adet değer tanımlanamaz.
Değer (Value) Nedir?
Değer, bir anahtar-değer veri tabanında anahtar ile erişilebilen, tutulan verinin kendisidir. String, integer, dizi ve nesne gibi çeşitli veri türleri olarak tanımlanabilir. Her bir değerin sadece bir adet anahtarı bulunablir. Bir değere iki anahtar tanımlanamaz.
Anahtar-Değer Veri Tabanı VS İlişkisel Veri Tabanı
Yapılan bir araştırma ile anahtar-değer database türü olan Redis ile ilişkisel veri tabanı olan MariaDB’nin karşılaştırılması sonucunda; Redis insert, delete ve belirli durumlar ile oluşturulan update sorgularında daha iyi çalışma süresi performansı aldığı görülmüştür. Bu fark da Redis’in esnek olması, sabit bir şemaya sahip olmaması ve basit bir kullanımı olmasıyla, MariaDB gibi ilişkisel veri tabanının veri modelinin daha karmaşık olması sonucunda gözlemlenmiştir. Fakat bu sonuç ilişkisel veri tabanları yerine doğrudan NoSQL veri tabanları kullanılması gerektiği anlamına gelmemektedir. Öte yandan anahtar-değer veri tabanlarının, geniş verilerde uygulanan düzenli sorgulama ve güncelleme gibi dezavantajları bulunması sebebiyle veri tabanı sistemlerinin performansını artırmak için Redis gibi anahtar-değer veri tabanları bir ara katman olarak geçici bir veri tabanı formunda kullanılması daha faydalı olacaktır.
Anahtar-Değer Veri Tabanları Kullanım Senaryoları
Anahtar-değer veri tabanları uygulamanın özel gereksinimleri karşılamak için kullanabilir. Aşağıda örnek olarak bazı kullanım senaryoları bulunmaktadır.
Oturum Yönetimi
Oturum odaklı bir sistemde kullanıcının oturumu başlatmasından, kapatmasına kadar veya oturum zaman aşımına uğrayana kadar uygulamanın aktif kalması gerekmektedir. Bu süre içerisinde kullanıcı oturum verileri, profil bilgileri, mesajlar, kişiselleştirilmiş veriler ve temalar gibi bilgilerin tutulması ve son kullanıcıya hızlıca sunulması için bir anahtar-değer sistem kullanılabilir. Her oturumun özgün bir anahtarı bulunur ve oturum verileri bu anahtar dışında başka hiçbir bilgi ile sorgulanamaz. Böylece hızlı bir anahtar-değer veri tabanı oturum verileri için uygun bir seçenek haline gelir.
Alışveriş Sepeti
Bir e-ticaret sitesinde belirli zaman dilimlerinde saniyede milyarlarca işlem yapılabilmektedir. Bir anahtar-değer veri tabanı, büyük veri miktarının ölçeklendirilmesini ve yüksek hacimli durum değişikliklerini yönetip milyonlarca kullanıcıya eşzamanlı olarak hizmet verebilir.
Önbellekleme (Caching)
Uygulamalarda veya sitelerde, daha hızlı erişim ve yanıt için veriyi geçici olarak saklama yani cacheleme işlemi için bir anahtar-değer sistem kullanılabilir. Sıkça erişilen veriler saklanarak son kullanıcıya hızlı bir şekilde sunulabilir.
Popüler Key — Value Veri Tabanları
Redis
Önbellek, hafıza tabanlı anahtar-değer veri tabanıdır. Önbellekleme, oturum yönetimi, sıralama gibi birçok kullanım alanında yaygın olarak kullanılır. Çeşitli , karmaşık veri yapılarını (dizgi, sıralı set, küme, hash) destekler. Veriler ana bellekte saklanır ve bu sayede çok hızlı bir şekilde çalışır. Veriyi disk üzerine yazma özelliği ile hafıza tabanlı veri depolama ve yönetimi imkanı sunar.
Amazon DynamoDB
Amazon Web Services (AWS) tarafından tam olarak desteklenir. Bu veri tabanı yönetimi, yedekleme, güvenlik ve ölçeklendirme durumlarını AWS tarafından yönetildiği anlamına gelir. Otomatik ölçeklenebilir, böylece yüksek performans sunar. Veri dayanıklılığı (durability) ve yedekleme imkanı vardır. Karmaşık veri yapıları için uygundur. Doğrudan bir ön bellekleme imkanı sunmaz.
Memcached
Hafıza tabanlı (in-memory) bir anahtar-değer veri tabanıdır. Yüksek trafikli sitelerde performansı artırmak amacıyla ön bellekleme için kullanılır. Diğer alternatiflerine göre basit bir anahtar değer sistemidir. Veriler ana bellekte saklanır ve bu sayede çok hızlı bir şekilde çalışır. Fakat herhangi bir sistem kesintisinde veri kaybı oluşur.
Riak
Ölçeklenebilir ve dağıtık mimariye sahiptir. Veri kümesini otomatik olarak yatay biçimde ölçeklendirilmesini sağlar. Dağıtık olması özelliğiyle ana sunucuda problem olması durumunda sistemin devam etmesini sağlar. Veri çoğaltma özelliği ile verilerin kopyalarını oluşturarak farklı düğüm (node) üzerinde saklar. Farklı veri merkezleri arasında verilerin dağıtılmasını sağlayarak yüksek düzeyde erişilebilirlik sunar.
Popüler: “Popüler” ifadesi, birçok uygulama ve senaryoda yaygın olarak kullanılan bir önbellekleme çözümüne işaret eder. Popüler bir önbellekleme çözümü, geniş bir kullanıcı kitlesi tarafından benimsenmiş ve desteklenmiştir. Bu, topluluk desteği, belgelendirme ve yaygın kullanım senaryoları ile birlikte gelir.
Mükemmel: “Mükemmel” ifadesi, önbellekleme yeteneklerinin performans, güvenilirlik ve kullanım kolaylığı açısından üst düzeyde olduğunu belirtir. Mükemmel bir önbellekleme çözümü, yüksek veri erişim hızları, düşük gecikme süreleri ve kolay entegrasyon ile karakterize edilir.
Spring Boot ve Redis ile oluşturulmuş basit bir alışveriş sepeti örneğinin GitHub linkini bırakıyorum. Proje basit bir şekilde kullanıcıların ürünleri sepete eklemesine, stok kontrolü yapmasına ve sepetlerinin içeriğini görüntülemesine olanak tanır.
Sonuç
Sonuç olarak anahtar değer veri tabanları, veri yönetiminde, veri erişiminde bizlere sağladığı hız, kolay kullanılabilirlik ve esneklik ile günümüz teknolojisinde kendisine önemli bir yer edinmiştir. Bu sistemlerin gelecekte de veri tabanı teknolojileri açısından önemli bir rol oynayacağı aşikardır.
Kaynakça
Burd, G. (2011). What Is NoSQL?
Puangsaijai, W., & Puntheeranurak, S. (2017, March). A comparative study of relational database and key-value database for big data applications. 2017 International Electrical Engineering Congress (iEECON). http://dx.doi.org/10.1109/ieecon.2017.8075813