Veri depolama seçenekleri (Azure ile gerçek dünyada bulut uygulamaları oluşturma)

, Mike te son, Rick Anderson, Tom Dykstra tarafından

Onarma projesini indirin veya E-kitabı indirin

Azure e-book Ile gerçek dünyada bulut uygulamaları oluşturma , Scott Guthrie tarafından geliştirilen bir sunuyu temel alır. Bulut için Web Apps 'i başarılı bir şekilde geliştirmeye yardımcı olabilecek 13 desen ve uygulamaları açıklar. E-kitap hakkında daha fazla bilgi için ilk bölümebakın.

Çoğu kişi ilişkisel veritabanları için kullanılır ve bir bulut uygulaması tasarlarken diğer veri depolama seçeneklerini çok daha fazla inceleyelim. NoSQL (ilişkisel olmayan) veritabanları, bazı görevleri ilişkisel veritabanlarından daha verimli bir şekilde işleyebildiğinden, sonuç en az performans, yüksek masraf veya daha kötü olabilir. Müşteriler önemli bir veri depolama sorununu çözmenize yardımcı olmak için, bu genellikle NoSQL seçeneklerinden birinin daha iyi çalıştığı ilişkisel bir veritabanına sahip olduğu için. Bu durumlarda, uygulamayı üretime dağıtmaya başlamadan önce NoSQL çözümünü uyguladıysanız, müşteri daha iyi bir şekilde kapalıdır.

Diğer taraftan, bir NoSQL veritabanının her şeyi de ve yeterince iyi yapabildiği varsayımında de bir hata olabilir. Tüm veri depolama görevleri için tek bir en iyi veri yönetimi seçimi yoktur; farklı veri yönetimi çözümleri farklı görevler için iyileştirilmiştir. Çoğu gerçek dünyada bulut uygulamalarının çeşitli veri depolama gereksinimleri vardır ve genellikle birden çok veri depolama çözümünün bir birleşimiyle en iyi şekilde sunulur.

Bu bölümün amacı, bir bulut uygulaması tarafından kullanılabilen veri depolama seçenekleri hakkında daha geniş bir fikir sahibi olmak ve senaryonuza uygun olanları seçme hakkında bazı temel kılavuzumuzu sağlamaktır. Size sunulan seçenekleri bilmeniz ve bir uygulama geliştirmeden önce güçlü ve zayıf yönleri hakkında düşünün. Bir üretim uygulamasındaki veri depolama seçeneklerini değiştirmek, düzlem uçuş sırasında bir Jet motorunu değiştirmek gibi son derece zor olabilir.

Azure 'da veri depolama seçenekleri

Bulut, çeşitli ilişkisel ve NoSQL veri depolarının kullanımını nispeten kolaylaştırır. Azure 'da kullanabileceğiniz bazı veri depolama platformları aşağıda verilmiştir.

Tabloda dört tür NoSQL veritabanı gösterilmektedir:

  • Anahtar/değer veritabanları her anahtar değeri için tek bir seri hale getirilmiş nesne depolar. Belirli bir anahtar değeri için bir öğe almak istediğiniz büyük hacimde verilerin depolanması ve öğenin diğer özelliklerine göre sorgu yapmanız gerekmez.

    Azure Blob depolama , dosya ve dosya adlarına karşılık gelen anahtar değerleriyle bulutta dosya depolama gibi işlev gören bir anahtar/değer veritabanıdır. Dosya içeriğindeki değerleri arayarak değil, klasör ve dosya adına göre bir dosya alırsınız.

    Azure Tablo Depolaması Ayrıca bir anahtar/değer veritabanıdır. Her değere bir varlık (bir bölüm anahtarı ve satır anahtarı tarafından tanımlanan bir satıra benzer) ve birden çok özellik (sütunlara benzer ancak tablodaki tüm varlıkların aynı sütunları paylaşması gerekmez) olarak adlandırılır. Anahtar dışındaki sütunlarda sorgulama son derece verimsiz olur ve kaçınılmalıdır. Örneğin, tek bir kullanıcı hakkında bilgi depolayan bir bölümle Kullanıcı profili verilerini saklayabilirsiniz. Kullanıcı adı, Parola karması, Doğum tarihi vb. gibi verileri, bir varlığın ayrı özelliklerinde veya aynı bölümdeki ayrı varlıklarda saklayabilirsiniz. Ancak belirli bir Doğum tarihi aralığına sahip tüm kullanıcıları sorgulamak istemezsiniz ve profil tablonuz ile başka bir tablo arasında bir JOIN sorgusu çalıştıramazsınız. Tablo depolama, ilişkisel bir veritabanından daha ölçeklenebilir ve daha pahalıdır, ancak karmaşık sorguları veya birleştirmeleri etkinleştirmez.

  • Documentdatabases , değerleri Belgelerolan anahtar/değer veritabanlarıdır. Burada "belge" sözcük veya Excel belgesi açısından kullanılmaz, ancak bir alt belge olabilecek adlandırılmış alanlar ve değerler koleksiyonu anlamına gelir. Örneğin, bir sipariş geçmişi tablosunda sipariş belgesi sipariş numarası, sipariş tarihi ve müşteri alanları olabilir; ve müşteri alanında ad ve adres alanları bulunabilir. Veritabanı, alan verilerini XML, YAML, JSON veya BSON; gibi bir biçimde kodlar. ya da düz metin kullanabilir. Anahtar/değer veritabanlarından ayrı olarak belge veritabanlarını ayarlayan bir özellik, anahtar olmayan alanları sorgulama ve sorgu kullanımını daha verimli hale getirmek için ikincil dizinler tanımlama olanağıdır. Bu özellik bir belge veritabanını, ölçütlere göre verileri alması gereken uygulamalar için belge anahtarı değerinden daha karmaşık hale getirir. Örneğin, bir satış siparişi geçmişi belge veritabanında ürün KIMLIĞI, müşteri KIMLIĞI, müşteri adı vb. gibi çeşitli alanlarda sorgulama yapabilirsiniz. MongoDB , popüler bir belge veritabanıdır.

  • Sütun ailesi veritabanları , veri depolamayı sütun aileleri adlı ilgili sütunların koleksiyonlarına yapınızı sağlayan anahtar/değer veri depolarıdır. Örneğin, bir görselleştirmenizdeki veritabanında bir kişinin adı (ilk, orta, son), kişi adresi için bir grup ve kişinin profil bilgileri (DOB, cinsiyet vb.) için bir grup sütun grubu olabilir. Veritabanı daha sonra her bir sütun ailesini ayrı bir bölümde saklayabilir, bu arada aynı anahtarla ilgili tüm verileri bir kişi için tutun. Daha sonra tüm ad ve adres bilgilerini de okumak zorunda kalmadan tüm profil bilgilerini okuyabilirsiniz. Cassandra popüler bir sütun ailesi veritabanıdır.

  • Grafik veritabanları , bir nesne ve ilişki koleksiyonu olarak bilgi depolar. Grafik veritabanının amacı, bir uygulamanın nesne ağını ve bunlar arasındaki ilişkileri engelleyen sorguları verimli bir şekilde gerçekleştirmesini sağlamaktır. Örneğin, nesneler insan kaynakları veritabanında çalışanlar olabilir ve "Scott için doğrudan veya dolaylı olarak çalışan tüm çalışanları bul" gibi sorguları kolaylaştırmak isteyebilirsiniz. Neo4j , popüler bir grafik veritabanıdır.

