Azure Üzerinde Cosmos DB İle CRUD

Selamlar,

Bu makalede Azure CosmosDB’yi beraberce inceleyeceğiz. CosmosDB “Database as a Service” yani Azure’da hizmet olarak sunulan tek şey, sadece Database’dir. Azure Cosmos DB, Microsoft’un NoSQL veri tabanlarının hizmet karşılığı olarak düşünülebilir. Yani (DaaS). En önemli özelliği, Sql gibi sorgulama yapılabilmesi ve nosql gibi çok hızlı result dönebilmesidir.

Azure üzerinde “Azure Cosmos DB” şeklinde bir aram yapıldığında, aşağıdaki gibi bir ekran ile karşılaşılır.

Daha sonra aşağıdaki gibi bir ekran ile isimlendirilir ve oluşturulur. API olarak bu uygulamada Core(SQL) seçilmiştir. Bunun dışında Azure Cosmos DB, 5 farklı API desteklemektedir: Core(SQL) document database, Gremlin graph database, MongoDB document databases, Azure Table ve Cassandra.

Bu örnekte Core(SQL) seçilmesinin nedeni document, database ve query’nin SQL syntax’ı ile oluşturulmak istenmesidir.

Son adım olarak karşımıza aşağıdaki gibi bir ekran gelir: Validate işlemi tamamlandıktan sonra, “Create” button’lna basılarak CosmosDB Azure üzerinde oluşturulmuş olunur.

İlgili database oluştuğu zaman, Azure’da karşımıza aşağıdaki gibi bir ekran çıkmaktadır:

Cosmos DB’ye dışardan erişim, Keys alanındaki “Url” ve “Primary Key” alanları ile yapılmaktadır.

Sıra geldi, Cosmos DB’ye bağlanmaya. Öncelikle Visual Studio 2017 ile .Net Console Application yaratılır.

Manage Nuget Packages’dan ==> “Microsoft.Azure.DocumentDB” aşağıdaki gibi indirilir.

1-) Aşağıdaki kütüphaneler sayfaya eklenir.

2-) Aşağıdaki tanımlamalar, Azure CosmosDB’ye bağlanmak için yapılır. EndPoint : “CosmosDB Url’i”, PrimaryKey : “CosmosDB key’i” dir. Bu değerler, Azure üzerinden yukarıda belirtildiği gibi alınabilir.

Program.cs: Eğer DB yok ise CustomerDB adında bir Database ve Collection yaratılıp, kayıt amaçlı bir döküman ilgili CosmosDB’ye kaydedilecektir.

  • “CreateDB()” :Tüm işlemin yapıldığı asenkron methoddur.
    • “using (client = new DocumentClient(new Uri(EndpointUrl), PrimaryKey))” : Azure CosmosDB’ye bağlanılır.
    • “await client.CreateDatabaseIfNotExistsAsync(new Database { Id = “CustomerDB” })” : Eğer CustomerDB yok ise oluşturulur.
    • “await client.CreateDocumentCollectionIfNotExistsAsync(UriFactory.CreateDatabaseUri(“CustomerDB”), new DocumentCollection { Id = “CustomerCollection” })” : Eğer yok ise CustomerDB’ye ait Collection oluşturulur.
    • “Customer bora = new Customer” : Database’e atılacak kayıt yani Document oluşturulur.
    • “await client.CreateDocumentAsync(UriFactory.CreateDocumentCollectionUri(“CustomerDB”, “CustomerCollection”), bora)”: “bora” adında oluşturulan Document yani kayıt, CustomerDB CosmosDB’si ve CustomerCollection’ına atılır.

CosmosDB’ye, yeni bir document aşağıdaki gibi eklenir. Aslında her bir document, yeni bir kayıt anlamına gelmektedir.

2. kayıdın eklenmesinden sonra, azure üzerindeki Documentlerin son durumu aşağıdaki gibidir: İlgili documentler, “id” değerlerine göre sıralanmaktadır.

