문제

서버 측면에서 정렬을 통해 클라이언트 측 테이블 정렬에 의존해야 할 때 데이터베이스 지향 웹 애플리케이션의 상황을 조사하고 있습니다. 나를 괴롭히는 한 가지 특별한 상황은 페이지 매김입니다.

큰 테이블 (10000 행)을 페이지를 쉽게 잡고 특정 열로 정렬하려고 할 때 가장 좋은 방법은 무엇입니까?

이와 관련된 몇 가지 문제는 다음과 같습니다.

  • 한 번에 전체 테이블을 클라이언트쪽으로 돌려 줄 수 없습니다.
  • JavaScript로 10000 레코드를 정렬 할 수 없습니다.
  • 테이블을 정렬하면 현재 페이지뿐만 아니라 모든 페이지에서 행을 정렬해야합니다.

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

어떤 접근 방식이 서버로드가 최소화되도록 클라이언트 측과 서버 측 상호 작용을 잘 혼합하게 할 것인가?


덧셈:

자, 데이터베이스를 정렬하고 Reqd 페이지를 반환하는 것이 가장 좋은 방법 인 것 같습니다.

이제 이것을 고려하십시오 :

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

quesion : 최종 결과가 "페이지 (1/10)가 사용자 이름으로 정렬 된 경우"또는 "페이지 (3/10)가 사용자 이름으로 정렬되어야합니까?

나는 이것이 매우 주관적인 질문이라는 것을 알고 있지만, 당신은 무엇을 추천하고 그 이유는 무엇입니까?

도움이 되었습니까?

해결책

클라이언트 측은 간단하게 유지됩니다. JavaScript 정렬/페이징은 매우 작은 결과 세트에만 해당됩니다. 사용자가 성능이 적용되지 않을 정도로 작습니다.

서버 측은 서버로드를 최적화 할 수있는 곳입니다.

로드는 더 많은 페이지에 대한 자주 요청, 페이지 당 다수의 행/열 및 자주 의지 요청의 형태로 제공 될 수 있습니다. (우리는 필터링에 대해서도 이야기하지 않았습니다)

따라서 사용자에 따라 실제 사용, 당신은 어떤 형태의 캐싱이 필요할 수 있습니다. 이는 사용자가 무엇을하는지 알고 난 후에 한동안 제안입니다.

  • 빈번한 페이지 요청의 경우 일부 AJAX 요청이 다음 몇 페이지 (및 이전) 페이지를 사전로드 한 다음 사용자 요청에 따라 행 (JavaScript를 통해)을 테이블로 바꾸는 것을 고려하십시오.

  • 큰 페이지 크기의 경우 행을 "가장 많이 사용되는"응용 프로그램 (메모리) 캐시에 유지하여 데이터베이스가 동일한 거대한 데이터 덩어리를 반복해서 뱉어 내지 않도록 고려하십시오.

  • 자주 의지하는 경우 좋은 접근 방식은 결과만으로 캐시 테이블을 SQL로 유지하는 것입니다.

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


추가 응답 :

나의 주관적인 반응은 이것입니다. 사용자 (ME)는 임의의 페이지에서 정렬하기를 원합니다. 그들을 (나)하자. 당신이 원하는 곳에있는 것보다 더 성가신 것은 없으며, 응용 프로그램이 목록의 시작 부분으로 돌아가는 것입니다.

또 다른 고려 사항은 여러 수준의 정렬입니다. 일련 번호별로 정렬을 구현 한 다음 사용자 이름을 구현 하시겠습니까? Microsoft Excel이하는 일 또는 사용자가 익숙한 다른 응용 프로그램을 고려하십시오. 사용자는 아마도 1 페이지로 돌아가는 것을 포함하여 자신이 익숙한 것에 대해 괜찮을 것입니다.

다른 팁

데이터베이스는 데이터 정렬 및 선택에있어 진정한 짐승입니다. 따라서 최선의 방법은 클라이언트가 서버에 "Z로 정렬 된 y 행이있는 Page X를 원한다"고 말하는 것입니다. 그런 다음 데이터베이스가 그 일을하고 클라이언트가 결과를 보여줍니다. 성능을 향상시키기 위해 클라이언트 캐시 결과를 만들 수 있으며, 현재 페이지가 요청시 즉시 표시 될 수 있도록 현재 페이지와 이전 페이지가 다음 페이지를 요청한 후 코드가 다음 페이지와 이전 페이지를 요청할 수 있습니다.

가장 좋은 방법은 데이터베이스 수준에서 정렬 및 페이징을 수행하고 화면에만 표시되는 원래 데이터의 하위 집합 만 반환하는 것입니다. 이 시나리오에서는 JavaScript가 없습니다.

몇 가지 이유로 데이터베이스 수준에서 정렬 할 수없는 경우 서버 측 스크립트로 수행해야합니다. 이 시나리오에서도 JavaScript도 없습니다.

그리고 최악의 접근법은 분명한 이유로 전혀 권장되지 않는 JavaScript로 정렬 및 페이징을 수행하는 것입니다.

DB가 화면의 특정 페이지로 전달되는 내용을 정렬하도록하십시오. 거의 항상 더 빠르고, 캐싱되며 브라우저에서 이러한 하중을 완화시킵니다.

원하는 경우 클라이언트 측에 데이터가 충분히 자세하고 이익을 얻을 수있는 경우 JavaScript 등을 통해 추가 하위 분류를 허용하십시오. 페이지간에 기억되도록 선택한 하위 소송 기능을 저장할 수 있습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top