2009-08-31 2 views
0

arraylist에 15000 개의 레코드가 있습니다. 각 레코드 크기는 약 2MB입니다. 나는이 목록을 jsp 페이지에 가장 효율적인 방식으로 표시했다.jsp에서 거대한 arraylist 표시

최선의 방법을 제안하십시오.

서버 쪽에서 데이터를 필터링 할 수 없습니다. 사용자는 JSP 페이지의 모든 레코드를 한 번에 필요로합니다.

미리 감사드립니다.

+2

효율적인 방법으로 30g 웹 페이지를 표시하고 싶습니까? 유니콘이 필요하다고 생각해. – Tom

+1

대부분의 웹 브라우저가 많은 양의 데이터를 처리 할 수 ​​없다는 것을 렌더링 할 수 있다고하더라도. 페이지가 절대로 표시되지 않습니다. –

+0

플래시 또는 flex를 시도해보십시오. UI에서 20k 레코드와 동일한 문제가 있지만 html은 지원할 수 없으므로 플렉스로드 시간이 길어질 수는 있지만 성능은 플러그인에서 실행될 때 UI에서 좋을 것입니다. –

답변

0

많은 레코드를 표시하는 데 실제로 좋은 방법이 있는지 모르겠지만 jQuery Grid에 목록이있을 수 있습니다 (Demo 페이지에는 Advance/Search에서 12000 개의 레코드 표시 및 검색을위한 예제가 있습니다) . 또는 ExtJS과 같은 다른 JavaScript Grid가 도움이 될 수 있습니다.

+0

솔루션을 제공해 주셔서 감사합니다. 저는 실제로 12000 레코드를 가져 오는 데 대한 데이터베이스 트립을 고려하지 않고 동시 사용자를 고려하지 않는 솔루션을 찾고 있습니다. –

+0

데이터베이스가 12000 개의 레코드를 가져올 수없고 클라이언트가 데이터베이스 설계를 다시 생각해 볼 수있는 날짜의 양을 렌더링하는 것보다시기 적절하게 페이징을 추가 할 수 있다면. Stephen이 이미 말했듯이 많은 데이터를 한꺼번에 표시하면 클라이언트를 죽일 수 있습니다 (렌더링되는 데이터는 2MB가 아닙니다). – Daff

+0

우리는 장시간 데이터베이스 연결을 피하기 위해 일종의 직렬화를 사용할 수 있습니까? 이 경우 데이터베이스 측의로드가 낮아지며 재귀 fetch가 파일 시스템에서 수행 될 수 있습니다. –

7

간단한 대답은 15,000 * 2Mb 레코드를 간단한 JSP로 렌더링 할 수 없다는 것입니다. 브라우저에 전송 된 서버에서 렌더링 한 다음 브라우저에서 버퍼링하고 표시해야하는 30GB 웹 페이지 (+ 형식)입니다. 그건 단순히 작동하지 않습니다. 처음에는 사용자의 컴퓨터에 30GB RAM이 없습니다.

그래서 사용자가 전체를 보내지 않고 15,000 개의 레코드를 페이지하거나 스크롤 할 수있는 일종의 테이블 또는 목록 뷰어를 사용자에게 제공하는보다 복잡한 솔루션을 구현해야한다는 것을 의미합니다 사용자의 브라우저에. 구식 접근법은 서버 측에서 목록보기/스크롤 논리 및 렌더링을 구현하는 것입니다. 웹 2.0 방법은 AJAX 호출을 사용하여 서버에서 레코드를 가져 와서 사용자가 볼 때 클라이언트 측에서 디스플레이 및 스크롤을 구현하기 위해 일부 Javascript 툴킷을 사용하는 것입니다.

+0

포스터는 렌더링 된 레코드가 2Mb가되어야합니다. –

+0

질문은 명확하지 않지만 (IMO) 이것은 그가 의미했던 것의 그럴듯한 추정입니다. –

0

응답 작성자가 정기적으로 클라이언트에 데이터를 보내도록 flush()하십시오.

레이아웃을 수행하려면 브라우저가 많은 오브젝트를 처리해야하는 마일 높이 테이블 또는 이와 유사한 것을 사용하지 않도록하십시오.

최신 브라우저를 사용해 사용자에게 알리기. 필자는 오페라가 이러한 종류의 페이지를 잘 처리한다고 믿습니다.

+0

레코드로 jsp로 플러시 할 수 있다고 생각하지 않습니다. 이 경우 응답은 이미 커밋 된 오류를 발생시킵니다. –