Aracılığıyla paylaş


İlişkisel ve NoSQL verileri karşılaştırması

İpucu

Bu içerik, .NET Docs'ta veya çevrimdışı olarak okunabilen ücretsiz indirilebilir bir PDF olarak sağlanan Azure için Buluta Özel .NET Uygulamaları Tasarlama adlı e-Kitap'tan bir alıntıdır.

Cloud Native .NET apps for Azure eBook cover thumbnail.

İlişkisel ve NoSQL, bulutta yerel uygulamalarda yaygın olarak uygulanan iki tür veritabanı sistemidir. Bunlar farklı şekilde derlenir, verileri farklı depolar ve farklı şekilde erişilir. Bu bölümde her iki bölüme de göz atacağız. Bu bölümün ilerleyen bölümlerinde NewSQL adlı yeni bir veritabanı teknolojisine göz atacağız.

İlişkisel veritabanları onlarca yıldır yaygın bir teknolojidir. Bunlar olgun, kanıtlanmış ve yaygın olarak uygulanmıştır. Rakip veritabanı ürünleri, araçları ve uzmanlıkları. İlişkisel veritabanları, ilgili veri tablolarının depolarını sağlar. Bu tabloların sabit bir şeması vardır, verileri yönetmek için SQL (Yapılandırılmış Sorgu Dili) kullanır ve ACID garantilerini destekler.

SQL olmayan veritabanları yüksek performanslı, ilişkisel olmayan veri depolarına başvurur. Kullanım kolaylığı, ölçeklenebilirlik, dayanıklılık ve kullanılabilirlik özelliklerinde üstünlük sağlar. NoSQL, normalleştirilmiş veri tablolarını birleştirmek yerine yapılandırılmamış veya yarı yapılandırılmış verileri genellikle anahtar-değer çiftlerinde veya JSON belgelerinde depolar. No-SQL veritabanları genellikle tek bir veritabanı bölümünün kapsamı dışında ACID garantileri sağlamaz. Alt ikinci yanıt süresi gerektiren yüksek hacimli hizmetler NoSQL veri depolarını tercih eder.

Dağıtılmış buluta özel sistemler için NoSQL teknolojilerinin etkisi fazla abartılamaz. Bu alanda yeni veri teknolojilerinin yaygınlaşması, bir zamanlar yalnızca ilişkisel veritabanlarını kullanan çözümleri kesintiye uğratmıştır.

NoSQL veritabanları, verilere erişmek ve bunları yönetmek için her birinin belirli kullanım örneklerine uygun olduğu birkaç farklı model içerir. Şekil 5-9 dört ortak model sunar.

NoSQL data models

Şekil 5-9: NoSQL veritabanları için veri modelleri

Model Özellikler
Belge Deposu Veriler ve meta veriler, veritabanının içindeki JSON tabanlı belgelerde hiyerarşik olarak depolanır.
Anahtar Değer Deposu NoSQL veritabanlarının en basiti olan veriler, anahtar-değer çiftleri koleksiyonu olarak temsil edilir.
Geniş Sütunlu Mağaza İlgili veriler, tek bir sütunda iç içe anahtar/değer çiftleri kümesi olarak depolanır.
Graf Deposu Veriler grafik yapısında düğüm, kenar ve veri özellikleri olarak depolanır.

CAP teoremi

Bu tür veritabanları arasındaki farkları anlamanın bir yolu olarak, durumu depolayan dağıtılmış sistemlere uygulanan bir dizi ilke olan CAP teoremini göz önünde bulundurun. Şekil 5-10,CAP teoreminin üç özelliğini gösterir.

CAP theorem

Şekil 5-10. CAP teoremi

Teorem, dağıtılmış veri sistemlerinin tutarlılık, kullanılabilirlik ve bölümleme toleransı arasında bir denge sunacağını belirtir. Ayrıca, herhangi bir veritabanının üç özelliğin yalnızca ikisini garanti altına alabileceğini unutmayın:

  • Tutarlılık. Tüm çoğaltmalar güncelleştirilene kadar sistemin isteği engellemesi gerekse bile kümedeki her düğüm en son verilerle yanıt verir. Şu anda güncelleştirilen bir öğe için "tutarlı bir sistem" sorgularsanız, tüm çoğaltmalar başarıyla güncelleştirilene kadar bu yanıtı beklersiniz. Ancak en güncel verileri alırsınız.

  • Kullanılabilirlik. Bu yanıt en son veriler olmasa bile her düğüm anında yanıt döndürür. Güncelleştirilen bir öğe için "kullanılabilir sistemi" sorgularsanız, hizmetin o anda sağlayabilecekleri en iyi yanıtı alırsınız.

  • Bölüm Toleransı. Çoğaltılan bir veri düğümü başarısız olsa veya diğer çoğaltılmış veri düğümleriyle bağlantıyı kaybetse bile sistemin çalışmaya devam etmesi garanti edilir.

