2013-08-06 3 views
1

다른 질문으로, 나는 mysql 데이터베이스에서 150 행의 데이터를 가져온 PHP 스크립트를 실행했다가 그 데이터에 대해 계산을 수행했다.이 계산은 배열에 저장된다. (각각 120 , 또는 대략 총 3600 개의 요소). 데이터로 그래프를 만들기 때문에 "results"배열이 필요합니다. 이 스크립트는 정상적으로 작동합니다.매우 큰 배열을 다루는 모범 사례? DB?

더 나은 결과를 얻을 수있는 좀 더 밀도가 높은 데이터 세트로 스크립트를 확장하고 싶습니다. 데이터 세트는 1700 개의 행으로 구성되며 결과 배열은 각각 1340 개, 360 개 또는 약 482,400 개입니다. 문제는, 나는 이것을 시도하고 약간의 가혹한 메모리 오류를 생각해 냈다.

내가 게시 된 이전 질문에 나에게 설명한 바와 같이

는, 그 크기는 배열이 아마 배열 (1700,1699)입니다 두 번째 큰 샘플 당신의 서버 메모리

을 압도 발생합니다. 요소 당 144 바이트, 즉 415,915,200 바이트는 남은 버킷 공간보다 약간 큰 406MB 이상이므로 계산 결과를 저장합니다.

이 문제를 해결하는 일반적인 방법에 익숙하지 않습니다. 1340 개의 결과 배열 요소를 각각 (또는 10 개 또는 20 개의 1340 개의 DB 호출이 너무 많을 수 있음) 직렬화하고 base64_encode'ing하는 것을 고려하고 있었으며 SQL 서버에 업로드하고 결과 배열을 해제하여 메모리를 확보합니다. 그런 다음 DB에 특정 정보를 쿼리하여 보고서와 그래프를 만들 수 있습니다.

다른 방법이 있나요?

답변

0

대용량 데이터 세트를 처리 할 때는 Hadoop map-reduce 및/또는 다른 기술을 사용해야합니다. 그리고 데이터에서 수행하려는 대부분의 처리는 배치 프로세스 여야합니다. 결과는 다른 데이터베이스, 즉 다른 데이터베이스에 저장해야합니다. 해당 데이터베이스를 쿼리하면 응용 프로그램이 훨씬 빨라지고 메모리 문제가 발생하지 않습니다.

0

아마도 가장 쉽고 빠른 방법은 메모리 배열 솔루션을 계속 사용하고 메모리 문제를 해결하는 방법을 찾는 것입니다. 발생한 메모리 오류는 무엇입니까?

그래프를 생성하는 데 충분해야하는 1GB 이상의 RAM이있는 경우. 1GB의 RAM을 사용하면 memory_limit PHP 구성 옵션을 750MB로 설정할 수 있습니다. 한 번에 하나의 프로세스로만 생성 할 수 있으므로 생성하고 결과를 캐시하는 데 몇 가지 방법을 사용해야합니다.

현재 시스템에 충분한 RAM이없는 경우 아마존 EC2를 시도해 보시려면 시간당 약 7 센트의 16GB 머신을 현물 시장에서 구할 수 있으며, 그래프를 생성해야 할 때마다 즉시 중지하고 시작할 수 있습니다.

0

사례에 대한 자세한 내용을 제공 할 수 있습니까? 얼마나 많은 별개의 그래프를 서비스해야합니까? 기본 데이터는 얼마나 자주 변경됩니까? 동시 사용자 수는 몇 명입니까? 실제로 한 차트에 200 만 개의 요소를 표시하려고합니까?모든 쿼리 및 차트 생성을 오프로드 할 오프라인 그래프를 구축하고

  • 사용을 웹 기반 솔루션을 캐시

    1. : 특성의 부재, 내가 /주의 할에서

      은 다음의 조합을 권장 (Google 차트 + Google 융합 표)
    2. 백엔드 프로세스를 사용하여 분석을 수행하고 그래프를 생성하고 최종 결과 만 클라이언트에 표시합니다. R 및 http://www.rstudio.com/shiny/
  • +0

    작은 사용 사례 (150주기)는 설명 된대로 3300 점을 표시합니다. 큰 것 *은 400k 포인트가됩니다. 백엔드 프로세스 경로를 확실히 고려했습니다. 다이어그램을 그래프로 사용합니다. –

    관련 문제