Pazar , 13 Temmuz 2014
Son Haberler
Anasayfa / MAKALELER / Veri Ambarı / Slowly Changing Dimension Nedir ? (SCD)

Slowly Changing Dimension Nedir ? (SCD)

Bu yazımda Türkçesi “yavaşça değişen değerler “ dediğim bu kavramı anlatacağım.

 

Veri ambarları bilindiği gibi güncellemeleri olmadığı bir ortamdır.Tabiki hayır.Veri ambarlarındaki tablolarımızdaki verilerde güncellenebilir-güncellenmesi gerekir.Düşününki eskiden yaşadığı şehir İstanbul olan bir kişinin şimdiki yeni yaşadığı şehir Ankara oluyor.Bu durumda bu kişinin bilgilerini veri ambarımızda nasıl güncelleyebiliriz ?

 

Kaynak sistemde bu kişinin bilgilerini güncelleyip daha sonra ETL aşamalarını geçip veri ambarı tablolarımıza yükleriz ? Tabi bunu yapamayız.Kaynak sistemdeki verileri değiştirmek imkansızdır(yapılabilir ama imkansızdır genede J ) Veriyi güncelleyip  ETL aşamalarından geçtikten sonra tekrar veri ambarına atmakta zaman alacağına göre o zaman veri ambarımızda değişiklik yapmak zorunluluğu kalıyor geriye.

scd

 

Burda bir olaydan daha bahsetmek istiyorum.Bu verilerin nasıl güncellendiğini az sonra göreceğiz fakat bu verileri güncellendiğinin bilgisini kim tutacak ? İpucu olarak metadata yönetimine bakmanızı öneririm.Birde bu konunun sonundaki CDC olayına bakmanız gerekecek.

 

Slowly Changing Dimension’da 3 farklı tipte güncelleme modeli vardır.

1- Hadi eski bilgileri ezelim!

Eski bilgiyi yenisi ile günceller ve  eski bilgiden hiçbir iz kalmaz.Bu yöntemin avantajı eski bilgiyi  takip etmeye gerek olmamasıdır.(gerçekten avantajmıdır düşünmek gerekir..)

 

Yeni eklenen veri herzaman bizim için ilk veri gibidir.

 

Dezavantajı ise eski bilgiye artık erişimimiz kalmaz.Yani geçen sene İstanbulda kaç kişi ikamet ediyordu dediğimizde sağlıklı bir veri bütünlüğü oluşturamayacağız.Eğer bir veri ambarı yapınız varsa ve bunu gerçektende veri ambarına yakışır şekilde kullanmak istiyorsanız bu model kullanılmaz.Bu daha çok oltp sistemler için gerçekleştirilebilir.

scd2

 

Yeni hali;

 

scd3

 

2-      Yeni bir kayıt ekleyelim.

Bu yapıda değişen veri için yeni bir kayıt eklenir.Değişen bilgi yeni bir satıra yazılırken ilgili pk yani uniqe bir id verilir. Avantajı ; verinin değişim ve derinliği saklanmış olur.Dezavantajı ise veri eğer bu şekilde sıkça değişiyorsa tablonun boyutu artacakdır.Dolayısıyla performans sorununa yol açacaktır.Böylecelikle veri ambarı yapsını ve etl süreçlerini zora sokacaktır.

 

Dipnot : Burda ayrıca bir noktaya değinmek istiyorum.Veri ambarınızı ilk kurduğunuzda bunları ayrıntılı olarak planlamanız gerekmektedir.Veri ambarları yeni kurulurken-modellenirken birçok birimin koordineli olarak çalışması gerektiğini biliyoruz.Fakat burda veritabanı uzmanı-analist işbirliği çok önemlidir.Eğer siz, bir tablonuzu sadece select-insert için kullanacağım dediniz fakat sonrasında o tablo üzerinde update ve delete gibi  dml işlemlerini sıkça yapıyorsanız bu bir planlama eksikliğidir.Bu yapıya dönüşeceğini tahmin edip buna göre modellemenizi yapmanız gerekmektedir.(istisnalar her zaman olabilir). Gereksiz iş yükü,zaman,veri tabanın işlemleri,disk kapasitesi..vb birçok sorun sizi bekliyor olacaktır.

Tarihsel derinliği izlemek için bu yapı kullanılır.

scd4

Şekilde görüldüğü gibi yeni bir kayıt olarak verimiz eklendi.

 

3-      Alan veya alanlar eklemek.

Burda , 1 veya yapımıza göre birden fazla alan eklenir.Örneğin şehir bilgimiz değiştiyse şimdi ki yaşadığımız şehrin bilgisini,daha önce yaşadığımız şehri ve ne zaman bu durumun güncellendiği bilgisini tutarız. Bu yapı ile yatayda büyüyen bir tablo yapısına sahip oluruz.Kısmi de olsa belli bir tarihsel derinlik tutarız.Dezavantajı ise tekrar bu bilgiler güncellenmek istenirse bu sefer bunun için tekrar bir kolon açılması veya diğer bilginin ezilmesi olacaktır.Bu şekilde birçok güncellemenin olduğunu düşünmek istemeyiz sanırım J

 

scd5

Gördüğünüz gibi 2 adet yeni kolon eklendi ve şuandaki yaşadığı şehir ile güncellenme tarihi bilgileri geldi.Peki bu değişen bilgileri nasıl tutuyoruz? Bu kadar çok değişen bir veri ambarımız varsa bütün bunları göz ile ve scriptler yardımı ile yapmak zor olsa gerek ?

 

İşte bu değişen verileri yakalamak için CDC olayını gerçekleştiriyoruz.Başlı başına bir makale konusu olduğu için şimdilik sadece tanımını vereceğim.

Change Data Capture Nedir ?

Değişen verileri yakalama (Change data Capture) sistemi, ilişkisel veri tabanları üzerinde belirli tablolar üzerinde tanımlanan tetikleyici(trigger) tabanlı mantıkla çalışan yapıdır. Veri ambarı mimarisinde genellikle bir ya da birden fazla kaynaktan alınan veriler etl sürecine tabi tutularak veri ambarına aktarılır.

 

scd6

 

CDC yapısı efektif bir biçimde veriler üzerinde DML(ekleme, silme, güncelleme) işlemleri gerçekleştirildikten sonra hangi veri üzerinde değişiklik yapılmışsa bu veriyi yakalar ve kaynaktan hedefe senkronize bir biçimde aktarımını sağlar.Yani aslında bu değişen verileri yakalamak için bile ayrı bir mekanızma kurmamız gerekiyor.

Şimdilik bu kadar.Yeni yazımızda görüşmek üzere.

Hakkında Yusuf Arslan

Sakarya Üniversitesi Bilgisayar Mühendisliği bölümünü bitirdikten sonra kariyerine Datawarehouse-Database Uzmanı olarak devam etmektedir Sitenin kurucusu ve yazarıdır. yus[email protected] adresinden bana ulaşabilirsiniz.

Cevapla

E-posta adresiniz yayınlanmayacak. Required fields are marked *

*


Şu HTML etiketlerini ve özelliklerini kullanabilirsiniz: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>