CAP teoremi, bir ağ bölümü sırasında tutarlılığı ve kullanılabilirliği yönetmeyle ilişkili dengeleri açıklar; ancak tutarlılık ve performans açısından dengeler, ağ bölümünün olmamasıyla da mevcuttur. CAP teoremi genellikle dengeleri daha kapsamlı bir şekilde açıklamak için PACELC'ye genişletilir.

İlişkisel veritabanları genellikle tutarlılık ve kullanılabilirlik sağlar, ancak bölümleme toleransı sağlamaz. Bunlar genellikle tek bir sunucuya sağlanır ve makineye daha fazla kaynak eklenerek dikey olarak ölçeklendirilir.

Birçok ilişkisel veritabanı sistemi, birincil veritabanının kopyalarının diğer ikincil sunucu örneklerine alınabildiği yerleşik çoğaltma özelliklerini destekler. Yazma işlemleri birincil örneğe yapılır ve ikincil örneklerin her birine çoğaltılır. Bir hata durumunda birincil örnek, yüksek kullanılabilirlik sağlamak için ikincil bir örneğe yük devredebilir. İkinciller, okuma işlemlerini dağıtmak için de kullanılabilir. Yazma işlemleri her zaman birincil çoğaltmaya karşı olsa da, sistem yükünü azaltmak için okuma işlemleri herhangi bir ikincil kopyaya yönlendirilebilir.

Veriler, parçalama gibi birden çok düğüm arasında yatay olarak bölümlenebilir. Ancak parçalama, verileri kolayca iletişim kuramayan birçok parçaya tükürerek operasyonel ek yükü önemli ölçüde artırır. Yönetmek maliyetli ve zaman alabilir. Tablo birleştirmeleri, işlemler ve bilgi tutarlılığı içeren ilişkisel özellikler, parçalı dağıtımlarda dik performans cezaları gerektirir.

Çoğaltma tutarlılığı ve kurtarma noktası hedefleri, çoğaltmanın zaman uyumlu mu yoksa zaman uyumsuz olarak mı gerçekleştirildiğini yapılandırarak ayarlanabilir. Veri çoğaltmaları "yüksek oranda tutarlı" veya zaman uyumlu bir ilişkisel veritabanı kümesinde ağ bağlantısını kaybederse veritabanına yazamazsınız. Sistem yazma işlemini reddeder çünkü bu değişikliği diğer veri çoğaltmasına çoğaltamaz. İşlem tamamlanmadan önce her veri çoğaltmasının güncelleştirilmiş olması gerekir.

NoSQL veritabanları genellikle yüksek kullanılabilirliği ve bölüm dayanıklılığını destekler. Genellikle ticari sunucularda yatay olarak ölçeklendirilirler. Bu yaklaşım, hem coğrafi bölgelerde hem de coğrafi bölgelerde daha düşük maliyetle muazzam bir kullanılabilirlik sağlar. Verileri bu makineler veya düğümler arasında bölümleyip çoğaltarak yedeklilik ve hataya dayanıklılık sağlarsınız. Tutarlılık genellikle konsensüs protokolleri veya çekirdek mekanizmaları aracılığıyla ayarlanır. İlişkisel sistemlerde zaman uyumlu ve zaman uyumsuz çoğaltmayı ayarlama arasındaki dengeler arasında gezinirken daha fazla denetim sağlar.

"Yüksek oranda kullanılabilir" bir NoSQL veritabanı kümesinde veri çoğaltmalarının bağlantısı kesilirse, veritabanına yazma işlemini yine de tamamlayabilirsiniz. Veritabanı kümesi yazma işlemine izin verir ve kullanılabilir olduğunda her veri çoğaltmasını güncelleştirir. Birden çok yazılabilir çoğaltmayı destekleyen NoSQL veritabanları, kurtarma süresi hedefini iyileştirirken yük devretme gereksinimini önleyerek yüksek kullanılabilirliği daha da güçlendirebilir.

Modern NoSQL veritabanları genellikle sistem tasarımının bir özelliği olarak bölümleme özelliklerini uygular. Bölüm yönetimi genellikle veritabanında yerleşik olarak bulunur ve yönlendirme, genellikle bölüm anahtarları olarak adlandırılan yerleştirme ipuçları aracılığıyla elde edilir. Esnek veri modelleri, NoSQL veritabanlarının şema yönetimi yükünü azaltmasını ve veri modeli değişiklikleri gerektiren uygulama güncelleştirmelerini dağıtırken kullanılabilirliği geliştirmesini sağlar.

Yüksek kullanılabilirlik ve yüksek ölçeklenebilirlik genellikle iş için ilişkisel tablo birleşimlerinden ve bilgi tutarlılığından daha önemlidir. Geliştiriciler nihai tutarlılığı benimsemek için Sagas, CQRS ve zaman uyumsuz mesajlaşma gibi teknikler ve desenler uygulayabilir.

Günümüzde CAP teorem kısıtlamaları dikkate alınırken dikkatli olunmalıdır. İlişkisel veritabanı altyapısını hem yatay ölçeklenebilirliği hem de NoSQL sistemlerinin ölçeklenebilir performansını destekleyecek şekilde genişleten NewSQL adlı yeni bir veritabanı türü ortaya çıktı.

