2

Zaman içerisinde planlı ya da plansız olarak, birçok işlem yapılmaktadır. Günümüzde sosyal ağlar ile paylaşımlar ya da bankalar ile birçok harcamalar yapmaktayız. Yapılan işlemler kullanıcılar için önemli olmasa da şirketler için CRM bilgisi olarak depolanmaktadır.

Günümüzde müşteri isteklerini, talep etmeden hazırlayan şirketler kazanmaktadır.

Yeni nesil CRM süreçleri, her yeni gün özellik kazanarak şekillenmektedir. Söz konusu CRM süreçleri, yasal yaptırımlara bağlı gerçekleştirilmektedir.

110413_0536_WindowsAzur1.jpg
Resim-1

İş planlama ve senaryoları gereksinim ve yasal yaptırımlara uyumluluk sağlanmak amacı ile güncellemektedir. Uygulamaların kullanım sürecinde gereksinim duyulmayan, herhangi özellik dönemde gereksinim duyulabilmektedir. Gerçekleşen değişimler, kullanılan iş uygulamalarının şekillendirilmesi ya da yeniden geliştirilmesi gündeme gelebilmektedir.

Türkiye Cumhuriyeti’nde, 1999 yılın sonu itibari ile vatandaşlık numarası uygulaması başlatılmıştır. Uygulama ile isim benzerliklerinde kaynaklanan problemler ve tüm işlemlerin tek numara üzerinde gerçekleştirilmesi amaçlamıştır. Çalışma ile başta sağlık sektörü olmak üzere, insan ile ilişkili tüm sektörlerde kullanılan uygulamalarda, vatandaşlık numarasını temel alma özelliğinin kazandırılması gereksinimi ortaya çıkmıştır. Yapılan işlemler ile tamamlanmış mevcut ya da süren işlem verilerinin düzenlenmesi gereksinimi ortaya çıkmıştır.

İş süreçleri, kural ya da yasal yaptırımların uygulanması sebebi ile işlem girdi ve çıktılarının değişiklik göstermesi gündeme gelebilmektedir. Yapılan işlemler, mevcutta verilerin düzenlenmesi, performans ve depolama süreçlerini de etkilemektedir.

110413_0536_WindowsAzur2.png
Resim-2

İş uygulamaları, kullanıcılarından yazılı ya da Binary türünde çeşitli veriler ile çalışmaktadır. Çalışılan veriler, yığınların oluşmasına neden olmaktadır. Veri yığınları ise, zaman ile büyük veri(Big Data) olgusunu gündeme getirmektedir.

Her şirketin çalışmış olduğu ana iş dalı üzerinde çalışması, konu ile ilgili uzmanlaşmasını sağlayacaktır. Gereksinimleri duyduğu diğer yan ihtiyaçları, konunun uzmanlarında sağlaması, iş sürecini ve üretimin kalitesini artıracaktır.

Şirketler, mevcut veri yığınlarını, depolama, analiz ve yönetim için çeşitli iş uygulamaları kullanmaktadır.  Veri yığınları ile ilgili işlem yapılabilmek amacı ile çeşitli araçlar satın alınmaktadır. Yapılan satın alma hareketleri, her şirketin birer veri merkezinin oluşturmasına neden olmaktadır. Veri merkezlerinin kurulması, yönetilmesi, bakımı ya da nitelikli iş gücünün oluşturulması, şirketlerin iş kolları dışında yüklerin altına girmesine neden olmaktadır.

110413_0536_WindowsAzur3.png
Resim-3

Günümüzde sektör ve iş kolların çeşitlenmesi, iş ihtiyaçlarının ile ilgili duyulan verinin artmasına neden olmaktadır. İş gereksinimleri sağlanması ve istenilen sonuçların üretilebilmesi için iş uygulamalarının, Cloud Computing saylayıcılara ve özellikle Microsoft Windows Azure Platform ’a taşınmaktadır.

İş uygulamaları, gerçekleştirilmesi istenen süreci en avantajlı sunması amacı ile çeşitli teknolojik bağımlıklara yüklenmektedir. Çeşitli nedenlerden dolayı, değişen iş süreçleri, kullanılan uygulamaların da güncelleme gereksinimini ortaya çıkartmaktadır. İş Uygulamaları, iş süreçleri ile ilgili çeşitli avantajlar sunarken, değişim süreçlerinde handikapların oluşmasına neden olabilmektedir.

