Informatica Partitions

Merhabalar,

Partition konusu veri tabanları(db) ile ilgilenen herkesin hemen hemen herkesin karşısına gelmiş önemli konulardan biridir. Bu yazıda benim bahsedeceğim db partitioning ten tamamen farklı olan Informatica da Partition konusu olacak.

Db partition, daha doğrusu table partitioning te tabloyu fiziksel olarak bölmek diyebiliriz. Özellikle çok fazla data içeren tabloların üzerinden işlemler yapmak zorlaştığı için sıkça başvurulan bir yöntem olarak karşımıza çıkmakta.

Informatica Partition ın uygulamamızdaki temel amaç Table Partition ile aynı, yani: Performans. Ama sadece amaç aynı, uygulama kısmı tamamen farklı.

Informatica da mapping lerimizi çalıştırmamız sırasında çeşitli bottleneck gibi performansı sorunları ile karşılaşırız. Performans arttırmak için birçok yöntem uygulayabiliriz, best practice lere göre hareket bile bottleneck in önüne geçmemizde önemli yararlı sonuçlar doğuracaktır. Best practice lere göre hareket etsek de performansımız hala düşük, yetersiz olabilir. Bu gibi durumlarda sıkça partition yöntemine başvurulur. Partition Informatica lisansı ile birlikte gelmeyip, ayrıca satın alınan bir özelliktir. Eğer bu yeteğe sahipseniz birazdan bahsedeceğim ciddi Performans kazançlarına sahip olabilirsiniz.

Informatica WF yi çalıştırdığımızda bir seferde bir data geçebilir. Yani pipeline tek bir thread olarak çalışır. Amacımız, Partition ile birlikte WF yi multi thread çalıştırmak. Yani bir seferde birden fazla datayı source-target arasında işleme. Kaç tane Partition oluşturursak o kadar çok thread oluşturmuş oluruz, yani 7 Partition oluşturursak wf çalıştırdığımızda tek seferde 7 satır veri aynı anda source tan target a doğru işlenmeye başlanacak.

Partition oluşturmayı, mevcut pipeline ımızı kopyalayarak çoğalttığımızı böylecek aynı anda Partition sayısı kadar pipeline ın çalıştığını, yani pararlel olarak dataların işlenmesi olarak düşünebilirsiniz.

Informatica da çeşitli partition çeşitleri bulunmakta. Bunlar:

  • Database partitioning: Oracle ve IBM DB2 için kullanılabilir bir yöntem. Informatica Integration Services, DB lerdeki tablolarda mevcut partition larin ilgili node larından datayı sorgular.
  • Hash auto-keys: The PowerCenter Integration Services sıralanmış portları key gibi düşünür, bunları sıralar ve pipeline a böler.Rank, Sorter, and unsorted Aggregator transformations ile birlikte kullanılır. Bunun sebebi bu task ların Data Integrity sinin diğer partition yöntemleri ile bozulabilmesi. Demo da bu konuya değineceğim.
  • Key range: Her partition belirlenmiş key aralığındaki datayı tutar.
  • Pass-through: Bir partitiona data yüklemeya başlar, diğer partition point ile karşılaşınca diğerine geçer. Default partitionin methodu olmakta.  Datanın distribition ında herhangi bir değişiklik yapmayıp, sadece datayı pipeline lara ayırmak isteniyorsa kullanılabilir.
  • Round-robin: Block olarak datayı ayırır aynı sayıda dataya sahip olur her block. Load balancing gibi konular söz konusu ise kullanırız. Her bir partition eşit sayıda datayı geçirir.

 

Partition sırasında memory kullanımı artacağı yeterli memory e sahip olup olmadığımızı önemli bir nokta olarak karşımıza çıkmakta.

Demo üzerinden Informatica da Partition konusunu inceleyelim.

Amacımız STG04.Numbers tablosundaki dataları STG04.TRG_Numbers tablosuna tekrarsız bir şekilde aktarmak.

partition1.PNG

Aynı yapıda STG04.TRG_NUMBERS tablosu oluşturuyorum.

Power Center da mapping i oluşturuyoruz.

partition2

Kayıtları tekrarsız bir şekilde Target a aktarmak istediğimiz için Aggregator Task ını kullanıyorum. Agg. Task ın performansını artırmak amacıyla Sort Task ı kullanıyorum. Örneğimiz için gerekli değil fakat gerçekte datalarımız daha büyük olduğu için Sort u Agg. Task tan önce kullanmak performans açısından faydalı olmakta. Sort lanmış data için cache te daha az yer tutulur.

Sort Task ında key kolonunu seçerek hangi kolona göre sort lama işlemini yapacağımızı belirtmemiz gerekmekte.

partition3.PNG

Aggregator da, hangi kolon üzerinden Group lama yani bizim örneğimiz için Distinct işlemini yapacağımızı belirtmek üzere GroupBy ı belirtiyoruz.

partition4.PNG

Mapping i kaydedeip, WF u oluşturmak üzere WorkFlow Manager ekranına geçiyoruz.

partition5.PNG

Datamızın çok fazla olduğunu performans artırmak amaçlı Partition oluşturacağımızı düşünerek bu örneği gerçekleştirdiğimizden Session Task ın Partition özelliğini ayarlamamız gerekmekte.

Session Task >> Mapping >> Partitions (Sol alt köşe)

partition6.PNG

Default ta Partition sayısı 1 olarak karşımıza çıkmakta. Tek seferde tek data aktarılır. Bir seferde multi data aktarabilmek için daha doğrusu 2 data aktarımı yapabilmek için totalde 2 partition a ihtiyacım var. Yani bir partition daha oluşturmamız gerekmekte.

partition7.PNG

SQ yu seçip Edit Partition Point i seçiyoruz. Add dedikten sonra bir Partition daha ekliyoruz.

Partition Type olarak Pass Through u seçiyoruz. Sort, Agg.  ve Target Task larının da Pass Through olarak belirliyoruz.

partition8.PNG

WF yi çalıştırıp sonuca baktığımızda, 11 satır verinin source geldiğinin her partition dan 8 satır verinin aktarıldığını görebilmekteyiz. Yanlış bir sonuçla karşı karşıya kaldığımız aşikar. Amacımız 11 satır  source tan gelen verinin distinct bir şekilde target a aktarılmasını sağlamaktı. Oysaki her iki Partition da 8 er satır veri Target a aktarılmış. Olması gereken toplamda 8 satır verinin  Partition lardan geçerek Target a aktarılması. İşte burada kritik bir nokta ile karşı karşıyayız. Performans artırmak amaçlı kullandığımız Partition yöntemleri Data Integrity i bozabilir. Bunun sebebi her yöntemin her Task ile mantıklı sonuç vermemesi. Zaten farklı Partition Yöntemlerinin olmasının sebebi değişen amaçlara göre tutarlı sonuç üretebilmek adına doğru yöntemi seçmek.

partition9.PNG

Bizim örneğimizdeki kritik nokta Sort Task ı. Sort Task ı için Partition yöntemi olarak Pass Through u seçmek tutarsız sonuçlara bizi yönlendirebilir. Bunun sebebi Pass Through ile verinin distribition ında hiçbir şeyi baz almayıp sadece dağıtması. Böylece farklı Partition larda aynı data olup, aynı datalar Target a aktarılabilmekte ki bizim örneğimizdeki yanlış sonucu oluşturan neden bu.

Pass through yerine sıralı bir şekilde Partition lara datayı aktarıp, aynı datanın farklı partition larda olmayacağından emin olduğumuz Hash-Auto Key yöntemini seçebiliriz. Bu yöntem ile datalar sıralanıp, bu port ları key gibi düşünerek Partition lara bölebiliriz.

Partition 1: 1 2 3 3 4 4

Partition 2: 5 5 6 7 8

mantığında data Sort Task ta bölüneceği için herhangi bir data tekrarlaması söz konusu olmayacaktır.

Sort Task ın Partition Type ını Hash Auto olarak güncelliyoruz.

partition10

WF tekrar çalıştırdığımızda, Partition lardan toplam 8 satır data geçtiğini görebilmekteyiz.

partition11

 

Sonuç olarak,

Partition multi pipeline oluşturmuşçasına aynı anda birden fazla datanın source tan target a doğru işlenmesini sağlayan Performans arttırıcı bir yöntemdir. Fakat, task ların çalışma mantığının farklı olmasını göz önüne aldığımızda Partition Type larının farklı sonuçlar doğuracağını ortadadır. Bu nedenle Performans artırırken, Data tutarlılığınızı bozmamak adına Partition Type larını dikkatli seçmenizi öneririm.

İyi günler,

Şeydanur Sandıkçı

Reklamlar

Etiketler:, , , , , , , , , , , , , , ,

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s

%d blogcu bunu beğendi: