Dynamics AX 2012 Caching 3
Merhaba
Dynamics Ax ile bir kayıt kümesi topluca ön belleğe alınabilir. Buna Set-based Caching deniliyor. İki türü var.
- EntireTable : Tablonun CacheLookup özelliğini EntireTable yapmak.
- RecordViewCache: Kodda RecordViewCache sınıfını kullanmak.
EntireTable Cache
Eğer bir tablonun CacheLookup özelliğini EntireTable yaparsanız ilk select ifadesinden sonra bütün veri ön belleğe alınacaktır. Önceki yazılarımda bahsettiğim select ifadesindeki kurallar burada da geçerli.
EntireTable sunucuda ön belleğe alınır ve bütün AOS lara kopyalanır. Bir istemci bir veriye ulaşmak isteyince önce kendi ön belleğine bakılır daha sonra sunucu ön belleğine bakılır. Her bir şirket için ayrı ön bellek oluşturulur. Ön belleğin boyutu 128 KB’ı geçerse ön bellek diske taşınır. Bu durum performans sıkıntısına sebep olabilir. Bu yüzden büyük verisi olan tablolarda pek tavsiye edilmez.
EntireTable ön belleği tabloya insert, update veya delete işlemi olduğunda bütün AOS lardan silinir. Ön belleğin silinmesinden sonraki ilk select ifadesiyle veri tekrar ön belleğe alınır. Bundan dolayı çok sık hareket gören tabloların bu tipte olması tavsiye edilmez. Bu durumlardan bağımsız olarak AOS her 24 saate bir bütün EntireTable ön belleğini temizler. Eğer siz kod ile bir tablonun ön belleğini silmek isterseniz flush <Tablo ismi> demeniz yeterli. EntireTable ön belleği join ifadelerinde çalışmaz.
RecordViewCache Cache
Öncelikle nofetch ifadesiyle bir recordBuffer oluşturulur. Bu buffer RecordViewCache clasına yüklenir ve o oturum boyunca yapılan diğer sorgular ön bellekten yapılmış olur. Bu yapıda bir sorun var. Kayıtları Linked liste tuttuğu için kayıt sayısı arttıkça performans sorunu ortaya çıkacaktır. Şöyle bir örnek yapalım:
static void RecordViewCache(Args _args) { CustTrans custTrans; RecordViewCache recordViewCache; ; //RecorBuffer doldurulur. select nofetch custTrans where custTrans.AccountNum == '4000'; // Kayıtlar ön belleğe alınır. recordViewCache = new RecordViewCache(custTrans); // Ön bellek kullanılır. select firstonly custTrans where custTrans.AccountNum == '4000' && custTrans.CurrencyCode == 'USD'; }
Ön bellek ile ilgili benim yazacaklarım bu kadar.
Daha ayrıntılı bilgiye MSDN’den ve Inside Dynamics AX 2012 kitabından ulaşabilirsiniz.
Selamlar.