2012-09-12 3 views
1

한 묶음의 도구가 하나의 테이블에 저장되어 있고 각 도구와 관련된 트랜잭션이 하위 테이블에 저장되어 있습니다. 트랜잭션 테이블 항목의 성능을 기준으로 구매할 도구를 결정하는 알고리즘이 있습니다. 알고리즘의 내 출력은 도구를 구입할 것을 권장 할 수 있으며 성능을 기반으로하지 않을 수 있습니다.예기치 않은 결과로 서버 측 페이지 매김을 달성하는 방법

최종 목표는 알고리즘으로 구매할 것을 권장하는 페이지 단위 (서버 쪽 페이지 매김 포함)로 도구 목록을 표시하는 것입니다. 내 질문은, 만약 내가 처음 10 개의 도구와 그 거래를 가져 와서 알고리즘에 입력으로 제공한다면, 내 알고리즘은 모든 도구를 추천 할 수도 있고하지 않을 수도있다. 그런 경우, 표시 할 수있는 도구가 충분하지 않다. 현재 페이지. 다시 데이터베이스로 돌아가서 내 결과가 현재 페이지 (너무 많은 db 반복을 포함)를 표시하기에 충분할 때까지 몇 가지를 더 가져와야합니다.

현재 모든 것을 가져 와서 서버 측 (Ehcache 포함)에서 결과 컬렉션을 캐싱하고 서버 측 페이지 매김을 내 컬렉션에 적용합니다. 그러나 너무 많은 동시 사용자가이 페이지를 공격하면 서버가 메모리를 소모하게됩니다.

이런 종류의 문제에 가장 적합한 솔루션은 무엇입니까? !!?

답변

0

내가 어떤 은색 총알 솔루션이없는 두려워 해요,하지만 난 당신이 이상적으로 같은 트랜잭션의 모든 반복을 실행하는 데 필요한 페이지 매기기에 정확한 결과를 원한다면 여기에 일반적으로

을 내 생각을 공유하고 싶습니다 그렇지 않으면 영구 저장 장치에 대해 수행 할 수있는 병렬 업데이트로 인해 데이터가 일관성이 없습니다. 그러나 나는 당신의 게시물에서 그 가능성을 확신하지 못합니다.

그래서

는 다음 사항을 고려하십시오

  • 지금처럼, 대신 일부 주 메모리에 오브젝트 풀 및 유지 관리 메모리의 모든 내용을 저장하지 마십시오 병렬 고객 것이라고 만 저장하여 객체에 대한 포인터 대신 전체 개체.

  • 결과의 일종의 직렬화를 사용하십시오. 사소한 직렬화 외에도 ehcache와 함께 작동하는 "힙 메모리"에 관심이있을 수 있습니다. http://ehcache.org/documentation/user-guide/bigmemory

  • 반복에 걸쳐 툴 ID 만 저장하고 알고리즘이 결정을 내리는 데 필요한 최소한의 데이터 만 저장할 것을 고려하십시오. 그런 다음 결과를 표시 할 준비가되면 추가 요청을하고 일련의 ID를 입력으로 제공하여 결과를 표시하는 데 필요한 항목을 지속성 계층에서 가져옵니다. 가능성은 여전히 ​​모든 데이터가 필요하지 않으며 이로 인해 메모리가 절약됩니다.

  • 힙을 늘리십시오. 사소한 :-)

희망이

+0

는 응답 마크 주셔서 감사합니다 도움이됩니다. 나는 세 번째 옵션을 좋아하고 그 방향으로 일하기 시작할 것입니다. "힙 메모리"에 대해 아는 것이 좋습니다. 공유 해 주셔서 감사합니다. –

관련 문제