İlişkisel veritabanlarına kıyasla NoSQL seçenekleri, yapılandırılmamış verilerin depolanması ve çözümlenmesi için çok daha fazla ölçeklenebilirlik ve maliyet verimliliği sunar. Zorunluluğunu getirir, ilişkisel veritabanlarının zengin queryabilirlik ve sağlam veri bütünlüğü özelliklerini sağlamayadır. NoSQL, JOIN sorgularına gerek olmadan yüksek hacimle ilgili olan IIS günlük verileri için iyi çalışır. NoSQL, mutlak veri bütünlüğü gerektiren ve firmayla ilgili diğer verilerle birçok ilişki içeren bankacılık işlemleri için de çalışmayacaktır.

Bir NoSQL veritabanının ölçeklenebilirliğini, ilişkisel bir veritabanının queryabilirliği ve işlemsel bütünlüğüyle birleştiren newsql adlı yeni bir veritabanı platformu kategorisi de vardır. NewSQL veritabanları, genellikle "OldSQL" veritabanlarında uygulanması zor olan dağıtılmış depolama ve sorgu işleme için tasarlanmıştır. Nuodb , Azure 'da kullanılabilen bir newsql veritabanı örneğidir.

Hadoop ve MapReduce

NoSQL veritabanlarında depoladığınız yüksek hacimde verilerin zamanında etkili bir şekilde analiz edilmesi zor olabilir. Bunu yapmak için, MapReduce Işlevlerini uygulayan Hadoop gibi bir çerçeve kullanabilirsiniz. Aslında MapReduce işleminin ne olduğu aşağıda verilmiştir:

  • Yalnızca gerçekten çözümlemeniz gereken verilerin veri deposu dışına seçim yaparak işlenmesi gereken verilerin boyutunu sınırlayın. Örneğin, Kullanıcı tabanınızı Doğum yılından daha sonra öğrenmek istiyorsunuz, bu nedenle Kullanıcı profili veri deponuzdan yalnızca Doğum yılından birini seçersiniz.
  • Verileri parçalara ayırın ve işlenmek üzere farklı bilgisayarlara gönderin. Bilgisayar A, 1950-1959 tarih olan kişi sayısını, bilgisayar B 'yi 1960-1969, vb. hesaplar. Bu bilgisayar grubuna Hadoop kümesidenir.
  • Parçaların üzerinde işleme yapıldıktan sonra her bölümün sonuçlarını bir araya getirin. Artık her bir Doğum yılı için kaç kişinin ve bu genel listedeki yüzdeleri hesaplama görevinin görece bir listesi vardır.

