2009-06-23 5 views
6

데이터베이스 측 웹 응용 프로그램에서 서버 측 정렬을 통한 테이블의 클라이언트 측 정렬에 의존해야 할 상황이 있습니다. 나를 괴롭히는 한 가지 특별한 상황은 페이지 매김입니다.페이지 매김 및 정렬 관련 문제

큰 테이블 (10000 행)에 페이지를 매기려고 할 때 특정 열을 기준으로 정렬 할 때 가장 좋은 방법은 무엇입니까?

나는이와 관련된 몇 가지 문제가 있음을 이해 하나는

  • 내가 할 수있는 자바 스크립트를 사용할 수없는 종류의 많은 10000로 기록
  • 이동에

    • 내가 클라이언트 측에 전체 테이블을 반환하지 못할
    • 테이블을 정렬하면 현재 페이지뿐만 아니라 모든 페이지의 행을 정렬해야합니다.

    이 목록에 더 추가 할 문제가 있습니까?

    어떤 접근 방식을 사용하면 클라이언트 측과 서버 측 상호 작용이 잘 혼합되어 서버로드가 최소화됩니까?


    ADDITION :

    좋아, 데이터베이스 및 REQD 페이지하는 이전 페이지와 다음 페이지를 반환에 정렬하면 가장 좋은 것 같다.

    지금이 고려 :

    사용자는 일련 번호로 정렬 된 테이블의 페이지 (10의 3)에 있습니다. 이제 사용자는 "username"이라는 헤더를 클릭하여 사용자 이름별로 테이블을 정렬하려고합니다.

    Quesion : 최종 결과는 "사용자 이름별로 정렬 된 페이지"또는 "사용자 이름별로 정렬 된 페이지 (3/10)"이어야합니까?

    저는 이것이 매우 주관적인 질문이라는 것을 알고 있습니다. 그렇다면 왜 추천하고 싶습니까?

    +0

    좋은 질문입니다. 당신은 아마 내가 최근에이 문제를 다루었다고 말할 수 있습니다. –

    답변

    3

    클라이언트 측은 매우 단순하게 유지하는 것이 가장 좋습니다. 자바 스크립트 정렬/페이징은 아주 작은 결과 집합에만 해당되며 사용자가 실적에 유의하지 않을 정도로 작습니다.

    로드가 더 많은 페이지, 페이지 당 행/열 많은 수의, 그리고 의지에 대한 빈번한 요청에 대해 자주 요청의 형태로 올 수 있습니다

    서버 쪽

    는 서버 부하를 최적화 할 수있는 곳입니다. (우리는 심지어 필터링에 대해 말하지 않았습니다)

    사용자에 따라 실제 사용량이이므로 어떤 형태의 캐싱이 필요할 수 있습니다. 자주 페이지 요청에 대한

    • , 일부 Ajax 요청 후, 다음 몇 (이전) 페이지를 미리로드 (행에 교체 고려해 : 당신은 사용자가 무엇을하는지 아는 후에 이러한 시간에 대한 제안 사항, 참고 Javascript를 통해) 사용자 요청시 테이블로.

    • 대용량 페이지 크기의 경우, "가장 최근에 사용 된"응용 프로그램 (메모리) 캐시에 행을 보관하는 것이 좋습니다. 그러면 데이터베이스에서 동일한 거대한 데이터 덩어리를 계속해서 반복해서 나올 필요가 없습니다.

    • 자주 사용하는 좋은 방법은 SQL에서만 캐시 테이블을 결과와 함께 유지하는 것입니다.

    그리고 항상 항상 데이터베이스를 적절하게 색인화하십시오.


    추가 응답 :

    내 매우 주관적인 응답은 이것이다 : 사용자는 (나) 임의의 페이지에서 정렬하고자합니다. 그들 (나). 당신이되고 싶어하는 것보다 더 짜증나는 일은 없습니다. 그리고 신청서를 가지고 있으면 목록 시작 부분으로 돌아갈 수 있습니다.

    또 다른 고려 사항은 여러 수준의 정렬입니다. 일련 번호로 정렬 한 다음 사용자 이름으로 구현 하시겠습니까? Microsoft Excel이 무엇인지 또는 사용자가 잘 알고있는 다른 응용 프로그램을 고려하십시오. 사용자는 익숙한 것, 즉 1 페이지로 돌아가는 것을 포함하여 괜찮을 것입니다.

    +0

    +1 여러 단계의 정렬 고려 : – jrharshath

    3

    데이터베이스는 데이터 정렬 및 선택시 참된 짐승입니다. 따라서 클라이언트가 서버에 "나는 Y 행이 Z로 정렬 된 페이지 X를 원한다"고 말하도록하는 것이 가장 좋습니다. 그런 다음 데이터베이스가 그 일을 수행하고 클라이언트가 결과를 보여줍니다. 성능을 향상 시키려면 클라이언트 캐시 결과를 만들 수 있으며 요청시 즉시 표시 될 수 있도록 현재 페이지를 가져온 후 다음 페이지와 이전 페이지를 요청할 수 있습니다.

    0

    최상의 방법은 데이터베이스 수준에서 정렬 및 페이징을 수행하고 화면에 표시되는 원본 데이터의 하위 집합 만 반환하는 것입니다. 이 시나리오에서는 자바 스크립트가 없습니다.

    데이터베이스 수준에서 정렬 및 페이지를 수행 할 수없는 이유로 서버 측 스크립트를 사용해야합니다. 이 시나리오에서도 자바 스크립트가 없습니다.

    최악의 접근 방식은 자바 스크립트로 정렬 및 페이징을 수행하는 것이고 물론 명백한 이유 때문에 권장되지 않습니다.

    0

    화면에 특정 페이지로 배달되는 내용을 db 정렬하십시오. 거의 항상 빨라지고 캐싱되어 브라우저에 부담을 덜어줍니다.

    원하는 경우 데이터가 충분히 자세하고 이점이있는 경우 클라이언트 측에서 자바 스크립트를 통해 하위 정렬을 허용 할 수 있습니다. 선택한 하위 정렬 기능을 페이지간에 기억되도록 저장할 수 있습니다.