2010-06-14 4 views
2

대용량 데이터 객체를 메모리에로드하는 방법이 있습니까? 일반적으로 각 요청마다 한 번만로드해야합니까?많은 양의 데이터를 한 번만로드하고 각 요청에 사용할 수 있습니까?

자바에서는이 서블릿이로드 될 때 서블릿에서 객체를 인스턴스화 할 수 있지만 일단 있으면 서블릿에서 모든 요청에 ​​사용할 수 있습니다. 예제는 다음과 같습니다. 이것이 PHP로 할 수 있습니까?

public class SampleServlet extends HttpServlet { 
    private static HugeGraphObject hgo; 

    public void init() { 
    hgo = HugeGraphObjectFactory.get(); 
    } 

    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { 
    String param = request.getParameter("q"); 
    response.getWriter().write(hgo.getSomeThing(param)); 
    } 
} 
+0

'java'태그는 PHP 관련 질문이므로 제거하십시오. – dplass

답변

1

본질적으로 캐싱에 대해 이야기하고 있습니다. 이를 위해서는 APC, XCache, memcached와 같은 PHP 캐싱 솔루션 중 하나를 사용해야합니다. 벤치마킹 측면에서 이러한 솔루션을 비교하는 훌륭한 기사가 많이 있습니다. Memcached는 여러 서버에서 사용할 수 있으므로 인기가 있습니다.

저는 memcached와 XCache를 개인적으로 사용했습니다. 객체와 변수를 저장하면 제대로 사용하면 오버 헤드를 절반 이상 줄일 수 있습니다. 플랫폼 간 캐싱 (APC, XCache 등)을 처리하는 클래스 인 Zend_Cache (http://framework.zend.com/manual/en/zend.cache.html)를 살펴보십시오. Zend_Cache를 사용할 때 APC에서 XCache로 또는 파일 기반에서 memcached로 전환하는 것은 단일 문자열을 변경하는 것만 큼 간단합니다.

0
그냥 내가 믿지 PHP, 자사의 서버 측에

, 그래서 (내가 잘못 아니에요 경우) ... 모든 시간을 읽고 처리 할 브라우저)

4

당신은 APC에서 캐시 것 . 이런 식으로,

$hgo = apc_fetch("hgo_v1"); 

if (!$hgo) { 
    $hgo = HugeGraphObjectFactory(); 
    apc_store("hgo_v1", $hgo); 
} 

이렇게하면 서버 인스턴스 당 한 번만 개체를로드하면됩니다.

1

shared memory을 사용하십시오.

+0

또한 아주 좋습니다! 좋은 예가 여기에 있습니다 : http://www.re-cycledair.com/php-dark-arts-shared-memory-segments-ipc – eikes

0

PHP에서 서버로의 각 여행은 고유합니다.

1

다른 사람들처럼 PHP에 할당 된 메모리는 날아가서 모든 요청에 ​​대해 다시 초기화되므로 단일 요청을 초과하여 유지하려는 모든 데이터를 eslewhere에 저장해야합니다. 즉, 서비스 요청에 PHP 변수로 다시로드하는 중대한 오버 헤드가 있음을 의미합니다.

PHP를 사용하여 Java 프로그램을 작성하려는 경우 매우 멀리하지 않을 것입니다. PHP가 실패한 것이 아닙니다. C 또는 Java 프로그램을 Lisp 프로그램으로 작성하려고하면 동일한 문제가 발생할 것입니다. 데이터를 관련 저장 매체로 리팩토링/푸싱하고 효과적으로 쿼리함으로써 문제를 해결할 가능성이 높습니다.

그다지 드문 경우가 있습니다 (어떤 식 으로든 방법론을 추천하지 않는다고 가정하지 마십시오). 여기서 문제를 해결하는 방법은 클라이언트 프로그램에 서비스를 제공하는 데몬을 개발하는 것입니다.하지만 OO를 사용하여 작성하는 경우 메모리 관리에주의해야합니다 (순환 참조 검사 가비지 수집기 사용을 고려할 수 있습니다).

관련 문제