İlişkisel ve NoSQL sistemleri için dikkat edilmesi gerekenler

Belirli veri gereksinimlerine bağlı olarak, bulutta yerel tabanlı bir mikro hizmet ilişkisel, NoSQL veri deposu veya her ikisini birden uygulayabilir.

Aşağıdaki durumlarda bir NoSQL veri deposu kullanmayı göz önünde bulundurun: Aşağıdaki durumlarda ilişkisel veritabanı kullanmayı göz önünde bulundurun:
Büyük ölçekte tahmin edilebilir gecikme süresi gerektiren yüksek hacimli iş yükleriniz var (örneğin, saniyede milyonlarca işlem gerçekleştirirken milisaniye cinsinden ölçülen gecikme süresi) İş yükü hacminiz genellikle saniyede binlerce işlem içinde yer alır
Verileriniz dinamiktir ve sık sık değişir Verileriniz yüksek oranda yapılandırılmıştır ve bilgi tutarlılığı gerektirir
İlişkiler normalleştirilmiş veri modelleri olabilir İlişkiler, normalleştirilmiş veri modellerindeki tablo birleştirmeleri aracılığıyla ifade edilir
Veri alma basittir ve tablo birleştirmeleri olmadan ifade edilir Karmaşık sorgular ve raporlarla çalışıyorsunuz
Veriler genellikle coğrafyalar arasında çoğaltılır ve tutarlılık, kullanılabilirlik ve performans üzerinde daha ayrıntılı denetim gerektirir Veriler genellikle merkezidir veya bölgeler zaman uyumsuz olarak çoğaltılabilir
Uygulamanız, genel bulutlar gibi ticari donanımlara dağıtılır Uygulamanız büyük, üst düzey donanıma dağıtılacak

Sonraki bölümlerde, Bulutta yerel verilerinizi depolamak ve yönetmek için Azure bulutunda sağlanan seçenekleri keşfedeceğiz.

Hizmet Olarak Veritabanı

Başlamak için bir Azure sanal makinesi sağlayabilir ve her hizmet için tercih ettiğiniz veritabanını yükleyebilirsiniz. Ortam üzerinde tam denetim sahibi olmanıza karşın, bulut platformunun birçok yerleşik özelliğinden faydalanmanız gerekir. Ayrıca her hizmet için sanal makineyi ve veritabanını yönetmek sizin sorumluluğundadır. Bu yaklaşım hızlı bir şekilde zaman alıcı ve pahalı hale gelebilir.

Bunun yerine, buluta özel uygulamalar Hizmet Olarak Veritabanı (DBaaS) olarak kullanıma sunulan veri hizmetlerini destekler. Bir bulut satıcısı tarafından tam olarak yönetilen bu hizmetler yerleşik güvenlik, ölçeklenebilirlik ve izleme sağlar. Hizmete sahip olmak yerine bunu bir yedekleme hizmeti olarak kullanmanız yeterlidir. Sağlayıcı, kaynağı büyük ölçekte çalıştırır ve performans ve bakım sorumluluğunu üstlenir.

Bunlar, yüksek kullanılabilirlik elde etmek için bulut kullanılabilirlik alanları ve bölgeleri arasında yapılandırılabilir. Hepsi tam zamanında kapasiteyi ve kullandıkça öde modelini destekler. Azure, her biri belirli avantajlara sahip farklı türde yönetilen veri hizmeti seçeneklerine sahiptir.

İlk olarak Azure'da kullanılabilen ilişkisel DBaaS hizmetlerine göz atacağız. Microsoft'un amiral gemisi SQL Server veritabanının çeşitli açık kaynak seçenekleriyle birlikte kullanılabilir olduğunu göreceksiniz. Ardından Azure'daki NoSQL veri hizmetleri hakkında konuşacağız.

Azure ilişkisel veritabanları

İlişkisel veriler gerektiren bulutta yerel mikro hizmetler için Azure, Şekil 5-11'de gösterilen dört yönetilen ilişkisel hizmet olarak veritabanı (DBaaS) teklifi sunar.

Managed relational databases in Azure

Şekil 5-11. Azure'da kullanılabilen yönetilen ilişkisel veritabanları

Önceki şekilde, her birinin ek ücret ödemeden temel özelliklere sahip ortak bir DBaaS altyapısı üzerinde nasıl durduğuna dikkat edin.

Bu özellikler özellikle çok sayıda veritabanı sağlayan ancak bunları yönetmek için kaynakları sınırlı olan kuruluşlar için önemlidir. İşlem çekirdeklerinin, belleğin ve temel alınan depolama alanının miktarını seçerek dakikalar içinde bir Azure veritabanı sağlayabilirsiniz. Veritabanını anında ölçeklendirebilir ve kaynakları çok az kapalı kalma süresiyle dinamik olarak ayarlayabilirsiniz.