Uygulama mimarileri, iş süreç ve yasal bağımlıkları nedeni ile kullanıcı tarafından verilerin güncellenmesi gündeme gelebilmektedir. Uygulama veri yapılarının, zaman ve ihtiyaçların gereğince değişmesi, uygulama performansı ve veritabanı optimizasyonu gibi problem oluşturabilmektedir. Geçmiş dönemde gereksinim olduğu düşünülen veriler, farklı bir dönemde gereksinim duyulmayabilir. Benzer yaklaşım olarak, bazı uygulama verileri gereksinim duyulabilmektedir. Yapılan işlemler, verinin depolanması ya da analiz sürecini etkileyebilmektedir.

110413_0536_WindowsAzur4.png
Resim-4

Gelişen teknoloji ile iş süreçlere uygun, kolay ve hızlı iş çözümleri oluşturulabilmektedir. Günümüz iş uygulamalarının, hızlı veri sorgulama ve veri ile ilgili yapısal düzenleme gereksinimleri ortaya çıkarmıştır. Meydana gelen gereksinimler, verinin yapının esnek olması ihtiyacını doğurdu.

2009 yılın da “eğlenceyi seç, ilişkisel=yanlış; olan gerçek Dünyadan faydalan” sloganı ile  yapılan, “no:sql(east)” konferansı ile NoSQL konusunda çeşitli düşüncelerin oluşmasında büyük etki oluşturmuştur.

NoSQL, 1998’un sonlarına doğru ortaya çıkan bir kavramdır. Klasik ilişkisel veritabanı yapışanda bulunmayan ve sorgulama için SQL dili kullanmayan veritabanı türüdür. Genel olarak xml ya da JSON formatında veri depolama yapmaktadır.

İş ihtiyaçları, iş verisinin esnek olma gereksinimi beraberin de ihtiyacın hizmet olarak sunulmasını da sağlamıştır. Microsoft ve diğer Cloud Computing sağlayıcıları çeşitli depolama hizmetleri ile kullanıcılarına Cloud Storage hizmetleri sunmaktadır. Microsoft da Windows Azure Platform ile kullanıcılarına ilişkisel(SQL Database) veritabanı hizmeti sunduğu gibi No-Relation(Windows Azure Storage) iş çözümü de sunmaktadır.

Windows Azure Platform No-Relation iş çözümü olarak, Windows Azure Storage hizmeti sağlamaktadır. Hizmet ile Binary ve diğer veri türleri farklı nesneler içerisinde güveli ve yüksek optimizasyonu değerlerinde, depolanması sağlanmaktadır.  Aşağıda Windows Azure Storage hizmeti katmanları belirtilmiştir.

110413_0536_WindowsAzur5.png
Resim-5

Windows Azure Storage hizmeti, üç parçalı ve parçalara özgü özelliklerin olması sebebi ile anlatımın devamında Windows Azure Storage ‘ın parçalarından olan Windows Azure Table Storage ile ilgili bilgiler verilecektir.

Windows Azure Table Storage, SQL Database yaklaşımında bulunan Table nesnesine benzemektedir. Ama yapısal bazı özgü özelliklerden dolayı, Windows Azure Table Storage yapısı SQL Database’de bazı farklıklar göstermektedir. Aşağıda Windows Azure Storage ve SQL Database ile ilgili bilgi ve karşılaştırmalar bulunmaktadır.

110413_0536_WindowsAzur6.png
Resim-6

Windows Azure Table ile çalışmak, veritabanı işlemlerini Entity Framework ile yapmak kadar kolay, işlevsel ve hızlıdır. Windows Azure Table Storage, veri işlem süreçlerin de LINQ sorgularını kullanılabilmektedir. Entity Framework ile geliştirilen uygulamalarda DbContext nesnesi kullanıldığı gibi Windows Azure Table Storage yapısında ise, TableServiceContext nesnesi kullanılmaktadır.

public class FunnyAppContext : TableServiceContext

{

public FunnyAppContext(string baseAddress, StorageCredentials credentials)

: base(baseAddress, credentials)

{

}

 

public IQueryable<Tag> Tag

{

get { return this.CreateQuery<Tag>(“Tag”); }

}

 

public IQueryable<Post> Post

{

get { return this.CreateQuery<Post>(“Post”); }

}

 

public IQueryable<Comment> Comment

{

get { return this.CreateQuery<Comment>(“Comment”); }

}

}

Uygulama örneği olan, “WindowsAzure.FunnyApp” çalışması nesneye yönelimli olarak geliştirilerek, gerçek yaşamda karşılaşabilecek durumlar ele alınmaya çalışılmıştır. Aşağıda “WindowsAzure.FunnyApp” çalışması ile ilgili sınıf ilişkisel şeması bulunmaktadır.

110413_0536_WindowsAzur7.png
Resim-7

