2009-06-23 38 views
6

Tôi đang xem xét các tình huống trong các ứng dụng web theo định hướng cơ sở dữ liệu khi người dùng phải dựa vào phân loại các bảng sắp xếp phía máy chủ. Một tình huống đặc biệt làm tôi lo lắng là phân trang.Các vấn đề với phân trang và phân loại

Khi cố gắng phân trang một bảng lớn (nói 10000 hàng), cũng như sắp xếp nó theo một cột cụ thể, cách tiếp cận tốt nhất để thực hiện là gì?

Tôi hiểu rằng một số vấn đề liên quan đến này là:

  • tôi không thể trả lại toàn bộ bảng để phía khách hàng trong một đi
  • tôi không thể loại càng nhiều càng 10000 hồ sơ với javascript
  • phân loại bảng sẽ liên quan đến sắp xếp các hàng trong tất cả các trang, không chỉ trang hiện tại.

Vì vậy, bạn có thêm bất kỳ vấn đề nào để thêm vào danh sách này không?

Cách tiếp cận nào sẽ dẫn đến sự kết hợp tốt giữa tương tác phía máy khách và phía máy chủ sao cho tải máy chủ được giảm thiểu?


ADDITION:

Được rồi, phân loại trên cơ sở dữ liệu và trả lại reqd trang, một trang trước và trang tiếp theo có vẻ là lựa chọn tốt nhất.

Bây giờ hãy xem xét điều này:

Người dùng ở trên trang (3/10) của bảng được sắp xếp theo số sê-ri. Bây giờ người dùng nhấp vào tiêu đề có tên "tên người dùng", muốn sắp xếp bảng theo tên người dùng.

Quesion: Nếu kết quả cuối cùng là "trang (1/10) được sắp xếp theo tên người dùng" hoặc nó nên là "trang (3 của 10) được sắp xếp theo tên người dùng"?

Tôi biết đây là một câu hỏi rất chủ quan, nhưng bạn sẽ đề xuất điều gì và tại sao?

+0

câu hỏi hay. bạn có thể nói với tôi gần đây đã xử lý vấn đề này. –

Trả lời

3

Mặt khách hàng được giữ đơn giản nhất: phân loại/phân trang Javascript chỉ dành cho các tập hợp kết quả rất nhỏ - đủ nhỏ để người dùng không nhận thấy được hiệu suất.

Phía máy chủ là nơi bạn có thể tối ưu hóa tải máy chủ:

Load có thể đến dưới hình thức yêu cầu thường xuyên cho các trang hơn, một số lượng lớn các hàng/cột trên mỗi trang, và yêu cầu thường xuyên cho resorting. (Chúng tôi thậm chí không nói về lọc)

Vì vậy, tùy thuộc vào người dùng của bạn và cách sử dụng thực tế, bạn có thể cần một số hình thức lưu bộ nhớ cache. Lưu ý, đây là những gợi ý trong một thời gian sau khi bạn biết những gì người dùng của bạn đang làm:

  • Đối với yêu cầu trang thường xuyên, hãy xem xét một số yêu cầu Ajax preload vài (và trước đó) trang tiếp theo, sau đó trao đổi trong các hàng (qua Javascript) tới bảng theo yêu cầu của người dùng.

  • Đối với kích thước trang lớn, hãy xem xét việc giữ hàng trong một "gần đây nhất được sử dụng" ứng dụng (bộ nhớ) bộ nhớ cache, do đó cơ sở dữ liệu không cần phải nhổ ra các khối khổng lồ cùng một dữ liệu hơn và hơn nữa.

  • Để sử dụng thường xuyên, cách tiếp cận tốt là giữ bảng bộ nhớ cache trong SQL chỉ với kết quả.

Và luôn luôn, luôn luôn lập chỉ mục cơ sở dữ liệu một cách thích hợp.


phản ứng khác:

phản ứng rất chủ quan của tôi là thế này: Người dùng (tôi) muốn sắp xếp từ một trang bất kỳ. Hãy để họ (tôi). Không có gì khó chịu hơn là nơi bạn muốn, và có một ứng dụng đưa bạn trở lại đầu danh sách.

Một xem xét khác là nhiều cấp độ phân loại: bạn có muốn triển khai sắp xếp theo số sê-ri, sau đó là tên người dùng không? Hãy xem xét những gì Microsoft Excel làm, hoặc bất kỳ ứng dụng nào khác mà người dùng của bạn quen thuộc. Người dùng của bạn có thể sẽ ổn với những gì họ đã quen - bao gồm cả bị ném trở lại trang 1.

+0

+1 để xem xét nhiều cấp độ sắp xếp :) – jrharshath

3

Cơ sở dữ liệu là những con thú thực sự khi sắp xếp và chọn dữ liệu. Vì vậy, đặt cược tốt nhất của bạn chắc chắn là có khách hàng nói với máy chủ, "Tôi muốn trang X với các hàng Y được sắp xếp theo Z." Sau đó, cơ sở dữ liệu làm điều của nó, và khách hàng cho thấy kết quả. Để cải thiện hiệu suất, bạn có thể tạo kết quả bộ nhớ cache của ứng dụng khách và hơn nữa bạn có thể yêu cầu mã của mình ở trang tiếp theo và trang trước sau khi trang hiện tại được tìm nạp để chúng có thể được hiển thị ngay lập tức theo yêu cầu.

0

Cách tiếp cận tốt nhất là làm phân loại và phân trang ở cấp cơ sở dữ liệu và chỉ trả lại một tập con của dữ liệu gốc sẽ chỉ được hiển thị trên màn hình. Không có javascript trong trường hợp này.

Nếu vì một số lý do bạn không thể sắp xếp và trang ở cấp cơ sở dữ liệu, thì bạn nên làm điều đó với tập lệnh phía máy chủ. Không có javascript trong trường hợp này.

Và cách tiếp cận tồi tệ nhất sẽ là phân loại và phân trang với javascript, tất nhiên là không được khuyến cáo vì lý do hiển nhiên.

0

Có phân loại db những gì được phân phối tới trang cụ thể trên màn hình. Nó sẽ hầu như luôn luôn nhanh hơn, được lưu trữ và dễ dàng tải như vậy trên trình duyệt.

Nếu bạn thích, hãy để phía máy khách cho phép phân loại thêm thông qua javascript, v.v ... nếu dữ liệu đủ chi tiết và có thể hưởng lợi từ nó. Bạn có thể muốn lưu trữ các tính năng phân loại phụ được chọn để chúng được ghi nhớ giữa các trang.

Các vấn đề liên quan