Azure 'da, HDInsight , Hadoop gücünü kullanarak büyük verilerden yeni Öngörüler elde etmenizi, çözümlemenize ve bu yenilikleri almanıza olanak sağlar. Örneğin, Web sunucusu günlüklerini çözümlemek için kullanabilirsiniz:

  • Depolama hesabınızda Web sunucusu günlüğünü etkinleştirin. Bu, Azure 'u uygulamanıza yönelik her HTTP isteği için günlükleri blob hizmetine yazacak şekilde ayarlar. Blob hizmeti temel olarak bulut dosya deposıdır ve HDInsight ile birlikte tümleştirilir.

    Blob depolamaya Günlükler

  • Uygulama trafik aldığından, Web sunucusu IIS günlükleri blob depolamaya yazılır.

    Web sunucusu günlükleri

  • Portalda, yeni - veri hizmetleri - HDInsight - hızlı oluştur' a tıklayın ve bir HDInsight küme adı, küme boyutu (HDInsight kümesi veri düğümü sayısı) ve HDInsight kümesi için bir Kullanıcı adı ve parola belirtin.

    HDInsight

Şimdi günlüklerinizi analiz etmek ve şu soruların yanıtlarını almak için MapReduce işlerini ayarlayabilirsiniz:

  • Uygulamamın en fazla veya en az trafik aldığı gün sayısı nedir?
  • Trafiğim hangi ülkelerde geliyor?
  • Trafimin geldiği alanların ortalama komşu geliri nedir? (Size, IP adresine göre komşu gelir sağlayan genel bir veri kümesi vardır ve bunu Web sunucusu günlüklerindeki IP adresiyle eşleştirebilirsiniz.)
  • Komşu gelir sitedeki belirli sayfalarla veya ürünlerle nasıl ilişkilendirimidir?

Daha sonra, bir müşterinin ilgilenme olasılığını veya belirli bir ürünü satın almasını sağlamak üzere reklamları hedeflemek için bunlar gibi soruların yanıtlarını kullanabilirsiniz.

Her şeyi otomatikleştirinbölümünde açıklandığı gibi, portalda yapabileceğiniz çoğu işlev otomatik hale getirilebilir ve bu da HDInsight analiz işlerini ayarlamayı ve yürütmeyi içerir. Tipik bir HDInsight betiği aşağıdaki adımları içerebilir:

  • Bir HDInsight kümesi sağlayın ve BLOB depolama girişi için depolama hesabınıza bağlayın.
  • MapReduce iş yürütülebilir dosyalarını (. jar veya. exe dosyaları) HDInsight kümesine yükleyin.
  • Çıktı verilerini blob depolamaya depolayan bir MapReduce gönderebilirsiniz.
  • İşin tamamlanmasını bekleyin.
  • HDInsight kümesini silin.
  • Blob depolamasındaki çıktıya erişin.

Tüm bunu yapan bir betiği çalıştırarak, HDInsight kümesinin sağlandığı süreyi en aza indirmiş olursunuz. Bu, maliyetlerinizi en aza indirir.

Hizmet olarak platform (PaaS) ve hizmet olarak altyapı (IaaS)

Daha önce listelenen veri depolama seçenekleri hem hizmet olarak platform (PaaS) hem de hizmet olarak altyapı (IaaS) çözümlerini içerir. PaaS, donanım ve yazılım altyapısını yönettiğimiz ve yalnızca hizmeti kullandığınız anlamına gelir. SQL veritabanı, Azure 'un PaaS özelliğidir. Veritabanları için sorun ve arka planda Azure kümeleri, VM 'Leri yapılandırır ve veritabanlarını ayarlar. VM 'lere doğrudan erişiminiz yok ve bunları yönetmek zorunda değilsiniz. IaaS, veri merkezi altyapımızda çalışan VM 'Leri ayarlamış, yapılandırmanıza ve yönetmenize ve bunlara istediğiniz her şeyi yerleştireceğiniz anlamına gelir. Ortak VM yapılandırmalarına yönelik önceden yapılandırılmış VM görüntülerinin galerisini sunuyoruz. Örneğin, Windows Server 2008, Windows Server 2012, BizTalk Server, Oracle WebLogic Server, Oracle Database vb. için önceden yapılandırılmış VM görüntülerini yükleyebilirsiniz.

Azure 'un sunduğu PaaS veri çözümleri şunlardır:

  • Azure SQL veritabanı (eski adıyla SQL Azure). SQL Server temel alan bulut ilişkisel veritabanı.
  • Azure Tablo depolaması. Bir anahtar/değer NoSQL veritabanı.
  • Azure Blob depolama. Bulutta dosya depolama alanı.

IaaS için, bir sanal makineye yükleyebildiği her şeyi çalıştırabilirsiniz, örneğin:

  • SQL Server, Oracle, MySQL, SQL Compact, SQLite veya Postgres gibi ilişkisel veritabanları.
  • Memönbelleğe alınmış, Red, Cassandra ve Riak gibi anahtar/değer veri depoları.
  • HBase gibi sütun veri depoları.
  • MongoDB, Rayvendb ve Couşdb gibi belge veritabanları.
  • Neo4j gibi grafik veritabanları.

Azure 'da veri depolama seçenekleri