Yukarıdaki şema da görüldüğü gibi EntityBase sınıfı TableServiceEntity sınıfında türetilmiştir. Yapılan türetme ile Windows Azure Table Storage Entity fonksiyonelliği kazandırılmış olacaktır.  Temel sınıf olan EntityBase sınıfından türeyen sınıflar,  “PartitionKey” , “RowKey” ve “Timestamp” özellikleri kazanmaktadır.  Söz konusu özellikler, Windows Azure Table Storage içerisinde verilerin, benzersiniz(“PartitionKey” , “RowKey”) ve işlem zamanı(“Timestamp”) ile ilgili bilgiler taşımaktadır.

public class EntityBase : TableServiceEntity

{

public EntityBase()

{

this.PartitionKey = DateTime.UtcNow.ToString(“MMddyyyy”);

this.RowKey = string.Format(“{0:10}_{1}”, DateTime.MaxValue.Ticks – DateTime.Now.Ticks, Guid.NewGuid());

}

}

Klasik uygulama veritabanı uygulama geliştirme sürecinde gerçekleştirildiği gibi Windows Azure Table Storage ile de GRUD işlemleri yapılabilmektedir. Yapılan işlemlerin bir kalıp üzerinde gidebilmesi amacı ile Repository tasarım deseni kullanılmıştır.

public interface IRepository<TEntity>

{

TEntity Find(string partitionKey, string rowKey);

TEntity Find(string rowKey);

void Create(TEntity entity);

void Delete(TEntity entity);

void Update(TEntity entityToUpdate);

void SubmitChange();

IQueryable<TEntity> Get();

}

Windows Azure Table Storage nesnesi ile veri işlemlerinin yönetebilmesi amacı için Repository nesnesinin yönetilebildiği FunnyAppRepository sınıfı hazırlanmıştır. Sınıf EntityBase türüne ait nesnelere hizmet vermek amacı ile sınırlandırılmıştır.

public class FunnyAppRepository<TEntity> : IRepository<TEntity>,

IDisposable where TEntity : EntityBase

{

// veri işlemleri ile ilgili hesap

// bilgilerinin alınması

private static CloudStorageAccount _storageAccount;

// iş nesnesi ile ilgili tanımlamanın yapılması

private readonly FunnyAppContext _context;

// nesne türüne ayit isim alınması

private readonly string _entitySetName;

 

public FunnyAppRepository()

{

// veri işlemleri ile ilgili gerekli bilgilerin alınması

_storageAccount =

CloudStorageAccount.FromConfigurationSetting(Utils.ConfigurationString);

 

// veri hesabı bilgilerine bağlı olarak,

// veri nesnelerinin Windows Azure Storage üzerinde oluşturulması

CloudTableClient.CreateTablesFromModel(

typeof (FunnyAppContext),

_storageAccount.TableEndpoint.AbsoluteUri,

_storageAccount.Credentials);

 

// seçili olan nesne türünün isminin alınması

_entitySetName = typeof (TEntity).Name;

 

// seçili olan nesne ile ilgili gerekli tanımlamaların

// Windows Azure Storage içerisinde olup/olmadığını kontrollünün yapılması.

// Söz konsu nesnenin Windows Azure Storage içerisinde olmaması durumunda

// nesne isimine bağlı olarak, gerekli tanımlamaları yapılması

_storageAccount.CreateCloudTableClient().CreateTableIfNotExist(_entitySetName);

 

// GRUD işlemlerinde sorumlu olan, iş nesnesine erişim ile ilgili

// gerekli bilgilerin atanması

this._context = new FunnyAppContext(_storageAccount.TableEndpoint.AbsoluteUri,

_storageAccount.Credentials);

this._context.RetryPolicy = RetryPolicies.Retry(3, TimeSpan.FromSeconds(1));

}

// nesne türüne bağlı olarak

// rowkey ve partitionkey ile kayıt getirme

public TEntity Find(string partitionKey, string rowKey)

{

return (from g in _context.CreateQuery<TEntity>(_entitySetName)

where g.PartitionKey == partitionKey && g.RowKey == rowKey

select g).FirstOrDefault();

}

 

// nesne türüne bağlı olarak

// rowkey ile kayıt getirme

public TEntity Find(string rowKey)

{

return (from g in _context.CreateQuery<TEntity>(_entitySetName)

where g.RowKey == rowKey

select g).FirstOrDefault();

}

 

// nesne türüne ayit yeni üye oluşturma

public void Create(TEntity entity)

{

this._context.AddObject(_entitySetName, entity);

}

 

// nesne silmek için

public void Delete(TEntity entity)

{

this._context.DeleteObject(entity);

}

 

// nesne güncellemek için

public void Update(TEntity entityToUpdate)

{

this._context.UpdateObject(entityToUpdate);

}

 

// yapılan değişikleri depolama alanına yansıtmak için

public void SubmitChange()

{

this._context.SaveChanges();

}

 

// nesne türüne ayit tüm içerikleri çekebilmek için

public IQueryable<TEntity> Get()

{

return this._context.CreateQuery<TEntity>(_entitySetName);

}

 

public void Dispose()

{

GC.SuppressFinalize(this);

}

}