Azure SQL Veritabanı

Microsoft SQL Server konusunda uzman olan geliştirme ekipleri Azure SQL Veritabanı göz önünde bulundurmalıdır. Microsoft SQL Server Veritabanı Altyapısı'nı temel alan, tam olarak yönetilen bir hizmet olarak ilişkisel veritabanıdır (DBaaS). Hizmet, SQL Server'ın şirket içi sürümünde bulunan birçok özelliği paylaşır ve SQL Server Veritabanı Altyapısı'nın en son kararlı sürümünü çalıştırır.

Bulutta yerel bir mikro hizmetle kullanmak için üç dağıtım seçeneğiyle Azure SQL Veritabanı kullanılabilir:

  • Tek Veritabanı, Azure bulutundaki bir Azure SQL Veritabanı sunucusunda çalışan tam olarak yönetilen bir SQL Veritabanı temsil eder. Temel alınan veritabanı sunucusunda yapılandırma bağımlılıkları olmadığından veritabanı kapsanmış olarak kabul edilir.

  • Yönetilen Örnek, Microsoft SQL Server Veritabanı Altyapısı'nın şirket içi SQL Server ile %100'e yakın uyumluluk sağlayan tam olarak yönetilen bir örneğidir. Bu seçenek 35 TB'a kadar daha büyük veritabanlarını destekler ve daha iyi yalıtım için bir Azure Sanal Ağ yerleştirilir.

  • sunucusuz Azure SQL Veritabanı, iş yükü talebine göre otomatik olarak ölçeklendirilen tek bir veritabanı için işlem katmanıdır. Yalnızca saniye başına kullanılan işlem miktarı için faturalar. Hizmet, aralıklı, öngörülemeyen kullanım desenleri olan ve işlem yapılmayan dönemlerle kesişen iş yükleri için çok uygundur. Sunucusuz işlem katmanı, yalnızca depolama ücretlerinin faturalandırılabilmesi için etkin olmayan dönemlerde veritabanlarını otomatik olarak duraklatır. Etkinlik geri döndüğünde otomatik olarak sürdürülür.

Azure, geleneksel Microsoft SQL Server yığınının ötesinde üç popüler açık kaynak veritabanının yönetilen sürümlerini de içerir.

Azure'da açık kaynak veritabanları

Açık kaynak ilişkisel veritabanları, buluta özel uygulamalar için popüler bir seçenek haline gelmiştir. Birçok kuruluş, özellikle maliyet tasarrufu için ticari veritabanı ürünlerine göre onları destekliyor. Birçok geliştirme ekibi esneklik, topluluk destekli geliştirme ve araç ve uzantı ekosisteminin keyfini çıkarır. Açık kaynak veritabanları birden çok bulut sağlayıcısı arasında dağıtılabilir ve bu da "satıcının kilitlenmesi" endişesini en aza indirmeye yardımcı olur.

Geliştiriciler, Azure VM'sinde herhangi bir açık kaynak veritabanını kolayca kendi kendine barındırabilir. Tam denetim sağlarken, bu yaklaşım sizi veritabanı ve VM'nin yönetimi, izlemesi ve bakımı için kancaya bağlar.

Ancak Microsoft, birçok popüler açık kaynak veritabanını tam olarak yönetilen DBaaS hizmetleri olarak sunarak Azure'ı "açık platform" tutma taahhüdünü sürdürmektedir.

MySQL için Azure Veritabanı

MySQL açık kaynak ilişkisel veritabanı ve LAMP yazılım yığını üzerinde oluşturulan uygulamalar için bir yapı taşıdır. Yoğun okunan iş yükleri için yaygın olarak seçilen bu iş yükleri Facebook, Twitter ve YouTube gibi birçok büyük kuruluş tarafından kullanılır. Topluluk sürümü ücretsiz olarak kullanılabilirken, kurumsal sürüm için lisans satın alınması gerekir. İlk olarak 1995 yılında oluşturulan ürün, 2008 yılında Sun Microsystems tarafından satın alınmıştır. Oracle, Sun ve MySQL'i 2010 yılında satın aldı.

MySQL için Azure Veritabanı, açık kaynak MySQL Sunucu altyapısını temel alan yönetilen bir ilişkisel veritabanı hizmetidir. MySQL Community sürümünü kullanır. Azure MySQL sunucusu, hizmetin yönetim noktasıdır. Şirket içi dağıtımlar için kullanılan MySQL sunucu altyapısıyla aynıdır. Altyapı, sunucu başına tek bir veritabanı veya kaynakları paylaşan sunucu başına birden çok veritabanı oluşturabilir. Yeni beceriler öğrenmek veya sanal makineleri yönetmek zorunda kalmadan aynı açık kaynak araçları kullanarak verileri yönetmeye devam edebilirsiniz.

MariaDB için Azure Veritabanı

MariaDB Sunucusu bir diğer popüler açık kaynak veritabanı sunucusudur. Oracle, MySQL'in sahibi olan Sun Microsystems'ı satın alırken MySQL'in çatalı olarak oluşturulmuştur. Amaç MariaDB'nin açık kaynak olarak kalmasını sağlamaktı. MariaDB, MySQL'in bir çatalı olduğundan, veriler ve tablo tanımları uyumludur ve istemci protokolleri, yapıları ve API'leri birbirine bağlıdır.

MariaDB güçlü bir topluluğa sahiptir ve birçok büyük kuruluş tarafından kullanılmaktadır. Oracle MySQL'i korumaya, geliştirmeye ve desteklemeye devam ederken MariaDB altyapısı MariaDB'yi yöneterek ürüne ve belgelere genel katkılar sağlar.

MariaDB için Azure Veritabanı, Azure bulutunda hizmet olarak tam olarak yönetilen bir ilişkisel veritabanıdır. Hizmet, MariaDB topluluk sürümü sunucu altyapısını temel alır. Görev açısından kritik iş yüklerini tahmin edilebilir performans ve dinamik ölçeklenebilirlikle işleyebilir.

PostgreSQL için Azure Veritabanı

PostgreSQL , 30 yıldan fazla etkin geliştirmeye sahip açık kaynaklı bir ilişkisel veritabanıdır. PostgreSQL, güvenilirlik ve veri bütünlüğü açısından güçlü bir üne sahiptir. Özellikle karmaşık sorgulara ve yoğun yazma işlemlerine sahip iş yükleri için zengin, SQL uyumlu ve MySQL'den daha yüksek performanslı olarak kabul edilir. Apple, Red Hat ve Fujitsu dahil olmak üzere birçok büyük kuruluş PostgreSQL kullanarak ürünler inşa etti.

PostgreSQL için Azure Veritabanı, açık kaynak Postgres veritabanı altyapısını temel alan, tam olarak yönetilen bir ilişkisel veritabanı hizmetidir. Hizmet C++, Java, Python, Node, C# ve PHP gibi birçok geliştirme platformunu destekler. Komut satırı arabirim aracını veya Azure Veri Geçiş Hizmeti'ni kullanarak PostgreSQL veritabanlarını buna geçirebilirsiniz.

PostgreSQL için Azure Veritabanı iki dağıtım seçeneğiyle kullanılabilir:

  • Tek Sunucu dağıtım seçeneği, birden çok veritabanını dağıtabileceğiniz birden çok veritabanı için merkezi bir yönetim noktasıdır. Fiyatlandırma, çekirdeklere ve depolamaya göre sunucu başına yapılandırılmıştır.

  • Hiper Ölçek (Citus) seçeneği Citus Data teknolojisiyle desteklenir. Hızlı performans ve ölçek sunmak için tek bir veritabanını yüzlerce düğüm arasında yatay olarak ölçeklendirerek yüksek performans sağlar. Bu seçenek altyapının belleğe daha fazla veri sığdırmasını, yüzlerce düğüm arasında sorguları paralelleştirmesini ve verileri daha hızlı dizinlemesini sağlar.

Azure'da NoSQL verileri

Cosmos DB, Azure bulutunda tam olarak yönetilen, genel olarak dağıtılmış bir NoSQL veritabanı hizmetidir. Coca-Cola, Skype, ExxonMobil ve Liberty Mutual gibi birçok büyük şirket tarafından benimsenmiştir.

Hizmetleriniz dünyanın her yerinden hızlı yanıt, yüksek kullanılabilirlik veya esnek ölçeklenebilirlik gerektiriyorsa Cosmos DB harika bir seçimdir. Şekil 5-12'de Cosmos DB gösterilmektedir.

Overview of Cosmos DB

Şekil 5-12: Azure Cosmos DB'ye Genel Bakış

Önceki şekilde Cosmos DB'de bulunan yerleşik bulutta yerel özelliklerin birçoğu gösterilmektedir. Bu bölümde bunlara daha yakından bakacağız.

Global destek

Bulutta yerel uygulamalar genellikle genel bir hedef kitleye sahiptir ve küresel ölçek gerektirir.

Cosmos veritabanlarını bölgelere veya dünyanın dört bir yanındaki bölgelere dağıtabilir, verileri kullanıcılarınıza yaklaştırabilir, yanıt süresini iyileştirebilir ve gecikme süresini kısaltabilirsiniz. Hizmetlerinizi duraklatmadan veya yeniden dağıtmadan bir bölgeden veritabanı ekleyebilir veya kaldırabilirsiniz. Arka planda Cosmos DB, verileri yapılandırılan bölgelerin her birine saydam olarak çoğaltır.

Cosmos DB, genel düzeyde etkin/etkin kümelemeye olanak tanıyarak veritabanı bölgelerinizin herhangi birini hem yazma hem de okumaları destekleyecek şekilde yapılandırmanıza olanak tanır.

