2010-03-08 27 views
6

Oldukça büyük bir eski projede, birkaç kıllı modülleri Moose sınıflarına dönüştürdüm. Bu modüllerin her biri, (tembel) özelliklerine veritabanı erişimini gerektirir. Bu nesneler oldukça yoğun kullanıldığı için, örneğin değişmemiş veriler için gereksiz isteklerin sayısını azaltmak istiyorum.Mod_perl ile gereksiz istek sayısını nasıl azaltabilirim?

Şimdi, bunu nasıl düzgün yaparım? Birkaç alternatifler var:

  1. (tembel özelliklere sahip zor muhtemelen çok zor değil ama) güncellemesini 5-10 dakika sona ermesi ile memcached bunları saklamak için bir rolün aracılığıyla benim Moose sınıflarında önbelleğe alma uygulamak: KiokuDB muhtemelen nasılsa
  2. (DBIC muhtemelen sadece uzakta tek başına ağrısının en alacaktır) yapmak (zaten yapılması gereken) DBIx::Class için öznitelikler hakkında
  3. Geçirme kadar okumak zorunda, burada yardımcı ve bu düzeyde önbelleğe uygulamak nesneler mod_perl işleminin içinde kalıyor (bunu nasıl yapacağımı bilmiyorum :()

Bunu nasıl yaparsınız ve akılcı bir yol olarak ne düşünüyorsunuz? Önbelleğe alma verileri nesne veya ORM düzeyinde tercih edilir mi?

cevap

0

Zaten DBIC yapmakta olduğunuzdan beri, bu değişikliğin halledilmesine izin vermek mantıklı olacaktır. DBIC kullandığınızı, ancak evde yetiştirilen bir önbellekle ... "nedense."

Bunu yapmamanın tek nedenleri (1) şu anda gerçekten bu performansa ihtiyacınız varsa ve DBIC değişikliklerini beklemek için zamanınız yoksa, bunun oldukça kapsamlı olacağını düşünürüm. Veya (2), gerçekten DBIC'ye geçip geçmeyeceğinizden emin değilseniz. Soruşturma yapmadıysanız ve temel CRUD yerine çok sayıda özel SQL yapıyorsanız, bu yatırımın çok az bir geri dönüşü olabilir.

1

# 3 kısa yanıtı: 'my' kullanmayın. Sadece Eğer verileri her 5-10 dakikada bir yeniden yüklüyorsanız gayet her Apache çocuğun içinde paylaşılacak olan işleyicisi içinde böyle oluşturulan

use vars qw($object); 
# OR post perl5.6: 
# our ($object); 

# create your object if it doesn't already exist 
$object ||= create_object; 

# Maybe reload some attributes if they have expired. 
$object->check_expires; 

Nesneler: Sen gibi şeyler yapabilir. Salt okunur olan tüm modüller ve nesneler bir PerlPostConfigRequire komut dosyasına yüklenmelidir, böylece tüm çocuklar arasında paylaşılacaktır.

İlgili konular