Tanımlaması yapılan iş nesnelerinin, kullanımı ile uygulama senaryosu olan, Kullanıcın tarafında yüklenen fotoğrafların görüntülenme süreci gerçekleştirilmektedir. Yapılan işlem ile LINQ sorgusu kullanarak gerçekleşmektedir.

Protected void Page_Load(object sender, EventArgs e)

{

if (IsPostBack) return;

// Post nesne türüne ayıt, repository iş nesnesinin tanımlanması

FunnyAppRepository<Post> _postRepository = new FunnyAppRepository<Post>();

 

List<PostViewData> viewDatas = new List<PostViewData>();

 

// istenilen öncüllerin oluşturulduğu Linq sorgusu

_postRepository.Get().Where(post => post.UserId == Membership.GetUser(Page.User.Identity.Name)

.ProviderUserKey.ToString()).ToList()

.Where(post=> post.State)

.OrderByDescending(post => post.Timestamp)

.Take(20).ToList().ForEach(post => viewDatas.Add(new PostViewData()

{

PostContent = post.PostContent,

PostImage = post.PostImage,

RowKey = post.RowKey,

UserId = post.UserId

}));

this.RepeaterImages.DataSource = viewDatas;

this.RepeaterImages.DataBind();

}

Her yeni gün, yeni çalışmalar ve işlemler yapmaktayız. Gerçekleştirilen süreçler, veri yığınları oluşmasına neden olmaktadır. Meydana gelen veri yığınları, güncelleme, analiz ve depolama gibi gereksinimleri ortaya çıkarmaktadır. Yaşanan problemler, ortaya çıkan NoSQL yaklaşımları ile amaçlanmaktadır.

Veri yapılarının hatalı analiz ve planlanması nedeni ile veri ile ilgili tüm alanlarda problemlerin ortaya çıkması mümkün olacaktır.

Not: Yapılan anlatımın örneklenmesi amacı ile “WindowsAzure.FunnyApp” uygulaması hazırlanmıştır. Aşağıdaki bağlantı kullanılarak, uygulama kaynak kodlarına erişebilirsiniz.

Github / https://github.com/ibrahimatay/WindowsAzure.FunnyApp

Windows Azure Storage yaklaşımı, geliştiricilerine kullandıkları verilerin sınıflandırma ve planlamaya yöneltmektedir. Veri yığınlarının, Windows Azure Storage uyumluluğunun sağlanması ile esnek ve kolay yönetilebilir yapılara sahip olunmaktadır.

Bu konuyla ilgili sorularınızı  alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.

Referanslar

www.mshowto.org

TC Kimlik Numarası

http://www.nvi.gov.tr/Hakkimizda/Projeler,Mernis_Hedef.html

http://tr.wikipedia.org/wiki/T%C3%BCrkiye_Cumhuriyeti_Kimlik_Numaras%C4%B1

no:sql(east)

https://nosqleast.com/2009/

Repository Pattern

http://martinfowler.com/eaaCatalog/repository.html

Windows Azure Table Storage and SQL Database – Compared and Contrasted

http://msdn.microsoft.com/en-us/library/windowsazure/jj553018.aspx

Windows Azure Table Storage

http://www.windowsazure.com/en-us/develop/net/how-to-guides/table-services/

Bu İçeriğe Tepkin Ne Oldu?
  • 0
    harika_
    Harika!!
  • 0
    be_enmedim
    Beğenmedim
  • 0
    _ok_iyi
    Çok iyi
  • 0
    sevdim_
    Sevdim!
  • 0
    bilemedim_
    Bilemedim!
  • 0
    olmad_
    Olmadı!
  • 0
    k_zd_m_
    Kızdım!

İbrahim ATAY, 2006 yılında itibari ile profesyonel olarak uygulama geliştirmeye başlamıştır. 2007 yılında C# ve. Net ile tanışarak çeşitli uygulamalar geliştirmiştir. Şuanda Bilge Adam Bilişim Hizmetleri şirketinde yazılım ve veritabanı danışmanı olarak çalışmaktadır. Kişi ile ilgili daha detaylı bilgi için blog (http://www.ibrahimatay.org) adresini inceleyebilirsiniz.

Yazarın Profili

Bültenimize Katılın

Tıklayın, üyemiz olun ve yeni güncellemelerden haberdar olan ilk kişi siz olun.

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Yorumlar (2)

    Bir yanıt yazın

    E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir