.Net Azure Table Storage

22.4.2019

Azure Table Storage bize büyük bir depolama alanı sunar. Maliyet olarak çok uygun bir şekilde ilişkisel olmayan kayıtlarımızı burada tutabiliriz. Exception, Transaction v.b logları burada tutabiliriz. Async şekilde yapabileceğimiz bu kayıtları select etmek için yine windowsazure.stroge kullanabiliriz. Ancak ben projelerimde sadece insert loglama yapmakta kullanıyorum.

Loglara ulaşmak istediğim özel durumlarda ise "Microsoft Azure Table Storage Explorer" öneriyorum. Böylece bu logları takip etme işini developer dışında bir çok farklı birimlere verebilir. En uygun, en optimize şekilde görüntüleyebiliriz. Nuget Package : WindowsAzure.Storage C# ile table storage kullanmak için nuget paketimizi yüklüyoruz.

Table işlemlerimizi yaparken bir "CloudStorageAccount" açıp, bu nesne üzerinden table nesnemize ulaşıp işlemlerimi yapacağız. CloudStorageAccount nesnesini oluştururken Azure panelinden oluşturulan connectionstring ya da accountName,accountKey bilgileri ile bu nesneyi oluşturabiliriz.

 public class TableStorageLog 
    {
        public CloudStorageAccount LogStorageAccount { get; private set; }
        public TableStorageLog(string connectionString)
        {
            CloudStorageAccount.Parse(connectionString);
        }
        public TableStorageLog(string accountName, string accountKey)
        {
            LogStorageAccount = new CloudStorageAccount(new Microsoft.WindowsAzure.Storage.Auth.StorageCredentials(accountName, accountKey), true);
        }
    }

"TableStorageLog" classımıza dilersek connectionString, dilersek accountName,accountKey bilgilerini vererek oluşturabilecek şekilde constracturlarımızı belirledik. Table Storage üzerinde açtığımız table nesnesini yakalayacağımız bir methoda ihtiyacımız var. Hatta bu table Storage üzerinde yoksa eğer açmasını isteyebiliriz.

  public async Task GetTableAsync(string tableName)
        {
            //Client  
            CloudTableClient tableClient = LogStorageAccount.CreateCloudTableClient();
            //Table  
            CloudTable table = tableClient.GetTableReference(tableName);
            await table.CreateIfNotExistsAsync();
            return table;
        }

Bu method ile "tableName" parametresinden gelen table ismi ile Azure Storage'e istekde bulunduk. Yoksa eğer oluşturmasını istedik, haliyle bize table bulunamadı gibi bir hatanın önüne geçmiş olduk. Table nesnesi elimizde, artık insert edeceğimiz modeli belirleyip operasyonumuzu gerçekleştirebiliriz.

public class LogData : TableEntity
    {  
        public string LogData { get; set; }
        public string Name { get; set; }
    }

"LogData" modelimizi oluşturduk. Bu model ile insert işlemlerimizi yapacağız, burada dikkat etmemiz gereken nokta ise şu ; Oluşturduğumuz model(class) "Microsoft.WindowsAzure.Storage.Table"'dan gelen "TableEntity"'den miras almalıdır. Bize TableEntity'dan "PartitionKey,RowKey,Timestamp" property bilgileri gelecektir. Bunlardan "PartitionKey"i atıyorum "Exception" log yazıyorsak o şekilde belirtebiliriz, tüm Exception kayıtları için ortak bi key belirlemiş oluruz böylece görüntüleme yaparken bize yardımcı olur.

"RowKey" ise her satır için farklı olmalıdır. Aynı "RowKey" bilgisi ise data insert etmek istediğimizde duplicate hatası verecektir. "GetTableAsync" methodunu kullanarak table nesnemize ulaşıp nasıl insert operasyonu yaparız ona bakalım.

 public  async Task DoLogAsync(LogData data)
        {     
            CloudTable table = await GetTableAsync();
            TableOperation insertOperation = TableOperation.Insert(data);
            await table.ExecuteAsync(insertOperation);
        }

Görüldüğü gibi kullanımı gayet kolay. İlk önce "CloudTable" nesnemizi oluşturup, daha sonra TableOperation belirleyip "ExecuteAsync" üzerinden aksiyonumuzu çalıştırıyoruz. Bu kayıtları yazımın başında da belirtiğim gibi desktop manager üzerinden görüntüleyebilirsiniz.

Select işlemini c# ile yapmak istiyorsanız eğer "TableOperation.Retrieve" kullanmalısınız. Insert işlemi yaparken belirttiğimiz "PartitionKey,RowKey" burada bize yapacağımız select sorgusuna işe yarayacak.

            CloudTable table = GetTableAsync();
            TableOperation retrieveOperation = TableOperation.Retrieve("partitionKey", "rowKey");

            var retrievedResult = await table.ExecuteAsync(retrieveOperation);
        
            if (retrievedResult.Result != null)
            {
                var result = (LogData)retrievedResult.Result;
                value = result.Value;
            }

Bu şekilde yaptığımız inserti tekrar LogData tipinde select edebiliriz.

Samet ÇINAR Hakkında

2010 senesinden bu yana hem tam zamanlı hemde freelance olarak yazılım projelerinde görev almaktayım.
Her gün daha güzel geliştirmeler yapmak için araştırıp öğrenmeyi, öğrendiklerimi aktarmayı çok seviyorum.

İLGİLİ YAZILAR

YORUMLAR

Mkok

19.5.2019

Hocam indirimde tabloya yazamıyorum bi turlu

Yorum Yap