NoSQL Nedir?
Eğer veri tabanı teknolojileri ile çalışıyorsanız NoSQL kavramını duyduğunuza eminim. E-ticaretten büyük veriye, gerçek zamanlı çalışan uygulamalaraa kadar değişen alanlarda esnekliği ve ölçeklenebilirliği nedeniyle günümüzün en büyük şirketleri arasında NoSQL kavramı giderek popüler hale gelmeye başladı. NoSQL kullanım senaryoları çeşitlenmeye devam ederken bulut hizmet sağlayıcıları bu konuya her geçen gün daha fazla önem vermeye başladı. Biz farkında olmasak da artık kullandığımız herhangi bir programın arka planında NoSQL çözümleri kesinlikle yer almaya başladı.
NoSQL veri tabanları çözüm olarak 1960’lardan bu yana çeşitli isimler altında kullanıldı. İsimleri ön planda yer alan teknoloji şirketleri benimsemesiyle birlikte popülerliği arttı ve NoSQL kelimesi ile adlandırılmaya başlandı. NoSQL veri tabanı yetenekleri nedir ve sizin için nasıl bir çözüm oluşturabilir?
NoSQL yapısı gereği ilişkisel olmayan bir veri tabanıdır. Veri depolama ve erişim ilişkisel bir veri tabanında olduğu gibi yapılandırılmış ve kategorilendirilmiş satılar ve sütunlar ile önceden tanımlanmış bir Schema ile ele alınmaz. Herhangi bir tanımlanma ve kalıp çizilmediği için bu durum verilerin işlenmesini oldukça kolaylaştırmıştır. Bu yüzden sorgu sonuçları çok az gecikmeler ile sonuçlanmaktadır. Tasarımı gerekli birçok NoSQL çözümü yatay ölçeklendirilebilirliği destekler. Verileri bünyesinde bir model türüne bağlı olarak depolar.
En Çok Kullanılan NoSQL Data Modelleri
- Key-Value Türü: Hash tablosu yardımıyla eşleştirilerek ortaya çıkarılır. Bu durum, bir dosya yolunun, içerisinde veri barındıran bir dosyaya işaret etmesi şeklinde de düşünülebilir. Key (anahtar), herhangi rastgele bir değere ulaşmak için kullanılır. Örneğin: tamsayı, liste, JSON (diğer deyişle döküman), JPEG veya dizi gibi.
- Döküman Türü: Genellikle tüm belgeleri koleksiyonlar halinde düzenleyerek key-value veritabanı kavramının genişletilmiş hâlidir diyebiliriz. Doküman içerisindeki anahtar değerleri, XML veya JSON gibi standart biçim kullanılarak verilerin kodlandığı herhangi bir öznitelik olabilir. (Genellikle, key-value değeri kendi içerisinde başka bir key-value değerinin kaydedilmesine izin vermez, oysaki döküman veritabanlarında bu işlev gerçekleştirilebilir. Dahası, bir döküman üzerindeki herhangi bir nitelik kapsamındaki verinin sorgulanmasına izin verir.)
- Columnar Türü: Bir veya daha fazla sütun değerlerini genellikle bir depolama bloğunda birlikte depolayan sütunlu veya geniş sütunlu veritabanları. İlişkisel veritabanlarından farklı olarak sütunlu veritabanında seyrek doldurulmuş sütunlar verimli bir şekilde depolanabilir performanslı sorgular atılabilir.
- Graph Türü: Bir sosyal ağdaki insanlar arasındaki ilişkiler gibi birbirine bağlı verileri temsil etmek için düğüm, kenar ve özelliklere dayalı bir türdür.
Çoğu NoSQL veri tabanının yüksek düzeyde yapılandırılmış verileri işleyebileceğini de belirtmek gerekir. Sadece bunlarla sınırlı olmamakla birlikte önceden bir veritabanı şeması tanımlamanız da gerekmez. Benzer şekilde, bir NoSQL veri tabanına yeni veri türleri eklemek istediğinizde, ilişkisel veritabanlarından farklı olarak yaptığınız işi durdurmanız, yeni sütunlar eklemeniz ve ardından verilerinizi yeni şemaya taşımanız gerekmez. Bu durum Agile Development ortamında ve daha sık versiyon yayınlama söz konusu üretim süreçleri büyük bir avantajdır.
Yatay Ölçeklendirme
NoSQL veri tabanlarının hızlı bir şekilde benimsenmesine katkıda bulunan bir başka faktör yatay ölçeklendirilebilir üzere tasarlanmış olmasıdır. Bu durum NoSQL’i neredeyse sınırsız miktarda veriyi işleyebilecek hale getirmektedir. Birçok NoSQL veri tabanı otomatik olarak ölçeklendirmeye ve verileri rastgele sayıda sunucuya dağıtmaya izin veren yeteneklere sahiptir.
Replication
Birçok NoSQL veri tabanı dağıtılır ve planlı ya da plansız bir kesinti durumunda sürekliliğin sağlanabilirliğini korumaya yardımcı olabilecek bir tür otomatik çoğaltma işlemini destekler. Replikasyon, verilerin birden çok sunucuya dağıtılmasına olanak tanır. Bulut servis sağlayıcılarında ise bu durum kıtalar arası sunuculara dağıtarak dünyanın herhangi bir yerinde bir uygulamayı kullanan birisinin dünyanın öbür ucundan veri alınmasını beklemek yerine anlık replikasyon sunuculara erişim sağlayarak daha hızlı erişim sağlar.
NoSQL Ne Zaman Kullanılmalı
NoSQL ne zaman kullanmalıyız? Hangi miktarda olursa olsun verileriniz yapılandırılmamış ise NoSQL başlamak için ideal bir veri tabanı olabilir. Birçok NoSQL veri tabanının düşük gecikme süresi yatay ölçeklenebilirlik ve replikasyon gibi özelliklerini göz önünde bulundurmak gerekir. Servis sağlayıcılardan bu hizmeti alıyor iseniz hangi coğrafyalarda konumlandıracağınızı iyi bilin. NoSQL’de düşük gecikme özelliği ile gerçek zamanlı müşterilerinizin bile verilerini analiz edebilir hale gelirsiniz. Anlık olarak web sitesinde gezinti yapan kullanıcıların durumlarının analiz edilmesi gibi… Ayrıca Big Data/Analytcs verilerini işleyebilirsiniz. İşin püf noktası verinin yapılandırılıp yapılandırılmadığına bağlıdır.
Hangi NoSQL Çözümünü Seçmeliyiz
Belirli bir formata bağlı kalmadan direk veri ekleme, yatay ölçeklenebilirlik ve replikasyon NoSQL’i popüler kılan özellikler olduğunu belirtmiştik. Geliştiricilerin ve mimarların seçim yapabileceği birçok NoSQL çözümü varken tutacakları veri türüne göre en uygun olanı kullanmaları yerinde olacaktır. Amaca özel oluşturulmuş NoSQL veri tabanları performansı daha üst seviyelere çıkaracaktır.
Programlama Modelleri ve API’ler
İlişkisel veri tabanları ile çalıştıysanız muhtemelen bunların programlama sırasında kullandığınız değişkenlerin ile her zaman iyi eşleşmediklerinin farkındasınızdır. Bununla birlikte, pek çok NoSQL veri tabanı etkileşimde bulunduğunuz bir veri koleksiyonu olarak tanımlanan bir kümedir. Bu durum nesne odaklı programlama dilleri için iyi bir durumdur. Herhangi bir uyumsuzluk yaşamadan hızlı çalışabilirsiniz.
Bir NoSQL veri tabanı seçmeye gelince, muhtemelen bir veri modeli seçerek başlamak ve ardından her veri tabanının desteklediği programlama dilleri ve SDK’larla birlikte onu destekleyen NoSQL veri tabanlarını değerlendirmek daha yerinde olacaktır. Veri tabanı sizi belirli bir SDK ve dile kilitliyor mu yoksa bu konuda bir seçeneğiniz olacak mı? Dağıtılmış bir şekilde konumlandırılan veri tabanınızdan en iyi şekilde yararlanmak için ihtiyaç duyduğunuz şeye sahip mi? Planlı veya plansız bir Failover durumunda uygulamanızın düzgün çalışabilmesini sağlamak için çoklu API yada Microservice desteğine sahip mi?
On Premise ya da Bulut Çözümler, Ya da Bulut Çözümlerinden Hangisi?
NoSQL veri tabanları yıllardır kullanılmaktadır. Ancak, NoSQL veri tabanlarının bulutun gelişiyle birlikte gerçekten popüler olmaya başladığını belirtmekte fayda var ve bunun bir nedeni var. Dağıtılmış yapıları ve yatay ölçeklenebilirlikleri onları ideal hale getiriyor. Seçilen veri modelinden bağımsız olarak bulut hizmeti veren firmalara bir şekilde ulaşacaksınız. Bu firmaların kendilerince çeşitli çözümleri ve mimarileri var. Peki seçerken hangi kriterleri göz önüne almalıyım?
Desteklenen veri modelleri: Bulut sağlayıcı, kullanmak isteyebileceğim tüm veri modellerini destekliyor mu? Bu özellikleri kompleks olarak kullanmak isterken beni çok uğraştıracak mı?
Deployment ve operasyonlar: Veri tabanımı ne kadar kolay ayağa kaldırabilirim ve ardından gerekirse diğer bölgelerde bir replikasını oluşturabilirim? Kurulum ve bakım gereksinimleri ne kadar sıkıcı? Tamamen yönetilen bir hizmet mi alacağım? Planlı kesinti süreleri konusunda endişelenmem gerekecek mi?
Coğrafi konumlandırma: Bulut sağlayıcısının veri merkezleri nerede? Verilerimi istediğim yere koyabilir miyim? Amerika’da SOX, Avrupa Birliğinde GDPR ve Türkiyede KVKK kapsamında oluşturulan düzenlemeler için gerekli çözümleri varmı? Bu düzenlemeler için nasıl bir çözüm üretiyorlar?
Çoğaltma kolaylığı: Veri tabanımı farklı bir coğrafi bölgeye kopyalama süreci nedir? Süreç ne kadar karmaşık ve ne kadar sürecek?
Ölçeklenebilirlik: Yeterli performans sağlamak ve büyüme için ölçeklendirmek için gereken veri tabanı kaynaklarını nasıl temin edeceğim? Asla kullanamayacağım kaynakları önceden tedarik etmem ve bunlar için ödeme yapmam gerekecek mi, yoksa öngörülemeyen iş yüklerinin üstesinden gelmek için isteğe bağlı olarak ölçeği artırıp azaltabilir miyim?
Yüksek kullanılabilirlik: Beklenmeyen bir başarısızlık durumunda ne olacak? Bu durum endişelenmem gereken sorun mu?
Hizmet seviyeleri: Bulut hizmeti belirli bir düzeyde kullanılabilirliği garanti ediyor mu? Herhangi bir gecikme garantisi var mı?
Ekosistem: Veri tabanı, bulut platformunun geri kalanıyla ne kadar entegre? İhtiyacım olan tüm hizmetleri sağlıyor mu ve eksiksiz bir çözüm oluşturmak için hızlı bir şekilde birleştirilebilir mi? Bulut ekosisteminde diğer ürünleri ile entegre kullanabilecek miyim?
Son olarak, bir NoSQL veri tabanı hizmeti seçerken bir adım geriye gidip bulut platformunu bir bütün olarak incelenmesi daha yerinde olacaktır. Bu nedenle seçtiğiniz hizmetin ve üzerinde bulunduğu platformun NoSQL veri tabanınızı kullanmak için ihtiyaç duyacağınız her şeyi sağlayabildiğinden emin olmalısınız. NoSQL veri tabanınızı diğer uygulama bileşenleriyle entegre etme yeteneği gibi ihtiyaç duyacağınız belirli hizmetler uygulamanıza bağlı olacaktır. İhtiyaç duyabileceğiniz diğer bulut hizmetleri, büyük miktarlarda IoT verisi almak, gerçek zamanlı akış analitiğini uygulamak veya uygulamalarınızda yapay zekâ oluşturmak gibi senaryolar da dahil olabilir. NoSQL verileriniz değiştiğinde bir bildirim yada bir rapor almak isterseniz bulut üzerinde yer alan çeşitli entegrasyon kolaylıklarını da unutmamanız gerekir.