IaaS seçeneği neredeyse sınırsız miktarda veri depolama seçeneği sunar ve önceden yapılandırılmış görüntüleri kullanarak VM 'Ler oluşturabileceğiniz için çoğu daha kolay bir şekilde kullanılır. Örneğin, yönetim portalında sanal makineler' e gidin, görüntüler sekmesine tıklayın ve VM deposu 'egit ' e tıklayın.

VM Deposuna Gözat

Daha sonra yüzlerce önceden yapılandırılmış sanal makinegörüntüsünün listesini görürsünüz ve MongoDB, Neo4J, Red, Cassandra veya Couşdb gibi bir veritabanı yönetim sistemi önceden yüklenmiş bir görüntüden sanal makine oluşturabilirsiniz:

VM 'de MongoDB deposu

Azure, IaaS veri depolama seçeneklerini mümkün olduğunca kolay hale getirir, ancak PaaS tekliflerinin birçok senaryo için daha uygun maliyetli ve pratik hale getiren birçok avantajı vardır:

  • VM oluşturmanız gerekmez, yalnızca portalı veya bir komut dosyası kullanarak bir veri deposu kurabilirsiniz. 200 terabaytlık bir veri deposu istiyorsanız, yalnızca bir düğmeye tıklayabilir veya bir komut çalıştırabilir ve saniyeler içinde kullanabileceğiniz şekilde bu şekilde kullanılabilir.
  • Hizmet tarafından kullanılan VM 'Leri yönetmeniz veya yama yapmanız gerekmez; Microsoft bunu sizin için otomatik olarak yapar.-altyapıyı ölçekleme veya yüksek kullanılabilirlik için ayarlama konusunda endişelenmeniz gerekmez; Microsoft, sizin için tüm bunları işler.
  • Lisans satın almanız gerekmez; lisans ücretleri hizmet ücretlerine dahildir.
  • Sadece kullandığınız kadar ödersiniz.

Azure 'daki PaaS veri depolama seçenekleri, üçüncü taraf sağlayıcıların tekliflerini içerir. Örneğin, bir hizmet olarak MongoDB veritabanı sağlamak için Azure Mağazası 'ndan MongoLab eklentisini seçebilirsiniz.

Veri depolama seçeneği seçme

Tüm senaryolar için hiç bir yaklaşım yok. Birisi bu teknolojinin yanıt olduğunu söyliyorsa, sorabileceğiniz ilk şey "soru nedir?" olarak kabul edilir çünkü farklı çözümler farklı şeyler için iyileştirilmiştir. İlişkisel modelin kesin avantajları vardır; Bu nedenle çok uzun süre içinde. Ancak SQL 'e bir NoSQL çözümüyle ilgili olarak da alt kenarlar de vardır.

Genellikle en iyi iş görtiğimiz, tek bir çözümde SQL ve NoSQL kullandığınız bir kompozisyon yaklaşımda. İnsanlar NoSQL 'i öğreniyor olsa da, çok sayıda farklı NoSQL çerçevesi kullandığının ne olduğunu fark ederseniz, bu nesnelerin daha fazlafarklı NoSQL çerçeveleri kullandığınıöğrenirsiniz. NoSQL kullanan Facebook bile, hizmetin farklı parçaları için farklı NoSQL çerçeveleri kullanır. Veri depolama yaklaşımlarının karıştırilmesi ve eşleşmesi, birden çok veri çözümü kullanmak ve bunları tek bir uygulamada bütünleştirmek için oldukça iyi bir uygulamadır.

Bir yaklaşım seçerken göz önünde bulundurabileceğiniz bazı sorular aşağıda verilmiştir:

