2016-07-13 2 views
0

예상 값을 클라이언트에 json 형식으로 반환하는 PHP 애플리케이션이 있습니다. 나는 변수에 을 더 모으고 있기 때문에 모든 데이터를 보유하고 있습니다.거대한 데이터 세트를 변수에 저장 (메모리 예외 오류)

고객이 짧은 기간에 대해서만 값을 요청하면 인생은 좋으며 그는 요청한 것을 얻습니다. 문제는 그가 1 년 또는 그 이상의 예측을 요구할 때입니다. 변수에 저장된 데이터 집합이 거대하기 때문에 예외 메모리 오류가 나타납니다.

나는 메모리를 확장하고 싶지 않습니다. 나는 그것을 대체하는 방법으로 생각하고 있습니다.

나는 메모리 매핑 된 파일을 발견했다. 그것은 좋은 해결책입니까 아니면 다른 사람들을 생각할 수 있습니까? 고맙습니다!

나는 gearman을 사용하고 작업자가 검색 한 각 데이터에 대해 값이있는 새 배열이 예측 변수에 추가됩니다.

일단 모두 완료되면 클라이언트로 반환합니다.

public function requestCompleteApi(\GearmanTask $task) 
{        
    $this->forecast[] = unserialize($task->data()); 
} 
+1

처럼하지 JSON하지만, 더 컴팩트 한 포맷을하려고하면 아마 당신은 어쩌면 당신은 더 적은 메모리를 사용할 수 PHP Generators

  • (5.5 PHP에서) 발전기를 사용할 수 있습니다. 원시 데이터를 가지고있는 메모리가 부족하다면 json 문자열이 생성되는 동안 확실히 메모리가 부족할 것입니다. json은 XML과 같이 "부풀어 오른"것이 아니지만 평균 배열은 데이터의 원시 바이트 크기보다 json 문자열로 더 많은 공간을 차지합니다. –

  • +0

    클라이언트가 데이터를 저장하거나 표시 할 필요가 있습니까? 단지 페이지를 표시하고 싶다면 매 페이지마다 약 50 개의 결과가 표시되는 페이지 매김을 시도해보십시오. – vlatkozelka

    +0

    예, 클라이언트는 데이터를 다른 곳에서 처리해야합니다. –

    답변

    0

    그래서 매우 모호한 질문이지만 도움을 주려고합니다.

    는 좀 sugastes 있습니다

    1. 에 한번 사용 PHP 7 -이 변수를 저장하는 메모리를 적게 사용합니다.
    2. 큰 배열을 사용하는 경우 응용 프로그램을 다시 포맷하십시오. 도움이되지 않습니다 ProtoBuf 또는 Apache Thrift
    +0

    Gearman을 사용하고 있는데, PHP 7에서는 지원되지 않습니다. 현재 PHP 7은 옵션이 아닙니다. PHP 생성기와 Apache Thrift는 모두 유망 해 보입니다! 나는 그것을 들여다 볼 것이다! 감사! –

    +0

    Gearman에 대해서 - Net Gearman [link] https://github.com/Publero/net_gearman에서도 PHP 확장이 필요하지 않습니다. 어쩌면 PHP 7 사용에 도움이 될 것입니다. – Lakremon

    관련 문제