Çok bölgeli yazma protokolü, Cosmos DB'de aşağıdaki işlevleri sağlayan önemli bir özelliktir:

  • Sınırsız esnek yazma ve okuma ölçeklenebilirliği.

  • Tüm dünyada %99,999 okuma ve yazma kullanılabilirliği.

  • 99. yüzdebirlik dilimde 10 milisaniyeden kısa sürede sunulan garantili okuma ve yazma işlemleri.

Cosmos DB Çok Girişli API'ler sayesinde mikro hizmetiniz en yakın Azure bölgesini otomatik olarak algılar ve istekler gönderir. En yakın bölge Cosmos DB tarafından herhangi bir yapılandırma değişikliği olmadan tanımlanır. Bir bölge kullanılamaz duruma gelirse, Çoklu Giriş özelliği istekleri otomatik olarak kullanılabilir bir sonraki bölgeye yönlendirir.

Çok modelli destek

Monolitik uygulamaları buluta özel bir mimariye yeniden dağıtırken, geliştirme ekiplerinin bazen açık kaynak NoSQL veri depolarını geçirmesi gerekir. Cosmos DB, çok modelli veri platformuyla bu NoSQL veri depolarına yaptığınız yatırımı korumanıza yardımcı olabilir. Aşağıdaki tabloda desteklenen NoSQL uyumluluk API'leri gösterilmektedir.

Provider Açıklama
NoSQL API NoSQL için API verileri belge biçiminde depolar
Mongo DB API Mongo DB API'lerini ve JSON belgelerini destekler
Gremlin API Graf tabanlı düğümler ve uç veri gösterimleri ile Gremlin API'lerini destekler
Cassandra API’si Geniş sütunlu veri gösterimleri için Casandra API'sini destekler
Tablo API’si Premium geliştirmelerle Azure Tablo Depolama destekler
PostgreSQL API'si PostgreSQL'i herhangi bir ölçekte çalıştırmak için yönetilen hizmet

Geliştirme ekipleri mevcut Mongo, Gremlin veya Cassandra veritabanlarını cosmos DB'ye geçirerek veri veya kodda en az değişiklik yapabilir. Yeni uygulamalar için geliştirme ekipleri açık kaynak seçenekleri veya yerleşik SQL API modeli arasından seçim yapabilir.

Cosmos, verileri dahili olarak ilkel veri türlerinden oluşan basit bir yapı biçiminde depolar. Veritabanı altyapısı her istek için ilkel verileri seçtiğiniz model gösterimine çevirir.

Önceki tabloda Tablo API'si seçeneğine dikkat edin. Bu API, Azure Tablo Depolama'nin bir evrimidir. Her ikisi de aynı temel tablo modelini paylaşır, ancak Cosmos DB Tablo API'si, Azure Depolama API'sinde kullanılamayan premium iyileştirmeler ekler. Aşağıdaki tabloda özellikler karşıttır.

Özellik Azure Tablo Depolaması Azure Cosmos DB
Gecikme süresi Hızlı Dünyanın herhangi bir yerindeki okuma ve yazma işlemleri için tek basamaklı milisaniyelik gecikme süresi
Aktarım hızı Tablo başına 20.000 işlem sınırı Tablo başına sınırsız işlem
Genel Dağıtım İsteğe bağlı tek ikincil okuma bölgesi olan tek bölge Otomatik yük devretme ile tüm bölgelere anahtar teslim dağıtımları
Dizinleme Yalnızca bölüm ve satır anahtarı özellikleri için kullanılabilir Tüm özelliklerin otomatik dizin oluşturması
Fiyatlandırma Soğuk iş yükleri için iyileştirilmiş (düşük aktarım hızı : depolama oranı) Sık erişimli iş yükleri için iyileştirilmiş (yüksek aktarım hızı : depolama oranı)

Azure Tablo depolaması kullanan mikro hizmetler Cosmos DB Tablo API'sine kolayca geçiş yapabilir. Kod değişikliği gerekmez.

Ayarlanabilir tutarlılık

daha önce İlişkisel ve NoSQL bölümünde veri tutarlılığı konusunu ele aldık. Veri tutarlılığı, verilerinizin bütünlüğünü ifade eder. Dağıtılmış verilere sahip buluta özel hizmetler çoğaltmaya dayanır ve okuma tutarlılığı, kullanılabilirlik ve gecikme süresi arasında temel bir denge sağlamalıdır.

Çoğu dağıtılmış veritabanı, geliştiricilerin iki tutarlılık modeli arasında seçim yapmalarına olanak tanır: güçlü tutarlılık ve nihai tutarlılık. Güçlü tutarlılık , veri programlamanın altın standardıdır. Bir güncelleştirmenin tüm veritabanı kopyalarında çoğaltılması için sistemin gecikmeye neden olması gerekse bile, sorgunun her zaman en güncel verileri döndürmesini garanti eder. Nihai tutarlılık için yapılandırılmış bir veritabanı, en güncel kopya olmasa bile verileri hemen döndürür. İkinci seçenek daha yüksek kullanılabilirlik, daha yüksek ölçek ve daha yüksek performans sağlar.

Azure Cosmos DB, Şekil 5-13'te gösterilen beş iyi tanımlanmış tutarlılık modeli sunar.

