Bir uygulama geliştirirken yapılacak en temel seçimlerden biri, verileri depolamak için SQL mi yoksa NoSQL veritabanı mı kullanılacağıdır. Sorgular için SQL (Yapılandırılmış Sorgu Dili) kullanan ilişkisel veritabanları anlamına gelen geleneksel veritabanları, onlarca yıllık teknoloji evrimi, iyi uygulama ve gerçek dünya stres testinin ürünüdür. İş kolu uygulamalarının temel öğeleri olan güvenilir işlemler ve ad hoc sorgular için tasarlanmıştır. Ancak, katı şemalar gibi, onları diğer uygulama türleri için daha az uygun hale getiren kısıtlamalarla da yüklüdürler.
NoSQL veritabanları bu sınırlamalara yanıt olarak ortaya çıktı. NoSQL sistemleri, verileri geliştiriciler açısından yüksek operasyonel hız ve büyük esneklik sağlayacak şekilde depolar ve yönetir. Birçoğu, büyük web siteleri için içerik depolamanın veya verileri işlemenin daha iyi yollarını arayan Google, Amazon, Yahoo ve Facebook gibi şirketler tarafından geliştirildi. SQL veritabanlarından farklı olarak, birçok NoSQL veritabanları yüzlerce veya binlerce sunucu arasında yatay olarak ölçeklenebilir.
NoSQL’in avantajları yine de ücretsiz değildir. NoSQL sistemleri, hız ve ölçeklenebilirliği tercih eder. ASİT özellikleri SQL veritabanlarının vaat ettiği güvenilir işlemlerin arkasında. Ve NoSQL sistemlerinde verilerle çalışmak için kullanılan metaforlar da, SQL çevresinde onlarca yıllık kurumsal bilgi birikimine kıyasla nispeten yenidir.
SQL ve NoSQL veritabanları farklı ödünleşimler sunar. Belirli bir proje bağlamında rekabet edebilirken – olduğu gibi, hangisini seçecekler? Bu uygulama veya o uygulama—büyük resimde tamamlayıcıdırlar. Her biri farklı kullanım durumlarına uygundur. Karar, ya/veya meselesi değil, iş için hangi aracın doğru olduğu sorusudur.
NoSQL ve SQL
SQL ve NoSQL arasındaki temel fark o kadar da karmaşık değildir. Her birinin, verilerin nasıl saklanması ve alınması gerektiği konusunda farklı bir felsefesi vardır.
SQL veritabanları ile tüm veriler doğal bir yapıya sahiptir. Microsoft SQL Server, MySQL, PostgreSQL veya Oracle Database gibi geleneksel bir veritabanı, şema— veri tabanına eklenen verilerin nasıl oluşturulacağına dair resmi bir tanım. Örneğin, bir tablodaki belirli bir sütun yalnızca tam sayılarla sınırlandırılabilir. Sonuç olarak, sütuna kaydedilen veriler yüksek derecede normalizasyona sahip olacaktır. Bir SQL veritabanının katı şeması, örneğin SQL kullanarak iki tablodaki verileri birleştirerek, veriler üzerinde toplama gerçekleştirmeyi nispeten kolaylaştırır. JOIN
emretmek.
NoSQL ile veriler şemasız veya serbest biçimli bir şekilde saklanabilir. Herhangi bir veri herhangi bir kayıtta saklanabilir. NoSQL veritabanları arasında, veri depolamak için dört yaygın NoSQL sistemi türüne yol açan dört ortak model bulacaksınız:
- Belge veritabanları (örn. MongoDB). Eklenen veriler, verilerin tamsayılardan dizelere ve serbest biçimli metne kadar herhangi bir şey olabileceği şemasız JSON yapıları veya “belgeler” biçiminde depolanır. Varsa, bir JSON belgesinin hangi alanları içereceğini belirtmeye doğal olarak gerek yoktur.
- Anahtar/değer depoları (örn. Redis). Basit tamsayılardan veya dizelerden karmaşık JSON belgelerine kadar serbest biçimli değerlere, veritabanında dizeler gibi anahtarlar yoluyla erişilir.
- Geniş sütun mağazaları (örn. Cassandra). Veriler, geleneksel bir SQL sisteminde olduğu gibi satırlar yerine sütunlarda depolanır. Herhangi bir sayıda sütun (ve dolayısıyla birçok farklı veri türü), sorgular veya veri görünümleri için gerektiği gibi gruplanabilir veya toplanabilir.
- Grafik veritabanları (örn. Neo4j). Veriler, varlıkların bir ağı veya grafiği ve grafikteki her bir düğümün serbest biçimli bir veri yığını olduğu ilişkileri olarak temsil edilir.
Şemasız veri depolama, aşağıdaki senaryolarda kullanışlıdır:
- Verilere hızlı erişim istiyorsunuz ve güvenilir işlemlerden veya tutarlılıktan daha çok erişim hızı ve basitliği ile ilgileniyorsunuz.
- Büyük miktarda veri depoluyorsunuz ve şemayı daha sonra değiştirmek yavaş ve zahmetli olabileceğinden kendinizi bir şemaya kilitlemek istemiyorsunuz.
- Bir veya daha fazla kaynaktan yapılandırılmamış veri alıyorsunuz ve maksimum esneklik için verileri orijinal biçiminde tutmak istiyorsunuz.
- Verileri hiyerarşik bir yapıda depolamak istiyorsunuz, ancak bu hiyerarşilerin harici bir şema değil, verilerin kendisi tarafından tanımlanmasını istiyorsunuz. NoSQL, SQL veritabanlarının öykünmesi için daha karmaşık yollarla verilerin rastgele kendi kendine referans olmasına izin verir.
NoSQL veritabanlarını sorgulama
İlişkisel veritabanları tarafından kullanılan Yapılandırılmış Sorgu Dili, verileri depolarken ve alırken sunucuyla iletişim kurmak için tek tip bir yol sağlar. SQL sözdizimi oldukça standartlaştırılmıştır, bu nedenle bireysel veritabanları belirli işlemleri farklı şekilde ele alabilirken (örn. pencere fonksiyonları), temeller aynı kalır.
Buna karşılık, her NoSQL veritabanı, verileri sorgulamak ve yönetmek için kendi sözdizimine sahip olma eğilimindedir. Örneğin CouchDB, HTTP aracılığıyla gönderilen JSON biçimindeki istekleri kullanır. oluşturmak veya belgeleri almak onun veritabanından. MongoDB, JSON nesnelerini bir komut satırı arabirimi veya bir dil kitaplığı yoluyla ikili bir protokol üzerinden gönderir.
Bazı NoSQL ürünleri Yapabilmek verilerle çalışmak için SQL benzeri sözdizimi kullanın, ancak yalnızca sınırlı bir ölçüde. Örneğin, geniş bir sütun deposu olan Apache Cassandra, kendi SQL benzeri bir dile sahiptir. Cassandra Sorgu Dili veya CQL. CQL sözdiziminin bir kısmı, aşağıdaki gibi, doğrudan SQL oyun kitabından çıkarılmıştır. SELECT
veya INSERT
anahtar kelimeler. Ancak bir işlemi gerçekleştirmenin yerel bir yolu yoktur. JOIN
veya Cassandra’da alt sorgu ve dolayısıyla ilgili anahtar kelimeler CQL’de mevcut değil.
Paylaşılan hiçbir şey mimarisi
NoSQL sistemlerinde ortak bir tasarım seçeneği, “paylaşılan hiçbir şey” mimarisidir. Paylaşılan hiçbir şey tasarımında, kümedeki her sunucu düğümü, diğer tüm düğümlerden bağımsız olarak çalışır. Sistemin bir istemciye veri döndürmek için diğer düğümlerden fikir birliği alması gerekmez. Sorgular hızlıdır çünkü en yakın veya en uygun düğümden döndürülebilirler.
Paylaşılan hiçbir şey sisteminin bir başka avantajı, esneklik ve ölçeği genişletmedir. Kümenin ölçeğini genişletmek, kümedeki yeni düğümleri döndürmek ve diğerleriyle eşitlenmelerini beklemek kadar kolaydır. Bir NoSQL düğümü çökerse, kümedeki diğer sunucular birlikte çalışmaya devam eder. İstekleri sunmak için daha az sayıda düğüm olsa bile tüm veriler kullanılabilir durumda kalır.
Paylaşılan hiçbir şey tasarımının olmadığını unutmayın. özel NoSQL veritabanlarına. Birçok geleneksel SQL sistemi, paylaşılan hiçbir şey olmadan kurulabilir. MySQL gibiancak bu genellikle performans için küme genelinde tutarlılıktan ödün vermeyi içerir.
NoSQL sınırlamaları
NoSQL çok fazla özgürlük ve esneklik sağlıyorsa, neden SQL’i tamamen terk etmeyesiniz? Basit cevap, birçok uygulamanın hala SQL veritabanlarının sağladığı kısıtlama, tutarlılık ve koruma türlerini gerektirmesidir. Bu durumlarda NoSQL’in bazı “avantajları” dezavantajlara dönüşebilir. Diğer sınırlamalar, NoSQL sistemlerinin, SQL alanında verilen bazı özelliklerden yoksun olması gerçeğinden kaynaklanmaktadır.
şema yok
Serbest biçimli verileri alıyor olsanız bile, verileri kullanışlı hale getirmek için hemen hemen her zaman kısıtlamalar getirmeniz gerekir. NoSQL ile kısıtlamalar getirmek, sorumluluğu veritabanından uygulama geliştiricisine kaydırmayı içerir. Örneğin, geliştirici bir nesne ilişkisel eşleme sistemi veya ORM aracılığıyla yapıyı empoze edebilir. Ama şemanın yaşamasını istiyorsanız verilerin kendisi ileNoSQL genellikle bunu desteklemez.
Bazı NoSQL çözümleri, veriler için isteğe bağlı veri yazma ve doğrulama mekanizmaları sağlar. Örneğin, Apache Cassandra’nın çok sayıda yerel veri türleri geleneksel SQL’de bulunanları anımsatır.
nihai tutarlılık
NoSQL sistemleri, daha iyi kullanılabilirlik ve performans için güçlü veya anında tutarlılık ticareti yapma seçeneği sunar. Geleneksel veritabanları, işlemlerin atomik (bir işlemin tüm bölümleri başarılı olur veya hiçbiri başarılı olmaz), tutarlı (tüm kullanıcılar verilerin aynı görünümüne sahiptir), yalıtılmış (işlemler rekabet etmez) ve dayanıklı (tamamlandıktan sonra bir sunucu arızasından kurtulacaklar).
Toplu olarak ACID olarak adlandırılan bu dört özellik, NoSQL sistemlerinde farklı şekilde işlenebilir. İsteklere verilen yanıtları mutlaka geciktirecek olan küme genelinde güçlü tutarlılık talep etmek yerine, nihai Tutarlılık, isteklerin kümedeki diğer düğümlere kopyalanmasını beklemeden sunulmasını sağlar. Kümeye eklenen veriler sonunda her yerde kullanılabilir, ancak ne zaman olacağını garanti edemezsiniz.
Bazı NoSQL sistemleri için, mevcut olan ürünler arasında değişiklik gösterse de, tutarlılık ve hız arasında bir dizi uzlaşmadan birini seçebilirsiniz. Örneğin Microsoft’un Azure Cosmos DB’si size istek başına bir tutarlılık düzeyi seçin, böylece kullanım durumunuza uyan davranışı seçebilirsiniz. Bir SQL sisteminde bir işlemdeki tüm adımların (örn. ve envanterin azaltılması) tamamlanır veya geri alınır, bazı NoSQL sistemlerinde mevcuttur, MongoDB gibi.
NoSQL kilitleme
Çoğu NoSQL sistemi, kavramsal olarak benzer, ancak uygulandı farklı. Her biri, verilerin nasıl sorgulandığı ve yönetildiği konusunda kendi metaforlarına ve mekanizmalarına sahip olma eğilimindedir.
Bunun bir yan etkisi, uygulama mantığı ile veritabanı arasında potansiyel olarak yüksek derecede bir bağlantıdır. Bu bağlantı, bir NoSQL sistemi seçip ona bağlı kalırsanız o kadar da kötü değildir, ancak yolun aşağısındaki sistemleri değiştirirseniz tökezleyen bir blok haline gelebilir.
Örneğin, MongoDB’den CouchDB’ye (veya tam tersi) geçiş yapıyorsanız, verileri taşımaktan fazlasını yapmanız gerekir. Ayrıca veri erişimi ve programatik metaforlardaki farklılıklarda da gezinmeniz gerekir. Başka bir deyişle, uygulamanızın veritabanına erişen kısımlarını yeniden yazmalısınız.
NoSQL becerileri
NoSQL’in bir diğer dezavantajı, göreceli uzmanlık eksikliğidir. Geleneksel SQL yeteneği pazarının oldukça büyük olduğu yerlerde, NoSQL becerileri pazarı yeni gelişmektedir.
Referans olarak, Indeed.com, 2022 itibariyle, geleneksel SQL veritabanları (MySQL, Microsoft SQL Server, Oracle Veritabanı vb.) için iş listeleme hacminin MongoDB, Couchbase ve Cassandra için iş hacminden daha yüksek olduğunu bildiriyor. NoSQL uzmanlığına olan talep, SQL becerileri pazarının küçük bir bölümü olmaya devam ediyor.
SQL ve NoSQL’i Birleştirme
SQL ve NoSQL sistemleri arasındaki bazı farklılıkların zamanla ortadan kalkmasını bekleyebiliriz. Zaten birçok SQL veritabanı artık JSON belgelerini yerel bir veri türü olarak kabul ediyor ve bu verilere karşı sorgular gerçekleştirebiliyor. Hatta bazılarının, geleneksel satır ve sütun verileriyle aynı titizlikle ele alınması için JSON verilerine kısıtlamalar getirmenin yerel yolları vardır.
Diğer taraftan, NoSQL veritabanları yalnızca SQL benzeri sorgu dillerini değil, aynı zamanda MongoDB’nin ACID özellikleri gibi geleneksel SQL veritabanlarının diğer özelliklerini de ekliyor.
Muhtemel bir yol, gelecek nesil veri tabanı sistemlerinin yanı sıra mevcut veri tabanı sistemlerinin gelecek sürümlerinin paradigmaları destekleyecek ve hem SQL hem de NoSQL işlevselliği sunarak veri tabanı dünyasını daha az parçalı hale getirmeye yardımcı olmasıdır. Örneğin, Microsoft’un Azure Cosmos DB’si, her iki tür sistemin davranışlarını birbirinin yerine geçecek şekilde yeniden oluşturmak için başlık altında bir dizi ilkel kullanır. Google Bulut Anahtarı SQL ve güçlü tutarlılığı NoSQL sistemlerinin yatay ölçeklenebilirliği ile birleştirir.
Yine de saf SQL ve saf NoSQL sistemleri gelecek yıllarda yerlerini alacak. Tasarım esnekliğinin, yatay ölçeklenebilirliğin ve yüksek kullanılabilirliğin, güçlü okuma tutarlılığı ve SQL veritabanlarında yaygın olan diğer güvenlik önlemlerinden daha önemli olduğu senaryolarda NoSQL’e bakın. Birçok uygulama için, bu güvenlik önlemleri NoSQL’in sunduğu şeylerle takas edilmeye değer olabilir.
Telif Hakkı © 2022 IDG Communications, Inc.
Kaynak : https://www.infoworld.com/article/3240644/what-is-nosql-databases-for-a-cloud-scale-future.html#tk.rss_all