Veri anlam -Temel veri depolama ve veri erişimi anlam nedir (ilişkisel veya yapılandırılmamış verileri depoluyor?)? Medya dosyaları gibi yapılandırılmamış veriler, blob depolamada en iyi şekilde uyum verir; Ürünler, envanterler, tedarikçiler, müşteri siparişleri vb. gibi ilgili verilerin bir koleksiyonu, ilişkisel bir veritabanında en iyi şekilde uyar.
Sorgu desteği -Verileri sorgulamak için ne kadar kolay? -Ne tür soruların etkin olarak sorulabileceği? Anahtar/değer veri depoları, önemli bir değer verilen ancak karmaşık sorgular için uygun olmayan tek bir satır almak için çok uygundur. Her zaman belirli bir kullanıcı için veri aldığınız bir kullanıcı profili veri deposu için bir anahtar/değer veri deposu iyi çalışabilir; çeşitli ürün özniteliklerine göre farklı gruplandırmalar almak istediğiniz ürün kataloğu için, ilişkisel bir veritabanının daha iyi bir şekilde çalışmasını sağlayabilirsiniz. NoSQL veritabanları, büyük hacimlerinizi verimli bir şekilde saklayabilir, ancak veritabanını uygulamanın verileri nasıl sorguladığı ve bu da geçici sorguların daha zor hale getirebileceği şekilde yapısal olarak oluşturmanız gerekir. İlişkisel bir veritabanı sayesinde neredeyse her türlü sorgu oluşturabilirsiniz.
İşlevsel projeksiyon -Sorular, toplamalar vb. olabilir, sunucu tarafı yürütülürler? SQL 'deki bir tablodan SELECT COUNT (*) öğesini çalıştırdım, sunucudaki tüm işleri etkili bir şekilde işler ve aradığım sayıyı döndürür. Toplamayı desteklemeyen bir NoSQL veri deposundan aynı hesaplamayı istersem, bu verimsiz bir "sınırsız sorgu" ve muhtemelen zaman aşımına uğrar. Sorgu başarılı olsa bile sunucudan istemciye tüm verileri almam ve istemcideki satırları saymalıyım. -Hangi diller veya ifade türleri kullanılabilir? İlişkisel bir veritabanı ile SQL 'i kullanabilirsiniz. Azure Tablo depolaması gibi bazı NoSQL veritabanlarında, ODatakullanıyorum ve tek yapacağım, birincil anahtar üzerinde filtrelenebilir ve tahminleri alabilir (kullanılabilir alanların bir alt kümesini seçin).
Ölçeklenebilirlik kolaylığı -Verilerin ne sıklıkta ve ne kadar ölçeklendirilmesi gerekir? -Platform, ölçeği yerel olarak uygular mi? -Kapasite ekleme/kaldırma işlemi ne kadar kolay (boyut ve üretilen iş)? İlişkisel veritabanları ve tablolar, ölçeklenebilir hale getirmek için otomatik olarak bölümlenmez, bu sayede belirli sınırlamaların ötesinde ölçeklendirilmesi zordur. Azure Tablo depolama, her şeyi Azure Table Storage ve bölüm ekleme için neredeyse hiçbir sınır olmadığı gibi NoSQL veri depoları. Tablo depolama alanını 200 terabayta kadar kolayca ölçeklendirebilirsiniz, ancak Azure SQL veritabanı için en fazla veritabanı boyutu 500 gigabayttır. İlişkisel verileri birden çok veritabanına bölümleyerek ölçeklendirebilirsiniz, ancak bu modeli desteklemek için bir uygulama ayarlamak çok sayıda programlama işi içerir.
İzleme ve yönetilebilirlik -Ne kadar kolay bir şekilde işaretleme, izleme ve yönetme platformu? Veri mağazalarınızın sistem durumu ve performansı hakkında bilgi sahibi olmanız gerekir. bu nedenle, bir platformun size ücretsiz olarak size verdiği ölçümleri ve kendinizi geliştirmek için gerekenleri bilmeniz gerekir.
İşlemler -Azure 'da dağıtım ve çalıştırma platformu ne kadar kolay? PaaS? IaaS? Linux? Tablo depolama ve SQL veritabanı, Azure 'da kolayca ayarlanabilir. Yerleşik Azure PaaS çözümleri olmayan platformlar daha fazla çaba gerektirir.
API desteği -Platformla çalışmayı kolaylaştıran bir API var mı? Azure Tablo hizmetinde, .NET API 'SI olan ve .NET 4,5 zaman uyumsuz programlama modelini destekleyen bir SDK vardır. Bir .NET uygulaması yazıyorsanız, API veya daha az kapsamlı bir tane olmayan başka bir anahtar/değer sütunu veri deposu platformuna kıyasla Azure Tablo hizmeti için kod yazmak ve test etmek çok daha kolay olacaktır.
İşlem bütünlüğü ve veri tutarlılığı -Platformun veri tutarlılığını güvence altına almak için işlemleri desteklemesi kritik öneme sahip mi? Gönderilen toplu e-postaların izlenmesi için performans ve düşük veri depolama maliyeti, veri platformundaki işlemler veya başvuru bütünlüğü için otomatik destekten daha önemli olabilir, böylece Azure Tablo hizmeti iyi bir seçimdir. Banka hesabı bakiyelerinin veya satın alma siparişlerinin izlenmesi için, güçlü işlem garantisi sağlayan bir ilişkisel veritabanı platformu daha iyi bir seçimdir.
İş sürekliliği -Yedekleme, geri yükleme ve olağanüstü durum kurtarma ne kadar kolay? Daha erken veya daha sonraki üretim verileri bozulmuş olur ve geri alma işlevine ihtiyacınız olacaktır. İlişkisel veritabanları genellikle zaman içindeki bir noktaya geri yükleme özelliği gibi daha ayrıntılı geri yükleme özelliklerine sahiptir. Göz önünde bulundurmanız gereken her platformda hangi geri yükleme özelliklerinin kullanılabildiğini anlamak, dikkate alınması gereken önemli bir faktördür.
Maliyet -Birden fazla platform veri iş yükünüzü destekleyebileceğinden, maliyetleri nasıl karşılaştırırsınız? Örneğin, ASP.NET Identity kullanıyorsanız, Kullanıcı profili verilerini Azure Tablo hizmeti veya Azure SQL veritabanı 'nda saklayabilirsiniz. SQL veritabanı 'nın zengin sorgulama özelliklerine ihtiyacınız yoksa, belirli bir depolama alanı için maliyeti çok daha az olduğu için Azure tabloları kısmen tercih edebilirsiniz.

Veri depolama çözümlerinizi seçmeden önce, bu kategorilerin her birinde soruların yanıtını bilmeniz genellikle önerilir.

Ayrıca, iş yükünüz bazı platformların diğerlerinden daha iyi destekleyebileceğini belirli gereksinimlere sahip olabilir. Örneğin:

  • Uygulamanız denetim özellikleri gerektiriyor mu?
  • Veri lontçekimi gereksinimleriniz nelerdir? otomatik arşivleme veya temizleme özellikleri mi gerekiyor?
  • Özelleştirilmiş güvenlik gereksinimleriniz var mı? Örneğin, veriler PII (kişisel olarak tanımlanabilir bilgiler) içerir, ancak PII 'nin sorgu sonuçlarından dışlandığından emin olmanız gerekir.
  • Yasal düzenlemeler veya teknolojik nedenlerle bulutta depolanabilecek bazı verileriniz varsa, şirket içi depolamayla tümleştirmeyi kolaylaştıran bir bulut veri depolama platformuna ihtiyacınız olabilir.

Demo – Azure 'da SQL veritabanı 'nı kullanma

BT BT uygulaması, görevleri depolamak için ilişkisel bir veritabanı kullanır. Her şeyi otomatikleştirin bölümünde gösterilen ortam oluşturma Windows PowerShell BETIĞI Iki SQL veritabanı örneği oluşturur. Bunları portalda SQL veritabanları sekmesine tıklayarak görebilirsiniz.

Portalda SQL veritabanları

Ayrıca Portal kullanarak veritabanı oluşturmak da kolaydır.

Yeni--veri hizmetleri -- SQL veritabanı -- hızlı oluştur' a tıklayın, bir veritabanı adı girin, hesabınızda zaten bulunan bir sunucuyu seçin veya yeni bir tane oluşturun ve SQL veritabanı oluştur' a tıklayın.

Yeni SQL Veritabanı

Birkaç saniye bekleyin ve Azure 'da kullanabileceğiniz bir veritabanınız var.

Yeni SQL veritabanı oluşturuldu

Böylece Azure, şirket içi ortamda bir gün veya hafta veya daha uzun sürebilir. Bir komut dosyasında veya bir yönetim API 'SI kullanarak veritabanlarını otomatik olarak kolayca oluşturabileceğiniz için, uygulamanız bu şekilde programlandığı sürece verilerinizi birden çok veritabanına dağıtarak dinamik olarak ölçeklendirebilirsiniz.

Bu, hizmet olarak platform modelimize bir örnektir. Sunucuları yönetmeniz gerekmez, biz bunu yaptık. Yedeklemeler hakkında endişelenmeniz gerekmez. Yüksek kullanılabilirlik ile çalışıyor. veritabanındaki veriler otomatik olarak üç sunucu arasında çoğaltılır. Bir makine olursa otomatik olarak yük devreder ve veri kaybettik. Sunucu düzenli olarak düzeltme eki uygulanıyorsa, bu konuda endişelenmeniz gerekmez.

Bir düğmeye tıklayın ve ihtiyacınız olan tam bağlantı dizesini alın ve yeni veritabanını hemen kullanmaya başlayabilirsiniz.

Bağlantı dizeleri

Pano, bağlantı geçmişi ve kullanılan depolama alanı miktarını gösterir.

SQL veritabanı panosu

Portaldaki veritabanlarını veya SQL Server Management Studio (SSMS) ve Visual Studio Araçları SQL Server Nesne Gezgini (SSOX) ve Sunucu Gezgini dahil, zaten bildiğiniz SQL Server araçları kullanarak yönetebilirsiniz.

SSOX

Fiyatlandırma modeli daha iyi bir şeydir. Ücretsiz 20 MB 'lik bir veritabanıyla geliştirme başlatabilir ve bir üretim veritabanı ayda yaklaşık $5 ile başlar. En fazla kapasiteyi değil yalnızca veritabanında depoladığınız veri miktarı için ödeme yaparsınız. Lisans satın almanız gerekmez.

SQL veritabanı kolayca Ölçeklendirilecek. BT BT uygulaması için, Otomasyon betiğimizde oluşturduğumuz veritabanı 1 GB 'a göre belirlenir. Bu süreyi 150 GB 'a kadar ölçeklendirmek istiyorsanız, portala gidip bu ayarı değiştirebilir veya bir REST API komutu yürütebilir ve saniyeler içinde veri dağıtabileceğiniz 150 GB veritabanınıza sahip olursunuz.

SQL veritabanı sürümleri ve boyutları

Bu, bulutun gücünü hızlı ve kolay bir şekilde oluşturup hemen kullanmaya başlayabilmenizi sağlar.

BT BT uygulaması, biri üyelik (kimlik doğrulama ve yetkilendirme) ve bir veri için olmak üzere iki SQL veritabanı kullanır ve bunu sağlamak ve ölçeklendirmek için yapmanız gerekir. Windows PowerShell betikleri aracılığıyla veritabanlarının nasıl sağlanacağı hakkında daha fazla gördünüz ve artık portalda ne kadar kolay olması gerektiğini de gördünüz.

ADO.NET kullanarak doğrudan veritabanı erişimine karşı Entity Framework