Cosmos DB consistency graph

Şekil 5-13: Cosmos DB Tutarlılık Düzeyleri

Bu seçenekler tutarlılık, kullanılabilirlik ve verileriniz için performans için hassas seçimler ve ayrıntılı dengeler oluşturmanıza olanak tanır. Düzeyler aşağıdaki tabloda sunulmuştur.

Tutarlılık Düzeyi Açıklama
Nihai Okuma için sipariş garantisi yok. Çoğaltmalar sonunda birleşecektir.
Sabit Ön Ek Okuma işlemleri hala nihaidir, ancak veriler yazıldığı sırayla döndürülür.
Oturum Geçerli oturum sırasında yazılan tüm verileri okuyabileceğinizi garanti eder. Varsayılan tutarlılık düzeyidir.
Sınırlanmış Eskime Durumu Belirttiğiniz aralıklara göre iz yazmalarını okur.
Güçlü Okumaların bir öğenin en son kaydedilmiş sürümünü döndürmesi garanti edilir. İstemci hiçbir zaman kaydedilmemiş veya kısmi okuma görmez.

Microsoft Program Yöneticisi Jeremy Likness, 9-Ball: Cosmos DB Tutarlılık Düzeylerinin Arkasına Geçin makalesinde beş modelin mükemmel bir açıklamasını sunmaktadır.

Bölümleme

Azure Cosmos DB, buluta özel hizmetlerinizin performans gereksinimlerini karşılayacak şekilde veritabanını ölçeklendirmek için otomatik bölümlemesi benimser.

Veritabanları, kapsayıcılar ve öğeler oluşturarak Cosmos DB'deki verileri yönetirsiniz.

Kapsayıcılar bir Cosmos DB veritabanında bulunur ve öğelerin şemadan bağımsız gruplandırmalarını temsil eder. Öğeler, kapsayıcıya eklediğiniz verilerdir. Bunlar belge, satır, düğüm veya kenar olarak temsil edilir. Kapsayıcıya eklenen tüm öğeler otomatik olarak dizine eklenir.

Kapsayıcıyı bölümlendirmek için, öğeler mantıksal bölümler olarak adlandırılan ayrı alt kümelere ayrılır. Mantıksal bölümler, bir kapsayıcıdaki her öğeyle ilişkili bölüm anahtarının değerine göre doldurulur. Şekil 5-14'te her birinin bir bölüm anahtarı değerini temel alan mantıksal bölüme sahip iki kapsayıcı gösterilmektedir.

Cosmos DB partitioning mechanics

Şekil 5-14: Cosmos DB bölümleme mekaniği

Önceki şekilde, her öğenin 'city' veya 'airport' bölüm anahtarını nasıl içerdiğine dikkat edin. Anahtar, öğenin mantıksal bölümünü belirler. Şehir kodu olan öğeler soldaki kapsayıcıya, havaalanı koduna sahip öğeler ise sağ taraftaki kapsayıcıya atanır. Bölüm anahtarı değerini kimlik değeriyle birleştirmek, öğeyi benzersiz olarak tanımlayan bir öğenin dizinini oluşturur.

Cosmos DB, kapsayıcının ölçeklenebilirlik ve performans gereksinimlerini karşılamak için fiziksel bölümlere mantıksal bölümlerin yerleştirilmesini şirket içinde otomatik olarak yönetir. Uygulama aktarım hızı ve depolama gereksinimleri arttıkça, Azure Cosmos DB mantıksal bölümleri daha fazla sayıda sunucu arasında yeniden dağıtır. Yeniden dağıtım işlemleri Cosmos DB tarafından yönetilir ve kesinti veya kapalı kalma süresi olmadan çağrılır.

NewSQL veritabanları

NewSQL, NoSQL'in dağıtılmış ölçeklenebilirliğini ilişkisel veritabanının ACID garantileriyle birleştiren yeni bir veritabanı teknolojisidir. NewSQL veritabanları, dağıtılmış ortamlarda tam işlem desteği ve ACID uyumluluğu ile yüksek hacimli verileri işlemesi gereken iş sistemleri için önemlidir. NoSQL veritabanı yüksek düzeyde ölçeklenebilirlik sağlasa da veri tutarlılığını garanti etmez. Tutarsız verilerden kaynaklanan aralıklı sorunlar geliştirme ekibine yük oluşturabilir. Geliştiricilerin tutarsız verilerden kaynaklanan sorunları yönetmek için mikro hizmet kodlarında korumalar oluşturması gerekir.

Cloud Native Computing Foundation (CNCF) birçok NewSQL veritabanı projesine sahiptir.

Proje Özellikler
Hamamböceği DB Küresel olarak ölçeklendirilen ACID uyumlu, ilişkisel bir veritabanı. Kümeye yeni bir düğüm eklediğinizde, CockroachDB verileri örnekler ve coğrafyalar arasında dengelemeyi üstlenir. Güvenilirliği sağlamak için çoğaltmalar oluşturur, yönetir ve dağıtır. açık kaynak ve ücretsiz olarak kullanılabilir.
TiDB Karma İşlem ve Analitik İşleme (HTAP) iş yüklerini destekleyen bir açık kaynak veritabanı. MySQL uyumlu olup yatay ölçeklenebilirlik, güçlü tutarlılık ve yüksek kullanılabilirlik özelliklerine sahiptir. TiDB bir MySQL sunucusu gibi davranır. Uygulamanızda kapsamlı kod değişikliklerine gerek kalmadan mevcut MySQL istemci kitaplıklarını kullanmaya devam edebilirsiniz.
YugabyteDB açık kaynak, yüksek performanslı, dağıtılmış bir SQL veritabanı. Düşük sorgu gecikme süresini, hatalara karşı dayanıklılığı ve genel veri dağıtımlarını destekler. YugabyteDB PostgreSQL uyumludur ve ölçeği genişleten RDBMS ve internet ölçeğindeki OLTP iş yüklerini işler. Ürün ayrıca NoSQL'i destekler ve Cassandra ile uyumludur.
Vitess Vitess, MySQL örneklerinin büyük kümelerini dağıtmaya, ölçeklendirmeye ve yönetmeye yönelik bir veritabanı çözümüdür. Genel veya özel bulut mimarisinde çalıştırılabilir. Vitess birçok önemli MySQL özelliğini birleştirir ve genişletir ve hem dikey hem de yatay parçalama desteği sunar. YouTube'dan kaynaklanan Vitess, 2011'den beri tüm YouTube veritabanı trafiğine hizmet ediyor.

Önceki şekildeki açık kaynak projeleri Cloud Native Computing Foundation'dan edinilebilir. Tekliflerden üçü, .NET desteği içeren tam veritabanı ürünleridir. Diğer adı Vitess, MySQL örneklerinin büyük kümelerini yatay olarak ölçeklendiren bir veritabanı kümeleme sistemidir.

NewSQL veritabanları için temel tasarım hedeflerinden biri, platformun dayanıklılığından ve ölçeklenebilirliğinden yararlanarak Kubernetes'te yerel olarak çalışmaktır.

NewSQL veritabanları, temel alınan sanal makinelerin bir an önce yeniden başlatılabildiği veya yeniden zamanlandığı kısa süreli bulut ortamlarında başarılı olacak şekilde tasarlanmıştır. Veritabanları, veri kaybı veya kapalı kalma süresi olmadan düğüm hatalarından kurtulmak için tasarlanmıştır. Örneğin CockroachDB, kümedeki düğümler arasında verilerin üç tutarlı çoğaltmasını koruyarak makine kaybından kurtulabilir.

Kubernetes, istemcinin tek bir DNS girdisinden aynı NewSQL veritabanı işlemlerinin bir grubunu ele almasına izin vermek için Bir Hizmetler yapısı kullanır. Veritabanı örneklerini ilişkili olduğu hizmetin adresinden ayrıştırarak, mevcut uygulama örneklerini kesintiye uğratmadan ölçeklendirebiliriz. Belirli bir zamanda herhangi bir hizmete istek göndermek her zaman aynı sonucu verir.

Bu senaryoda, tüm veritabanı örnekleri eşittir. Birincil veya ikincil ilişki yoktur. CockroachDB'de bulunan konsensüs çoğaltması gibi teknikler, herhangi bir veritabanı düğümlerinin herhangi bir isteği işlemesine olanak sağlar. Yük dengeli bir istek alan düğümde yerel olarak ihtiyaç duyduğu veriler varsa hemen yanıt verir. Aksi takdirde düğüm bir ağ geçidine dönüşür ve doğru yanıtı almak için isteği uygun düğümlere iletir. İstemcinin perspektifinden bakıldığında, her veritabanı düğümü aynıdır: Arka planda çalışan onlarca ve hatta yüzlerce düğüm olmasına rağmen tek makineli sistemin tutarlılık garantilerine sahip tek bir mantıksal veritabanı olarak görünürler.

NewSQL veritabanlarının arkasındaki mekaniklere ayrıntılı bir bakış için DASH: Kubernetes-Native Databases'in Dört Özelliği makalesine bakın.

Buluta veri geçişi

Daha fazla zaman alan görevlerden biri, verileri bir veri platformundan diğerine geçirmektir. Azure Veri Geçiş Hizmeti bu tür çalışmaların hızlandırılmasında yardımcı olabilir. Birkaç dış veritabanı kaynağındaki verileri en düşük kapalı kalma süresiyle Azure Veri platformlarına geçirebilir. Hedef platformlar aşağıdaki hizmetleri içerir:

  • Azure SQL Veritabanı
  • MySQL için Azure Veritabanı
  • MariaDB için Azure Veritabanı
  • PostgreSQL için Azure Veritabanı
  • Azure Cosmos DB

Hizmet, küçük veya büyük bir geçişi yürütmek için gereken değişikliklerde size yol gösterecek öneriler sağlar.