26 Temmuz 2012 Perşembe

Hibernate Birincil Önbellek

Birincil Önbellek
Birincil önbellek session ile ilişkilendirilir ve session kapatılınca yok olur. İkincil önbellek ise SessionFactory ile ilişkilendirilir ve SessionFactory kapatılınca yok olur.

Birincil önbelleğin Session ile ilişkili olduğunu gösteren şekli buradan aldım.

Bir diğer şekli ise buradan aldım.

Birincil önbellek bir nesneye arka arkaya birkaç güncelleme gelirse her seferinde veritabanına gitmeden SQL cümlelerini mümkün olduğunca geciktirebilmeye yarar. Eğer session kapatılırsa önbellek te beraberinde kapatılır. Birincil önbellek ile ilgili kurallar aşağıda.

Session.flush() –>  Flushes level one cache content to db software
Session.evict() –> Remove the content of level 1 cache
Session.close() –> closes level 1 cache, before that it calls session.flush()

Batch Processing
Birincil önbellek batch işlemlerde bazen OutOfMemoryException problemine sebep olabilyor. Bunun sebebi ve nasıl çözüleceği "Batch Processing" sayfasında anlatılmış. Ben de aşağıya bazı notlarımı ekliyorum.

Batch Update
Aşağıdaki kod parçasında da görüldüğü gibi openSession() metodu ile elde edilen Session nesnesi, birincil önbellek ile ilişkili ve bu nesne ile yapılan save(),update() vs. gibi işlemlerde parametre olarak geçilen nesne önbelleğe dahil ediliyor. Ancak çok fazla sayıda işlem yapılırsa önbellek şiştiği için OutofMemoryError hatası alabiliyoruz.


Bu durumdan kurtulmak için iki yol var. Birinci yöntemde önbellek ara sıra temizleniyor. Aşağıdaki kodda önbellek her 20 döngüde bir temizleniyor.
İkinci yöntemde ise önbellek hiç kullanılmıyor. Birinci koddan farklı olarak bu sefer openStatelessSession() metodunun çağırıldığına dikkat !
Batch Select
Batch select için örnek Managing the caches başlığı altında verilmiş.
Birincil Önbellek ve load
When does Hibernate Session.load() throw an exception sorusunda load() metodunun bir nesnenin veritabanında olup olmadığını kontrol etmek için kullanılmaması gerektiği açıklanmış.

6 Temmuz 2012 Cuma

PL/SQL String Metodları

Aşağıda kullandığım bazı String metodları örneklerini görebilirsiniz.

Trim
UPDATE Table1 A SET A.BKOD = TRIM (A.BKOD);

4 Temmuz 2012 Çarşamba

ls komutu

Not : Bu yazı ile ilgili olarak Linux Dosya Distemi başlıklı yazıya göz atabilirsiniz.
ls Komutu
ls komutu ile inode veriyapısında tutulan bir çok veriye erişmek mümkün. Aşağıdaki şekilde bu komut ile gösterilen bilgileri açıklayan bir şekil mevcut.
ls ve hardlink sayısı
What is the meaning of those numbers in the second column after typing “ls -l”? başlıklı soruda hardlinklerin ne olduğu açıklanmış. Dikkat edilmesi gereken nokta, dizinler için hardlink sayısı 2'den başlıyor. Örneğin aşağıdaki kırmızı çerveçe içine alınmış dizinde 1 tane alt dizin mevcut.

ls ve inode numarası

Linux üzerinde bir dosyanın inode numarasını görmek için burada da anlatıldığı gibi "ls -i" komutu kullanılabilir.
$ ls -i /etc/passwd komutu çıktı olarak
752010 /etc/passwd verir. 75200 inode numarasıdır.
ls -i komutu ile aynı görevi gören stat komutu da mevcut.

C dili ile inode numarasını almak için stat sistem çağrısı kullanılır.

How to: Linux / UNIX Delete or Remove Files With Inode Number başlıklı yazıda da anlatıldığı gibi inode numarası ile bir dosyayı silmek için find komutu kullanılabilir.