Customer.cs : CosmosDB’ye atılacak Customer Document’dir. Modeli aşağıdaki gibidir. “Customer” ==> Customer’a ait “Children” ==> Ve son olarak Children’a ait “Address”  modelleri, aşağıdaki gibi tanımlanmıştır.

Azure Üzerindeki CosmosDB Sorguları: İlk Customer “bora” Document Azure CosmosDB’ye atıldıktan sonra, “select * from c where c.id =”34″” şeklindeki sorgunun sonucu aşağıdaki gibidir.

Sorgu 2: Aşağıdaki sorguda, çocuğunun isim Murat olan kayıt getirilmektedir. “Görüldüğü gibi NoSql bir DB üzerinde Sql sorgusu yapılabilmektedir” :)

Sonuç: Aşağıdaki gibidir.

Sorgu 3: Aşağıdaki sorguda, çocuğunun ülkesi ‘Türkiye’ olan 2 kayıt bulunmaktadır.

Sonuç: Aşağıdaki gibidir.

Şimdi gelin Query’i, Console uygulama üzerinde yapalım: Aşağıdaki query’de, soy ismi “Kasmer” olan kayıtlar listelenir.

Ekran çıktısı aşağıdaki gibidir:

Bu örnekde Custom yani sorguya özel bir query result alınacaktır. Bunun için öncelikle aşağıdaki gibi “custome result model” oluşturulur:

QueryCustomer.cs:

Customer Join Query: Aşağıda görüldüğü gibi Customer ve Child tabloları, joinlenmiş ve geri dönülecek result için “QueryCustomer” adında Custom Result Model oluşturulmuştur.

Ekran çıktısı aşağıdaki gibidir:

Customer Join Query 2: Aşağıdaki sorguda çocuğunun adresinden ülkesi Türkiye olan kayıtlar listelenmiştir. Gene dönüş tipi “QueryCustomer“‘dır.

Ekran çıktısı aşağıdaki gibidir:

Cosmos DB’de Güncelleme :

  • Aşağıdaki örnekde “CreateDocumentQuery<Customer>” Id’si “34” olan kayıt çekilmiştir.
  • querydoc.GSM = “0555 555 5555” : Kaydın GSM numarası değiştirilmiştir.
  • var result = client.ReplaceDocumentAsync(UriFactory.CreateDocumentUri(“CustomerDB”, “CustomerCollection”, querydoc.Id), querydoc).Result.Resource : Güncellenen Document, CosmosDB’de güncellenir.
  • “Console.WriteLine($”Update document Type :{ result.GetPropertyValue<string>(“GSM”)}”)” : İlgili kayda ait güncellenmiş son GSM değeri, ekrana basılır.

Cosmos DB’de Silme:

  • “.Where(x => x.Children[0].FamilyName == “Durmaz”)” : İlk çocuğunun soyadı “Durmaz” olan document bulunur.
  • “if(querydoc.Count()>0)” : Bu sorguya gore kayıt var mı diye bakılır.
  • “client .DeleteDocumentAsync()”: Methodu ile seçilen document “doc.Id” alanına göre silinir.

Bu makalede Azure CosmosDB nedir? Nasıl oluşturulur? Nasıl kayıt atılır, sorgulanır, güncellenir ve silinir gibi sorulara cevap bulmaya çalıştık. NoSql bir Db’de, sql sorgular çekerek işlem yapılabilen, 10 millisaniyede okuma, 15 millisaniyede yazma gibi hızlarda çalışılabilen ve azure üzerinde otomatik replica olan bir data center ile entegre olmak isteyen, herkese öneririm.

Geldik bir makalenin daha sonuna. Bir sonraki makalede görüşmek üzere hepinize hoşçakalın.

Source:

Herkes Görsün:

Bunlar da hoşunuza gidebilir...

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.