2010-03-08 6 views
6

상당히 큰 레거시 프로젝트에서, 나는 털이 많은 모듈을 무스 클래스로 리팩터링했다. 이 모듈들 각각은 데이터베이스 액세스를 필요로하고 (게으른) 속성을 가져온다. 이러한 객체는 꽤 많이 사용되기 때문에 예를 들어 변경되지 않은 데이터와 같이 중복 요청 수를 줄이려고합니다.mod_perl을 사용하여 중복 요청 수를 어떻게 줄일 수 있습니까?

이제 어떻게 제대로 수행 할 수 있습니까? 나는 몇 가지 대안을 가지고 :

  1. 은 (게으른 속성으로 까다로운 아마 너무 어려운 일이 아니다,하지만) 갱신 5-10 분 만료와 함께 memcached에 저장하는 역할을 통해 내 무스 클래스에서 캐싱을 구현 : KiokuDB 아마 어떻게 든
  2. (DBIC은 아마 그 자체로 떨어져 고통의 대부분을 소요됩니다) 만들기 (어쨌든 일을해야) DBIx::Class에 속성에 대해
  3. 마이그레이션을 읽을 수 있고, 여기에 도움이 수준에서 캐싱을 구현할 수 내 개체는 mod_perl 프로세스 내에서 유지됩니다. (단서 없음 :()

어떻게하면 좋을까요? 정상적으로 생각하면 어떻습니까? 개체 또는 ORM 수준에서 캐싱 데이터를 선호합니까?

답변

0

어쨌든 DBIC를 사용하고 있기 때문에이 변경을 처리하는 것이 적절합니다. 자신의 롤을 돌리고 DBIC를 구현하는 것은 의미가 없으므로 관리자가 DBIC를 사용하고 있지만 자택 캐싱을 사용하는 것을 발견하면 잠시 멈출 수 있습니다. "웬일인지."

이 작업을 수행하지 않는 유일한 이유는 (1) 현재 성능이 정말로 필요하고 DBIC 변경 사항을 기다릴 시간이 없다면 상당히 광범위 할 것이라고 생각하기 때문입니다. 또는 (2), 만약 당신이 정말로 DBIC로 옮길 지 확신이 없다면. 조사하지 않고 기본 CRUD 대신 많은 사용자 지정 SQL을 수행하는 경우 결국 투자 수익이 극히 적어 질 수 있습니다.

1

# 3의 짧은 대답은 '내'를 사용하지 마십시오. 단지 당신이 데이터마다 5 분에서 10 분 다시로드하는 경우 괜찮 아파치 아이, 내부 공유됩니다 핸들러 내에서 다음과 같이 생성

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; 

객체 : 당신은 뭔가를 할 수 있습니다. 읽기 전용 인 모든 모듈과 객체는 PerlPostConfigRequire 스크립트에로드해야 모든 자식에서 공유됩니다.

관련 문제