2014-09-12 2 views
1

나는 FuelPHP & mySql을 사용하여 앱을 개발 중이며 제공된 ORM 기능을 사용하고 있습니다.FuelPHP ORM 결과의 관계 데이터 만 캐싱

표 : pdm_data

  • 대규모 테이블 (350 + 열, 행 수)
  • 테이블 데이터 (하루에 한 번만 업데이트) 오히려 정적이
  • 기본 키 문제는 다음과 같은 테이블입니다 : obj_id

테이블 : change_request

    자주
  • 만 몇 열
  • 데이터 변경 (10 ~ 20 회/분) (테이블 pdm_data에서 obj_id)
  • 참고 기본 키

사용자가 예를 들어 그들에게 볼 시트를 사용자 정의 할 수 있습니다. ORM을 사용하여 실시간으로 쿼리하도록 변환 된 열에 필터 (예 : change_request.obj_id = 34 AND pdm_data.state = 6)를 저장할 수 있습니다.

그러나 ORM을 사용하여 쿼리하는 작업은 pdm_data 테이블이 큽니다. 따라서 ~ 100 행까지도 많은 mb의 데이터가 생성됩니다. 가장 큰 문제는 FuelPHP ORM에있는 것 같습니다 : 쿼리 자체가 상대적으로 빠르다고해도 모델 수화 등은 많은 시간이 걸립니다. 이상적인 솔루션은 pdm_data 테이블의 결과를 정적 인 것처럼 캐시하는 것입니다. 그러나, 내가 아는 한 FuelPHP는 릴레이션을 통해 캐쉬 테이블을 허용하지 않습니다 (쿼리의 전체 결과를 캐시 할 수 있으므로 테이블 또는 없음).

또한 ORM 대신 ORM을 사용하는 일반 SQL 쿼리를 사용하면 수화 모델이 멋진 다른 작업을 처리해야하므로 이상적인 솔루션이 아닙니다.

나는 현재 코드 다음 한 :

//Initialize the query and use eager-loading 
$query = Model_Changerequest::query()->related('pdmdata'); 


foreach($filters as $filter) 
{ 
//First parameter can point to either table 
$query->where($filter[0], $filter[1], $filter[2]); 
} 

$result = $query->get(); 

...

누군가가 이것에 대한 좋은 해결책이 있습니까?

읽어 주셔서 감사합니다.

답변

1

버전 1 ORM의 속도가 느린 것은 v2에서 해결 된 알려진 문제입니다. 나의 현재 벤치 마크는 v1 orm이 현재 v2 alpha가 약 800ms 걸리는 동안 40k 행을 수화하기 위해 2.5 초 (내 컴퓨터에서 ymmv) 걸리는 것을 보여줍니다.

가장 쉬운 해결책은 큰 선택에 대한 ORM을 제거하고 DB 클래스를 사용하여 쿼리를 구성하는 것입니다. ORM을 추상화하여 개발을 쉽게하고 싶다고 말한 것을 알고 있습니다. 한 가지 해결책은 채워진 모델 객체를 반환하기 위해 as_object('MyModel')을 사용하는 것입니다.

성능이 가장 중요한 관심사 인 경우 ORM은 적합하지 않습니다.