BT BT uygulaması, .NET uygulamaları için Microsoft 'un önerdiği ORM (nesne ilişkisel Eşleyici) Entity Framework kullanarak bu veritabanlarına erişir. ORM, geliştirici üretkenliğini kolaylaştıran harika bir araçtır ancak verimlilik, bazı senaryolarda performansın düşürülme masrafına gelir. Gerçek dünyada bir bulut uygulamasında EF kullanma veya doğrudan ADO.NET kullanma arasında seçim yapmayacaksınız. her ikisini de kullanabilirsiniz. Veritabanıyla birlikte çalışarak, en yüksek performans elde etmek önemli değildir ve Entity Framework ile elde ettiğiniz Basitleştirilmiş kodlama ve testlerin avantajlarından yararlanabilirsiniz. EF yükünün kabul edilemez performansa neden olduğu durumlarda, saklı yordamları çağırarak ADO.NET kullanarak kendi sorgularınızı yazabilir ve çalıştırabilirsiniz.

Veritabanına erişmek için hangi yöntemi kullanırsanız kullanın, "azaltmaya" öğesini mümkün olduğunca en aza indirmek istersiniz. Diğer bir deyişle, ihtiyacınız olan tüm verileri onlarca veya yüzlerce daha küçük bir sorgu sonuç kümesinde elde edebilirsiniz, bu genellikle tercih edilir. Örneğin, öğrencileri ve kaydolduğu kursları listeetmeniz gerekiyorsa, tek bir sorgudaki öğrencileri almak ve her öğrencinin Kursu için ayrı sorgular yürütmek yerine tek bir JOIN sorgusunda tüm verilerin alınması daha iyidir.

SQL veritabanları ve BT BT uygulamasındaki Entity Framework

BT BT uygulamasını onarma bölümünde, Entity Framework DbContext sınıfından türetilen FixItContext sınıfı, veritabanını tanımlar ve veritabanındaki tabloları belirtir. Bağlam, görevler için bir varlık kümesi (tablo) belirtir ve kod, bağlantı dizesi adının bağlamına geçirilir. Bu ad, Web. config dosyasında tanımlanan bir bağlantı dizesine başvurur.

public class MyFixItContext : DbContext
{
    public MyFixItContext()
        : base("name=appdb")
    {
    }

    public DbSet<MyFixIt.Persistence.FixItTask> FixItTasks { get; set; }
}

Web. config dosyasındaki bağlantı dizesi appdb olarak adlandırılır (burada yerel geliştirme veritabanına işaret edilir):

<connectionStrings>
    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;Initial Catalog=aspnet-MyFixIt-20130604091232_4;Integrated Security=True" providerName="System.Data.SqlClient" />
    <add name="appdb" connectionString="Data Source=(localdb)\v11.0; Initial Catalog=MyFixItContext-20130604091609_11;Integrated Security=True; MultipleActiveResultSets=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

Entity Framework, FixItTask varlık sınıfına dahil olan özellikleri temel alan bir Fixittasks tablosu oluşturur. Bu basit bir POCO (düz eski CLR nesnesi) sınıfıdır ve bu, Entity Framework hiçbir bağımlılığı olmadığı anlamına gelir. Bununla birlikte, bunu temel alan bir tablo oluşturmayı ve ile CRUD (oluşturma-okuma-güncelleştirme-silme) işlemlerini nasıl yürüteceğini Entity Framework.

public class FixItTask
{
    public int FixItTaskId  { get; set; }
    public string CreatedBy { get; set; }
    [Required]
    public string Owner     { get; set; }
    [Required]
    public string Title     { get; set; }
    public string Notes     { get; set; }
    public string PhotoUrl  { get; set; }
    public bool IsDone      { get; set; } 
}

FixItTasks tablosu

BT BT uygulaması, veri deposuyla çalışan CRUD işlemleri için kullandığı bir depo arabirimi içerir.

public interface IFixItTaskRepository
{
    Task<List<FixItTask>> FindOpenTasksByOwnerAsync(string userName);
    Task<List<FixItTask>> FindTasksByCreatorAsync(string userName); 

    Task<MyFixIt.Persistence.FixItTask> FindTaskByIdAsync(int id);

    Task CreateAsync(FixItTask taskToAdd);
    Task UpdateAsync(FixItTask taskToSave);
    Task DeleteAsync(int id);
}

Depo yöntemlerinin tümünün zaman uyumsuz olduğuna ve tüm veri erişiminin tamamen zaman uyumsuz bir şekilde yapılabilmesini unutmayın.

Depo uygulama, LINQ sorguları ve INSERT, Update ve DELETE işlemleri de dahil olmak üzere verilerle çalışacak Entity Framework zaman uyumsuz Yöntemler çağırır. Bu, bir düzelme görevi aramaya yönelik koda bir örnek aşağıda verilmiştir.

public async Task<FixItTask> FindTaskByIdAsync(int id)
{
    FixItTask fixItTask = null;
    Stopwatch timespan = Stopwatch.StartNew();

    try
    {
        fixItTask = await db.FixItTasks.FindAsync(id);
        
        timespan.Stop();
        log.TraceApi("SQL Database", "FixItTaskRepository.FindTaskByIdAsync", timespan.Elapsed, "id={0}", id);
    }
    catch(Exception e)
    {
        log.Error(e, "Error in FixItTaskRepository.FindTaskByIdAsynx(id={0})", id);
    }

    return fixItTask;
}

Burada ayrıca, daha sonra izleme ve telemetribölümünde yer alan bir zamanlama ve hata günlüğü kodu görürsünüz.

Azure 'da SQL veritabanı (PaaS) ve VM 'de SQL Server (IaaS) seçme

SQL Server ve Azure SQL veritabanı ile ilgili iyi bir şey, her ikisi için de temel programlama modelinin aynı olmasıdır. Her iki ortamda da aynı becerilerin çoğunu kullanabilirsiniz. Geliştirme ve bulutta bulunan bir SQL veritabanı örneği olan bir SQL Server veritabanı da kullanabilirsiniz.

Alternatif olarak, IaaS VM 'lerine yükleyerek şirket içinde çalıştırdığınız bulutta aynı SQL Server çalıştırabilirsiniz. Bazı eski uygulamalarda, bir VM 'de SQL Server çalıştırmak daha iyi bir çözüm olabilir. Bir SQL Server veritabanı ayrılmış bir VM üzerinde çalıştığı için, bu, paylaşılan bir sunucuda çalışan SQL veritabanı veritabanından daha fazla kaynağa sahip olur. Bu, bir SQL Server veritabanının daha büyük olabileceği ve yine de devam ettiği anlamına gelir. Genel olarak, veritabanı boyutu ve tablo boyutu ne kadar küçükse, SQL veritabanı (PaaS) için daha iyi kullanım durumu kullanılır.

İki model arasından seçim yapma hakkında bazı yönergeler aşağıda verilmiştir.

Azure SQL Veritabanı (PaaS) Bir sanal makinede SQL Server (IaaS)
Profesyonelleri -VM 'leri oluşturmanız veya yönetmeniz, işletim SISTEMINI veya SQL 'i güncelleştirmeyi veya düzeltme ekini almak zorunda değilsiniz; Azure bunu sizin için yapar. -Veritabanı düzeyinde SLA ile yerleşik yüksek kullanılabilirlik. -Toplam sahip olma maliyeti (TCO), yalnızca kullandığınız kadar ödeyin (lisans gerekmez). -Çok sayıda daha küçük veritabanını (<= 500 GB) işlemek için iyi. -Ölçeği genişletmek için dinamik olarak yeni veritabanları oluşturmak kolaydır. Profesyonelleri -şirket içi SQL Server uyumlu. -VM düzeyi SLA ile 2 + VM 'lerde AlwaysOn aracılığıyla SQL Server yüksek kullanılabilirliği uygulayabilir. -SQL 'in yönetilme konusunda tam denetiminiz vardır. -Zaten sahip olduğunuz SQL lisanslarını yeniden kullanabilir veya bir saat ile ödeme yapabilirsiniz. -Daha az ancak daha büyük (1 TB +) veritabanını işlemek için iyidir.
Dezavantajları -şirket içi SQL Server kıyasla bazı özellik boşlukları ( clr tümleştirmesi, tde, sıkıştırma desteği, SQL Server Reporting Services, vb.)-500 GB 'lık veritabanı boyutu sınırı. Dezavantajlar -güncelleştirmeler/yamalar (OS ve SQL), yaklaşık olarak 8000 (16 veri sürücüsü aracılığıyla) ile sınırlı olan sorumluluk-disk IOPS (saniye başına giriş/çıkış işlemleri) ile sınırlıdır.

Bir VM 'de SQL Server kullanmak istiyorsanız, kendi SQL Server lisansınızı kullanabilir veya saatlik bir süre için ödeme yapabilirsiniz. Örneğin, portalda veya REST API aracılığıyla SQL Server bir görüntü kullanarak yeni bir sanal makine oluşturabilirsiniz.

SQL Server VM oluşturma

SQL Server VM görüntülerinin listesi

SQL Server görüntüyle bir VM oluşturduğunuzda, sanal makinenin kullanımına bağlı olarak, SQL Server lisans maliyetini saate göre ücretlendiriyoruz. Yalnızca birkaç ay boyunca çalıştırılacak bir projeniz varsa, bu, saatlik olarak ödeme yapacak. Projenizin en son yıllardır olduğunu düşünüyorsanız, lisansı normalde yaptığınız şekilde satın alabilirsiniz.

Özet

Bulut bilgi işlem, uygulamanızın ihtiyaçlarını en iyi şekilde karşılayacak şekilde veri depolama yaklaşımının karışmasını ve eşleşmesini pratik hale getirir. Yeni bir uygulama oluşturuyorsanız, uygulamanız büyüdükçe iyi çalışmaya devam edecek yaklaşımları seçmek için burada listelenen soruları dikkatle düşünün. Sonraki bölümde , birden çok veri depolama yaklaşımını birleştirmek için kullanabileceğiniz bazı bölümleme stratejileri açıklanmaktadır.

Kaynaklar

Daha fazla bilgi için aşağıdaki kaynaklara bakın.

Veritabanı platformu seçme:

SQL Server ve SQL veritabanı arasında seçim yapma:

ASP.NET Web uygulamasında Entity Framework ve SQL veritabanı kullanma

Azure 'da MongoDB 'yi kullanma:

HDInsight (Azure 'da Hadoop):