Có phân trang làm giảm tải máy chủ? (học thuyết)


11

Tôi đã tự hỏi lý do đằng sau phân trang là gì? Được sử dụng bởi vì nó giảm bớt gánh nặng cho các máy chủ vì về mặt kỹ thuật chúng tôi sẽ giới hạn số lượng hàng được trả lại trên mỗi trang?

Tôi muốn làm một cái gì đó mà không cần phân trang nhưng cho rằng tôi là người mới này (tôi là một người nghiệp dư) bắt đầu tự hỏi liệu nó có ổn về mặt kỹ thuật hay không.


Bạn có thực sự muốn đợi trình duyệt của mình tải xuống và hiển thị hàng ngàn câu hỏi mà bạn không quan tâm khi nhấp vào "Câu hỏi" trên trang web này không?
Jeremy

3
phân trang dành cho con người nhiều hơn DB.
Malfist

Câu trả lời:


10

Có một số lý do để có phân trang, giảm tải máy chủ chỉ là một. Tuy nhiên, Stephen Orr tăng điểm hợp lệ - trước tiên bạn vẫn cần tìm lượng dữ liệu. Bạn phải đảm bảo rằng truy vấn đó nhanh chóng và không tải quá mức máy chủ của bạn.

Các lý do khác bao gồm:

  • Giảm lượng dữ liệu trả về cho khách hàng trong một lần. Nếu bạn có nhiều dữ liệu, việc này có thể mất một lượng thời gian đáng kể và chiếm rất nhiều bộ nhớ.
  • Người dùng thường không quan tâm đến tất cả các dữ liệu, nhưng chỉ gần đây nhất (nói). Bằng cách chỉ trả lại một vài trang dữ liệu, bạn sẽ không nhận được dữ liệu mà người dùng sẽ không bao giờ nhìn thấy.

Trong cả hai trường hợp này, bạn không muốn làm cho người dùng chờ đợi - cho dữ liệu họ sẽ không xem hoặc cho tất cả dữ liệu khi họ có thể nhận được một dữ liệu xử lý một số dữ liệu.


2
+1 Tôi đã viết một cái gì đó tương tự, nhưng bạn quá nhanh. Hãy để tôi thêm rằng nội dung phân trang cũng được (ab) sử dụng như một cách để hiển thị thêm.
yannis

Bạn cũng có thể tạo các trang mà không cần phải tìm hiểu có bao nhiêu trang, biết rằng có nhiều dữ liệu hơn phù hợp với trang hiện tại là đủ tốt.
Carlo Kuip

3

Nó thay đổi tùy thuộc vào việc thực hiện.

Nó sẽ tăng tốc độ hiển thị của một trang, nhưng nó sẽ không nhất thiết phải giảm tải trên máy chủ. Hầu hết các thuật toán phân trang ngây thơ cần thực hiện một truy vấn trước để quyết định có bao nhiêu trang, sau đó truy vấn lại để có được tập kết quả "phân trang".


Hầu hết các thuật toán phân trang ngây thơ cần thực hiện một truy vấn trước tiên để quyết định có bao nhiêu trang : (với cơ sở dữ liệu quan hệ có cấu trúc độc đáo)
yannis

@YannisRizos, hoàn toàn. Tôi vừa nhìn thấy mặt tối của điều này, với một cơ sở dữ liệu quan hệ có cấu trúc cực kỳ tồi tệ (nhiều truy vấn của chúng tôi THAM GIA 7 hoặc 8 bảng khác nhau để có kết quả).
Steve Hill

@YannisRizos: định nghĩa "căng thẳng trên db". Bạn vẫn đang đẩy hai truy vấn trên dòng. Bạn đang phân trang trong truy vấn (siêu chọn hàng) hay kết quả bộ đệm trong lớp khác? Có quá nhiều biến để nói rằng có quá nhiều căng thẳng db. Tôi cho rằng việc thực hiện đúng theo nghĩa giao dịch (bạn có cho phép số lần đọc / số lượng không nhất quán trong các trang không?) Làm tăng db "căng thẳng" / tải nhưng đơn giản hóa việc lập trình.
Jé Queue

@Xepoch Tôi không nói quá nhiều căng thẳng, chỉ là bất kỳ số lượng nào cộng với một lựa chọn hạn chế <chọn đầy đủ. Và đó chỉ là cho các kịch bản phổ biến trên các dbs quan hệ có cấu trúc tốt.
yannis

1

Giá trị nhất bạn đạt được từ phân trang là tăng cường tốc độ cho ứng dụng của bạn bằng cách:

1 - Giới hạn dữ liệu được truyền giữa máy khách và máy chủ. Không có điểm nào để đọc 1000000 khách hàng nếu người dùng đang tìm kiếm 10 người trong số họ.

2- Tăng tốc đáng kể hiệu năng truy vấn bằng cách chỉ truy xuất các hàng có thể vừa với chế độ xem của người dùng. Không có điểm nào để đọc 1000000 khách hàng nếu người dùng sẽ nhìn vào 10 khách hàng đầu tiên.

3 - Phân trang giúp bằng cách cung cấp nhiều dữ liệu mới hơn. Nếu ứng dụng của bạn hiển thị nhiều hàng dữ liệu và miền ứng dụng của bạn yêu cầu nhiều cập nhật cho các hàng dữ liệu trong bảng được hiển thị, có thể đến lúc bạn đi đến trang 20 của danh sách các trang, dữ liệu trên một số hàng sẽ có đã thay đổi Hãy nghĩ về một ứng dụng đọc giá cổ phiếu hoặc phòng có sẵn trong một khách sạn. Lấy dữ liệu cũ và đặt nó trên máy khách là không có ích.

Phân trang là một chiến lược kết hợp với lọc và hiểu biết của bạn về cách người dùng cuối cần từ kịch bản cụ thể (dự kiến ​​sẽ dẫn đến một thiết kế tốt để phục vụ nhu cầu này) sẽ giúp tăng cường ứng dụng đặc biệt khi một số người dùng đang truy cập cơ sở dữ liệu kiêm nhiệm.

Phân trang không phải lúc nào cũng tầm thường để lập trình. Trong một số trường hợp, nó đơn giản nhưng đôi khi rất phức tạp để viết để truy vấn SQL thực thi mà không thực hiện quét toàn bộ bảng. Tất nhiên điều này phụ thuộc vào chỉ mục, điều kiện lọc và câu lệnh Where của bạn.


-4

Pagination, theo suy nghĩ của tôi, là mẹ của tất cả các tối ưu hóa sớm. Hoàn toàn ổn khi viết trang web của bạn mà không cần phân trang.

Nếu bạn thấy, sau khi phát hành, bạn đang tải quá nhiều dữ liệu trong một cuộc gọi hoặc người dùng của bạn phải chờ thông tin họ muốn vì bận tải dữ liệu họ không muốn, hãy tiếp tục và viết giải pháp Ajax chỉ tải trang khi mọi người cuộn xuống (xem: Twitter, Tumblr, tìm kiếm hình ảnh của Google).

Chỉnh sửa: Đoạn thứ hai ở trên được viết với giả định rằng một câu trả lời chung sẽ là "nhưng nếu bạn biết rằng bạn sẽ phân trang vào một lúc nào đó, bạn cũng có thể thực hiện sớm, thay vì lãng phí thời gian để phát triển thứ gì đó bạn sẽ ném xa."

Cũng là mẹ của tất cả các tối ưu hóa sớm, tôi nghĩ rằng phân trang là một cơn ác mộng UX và có những giải pháp tốt hơn sẽ không cần phát triển thêm trên đầu trang hoàn chỉnh.

Mặc dù số lượng downvote, tôi để câu trả lời này ở đây vì tôi đứng trước tình cảm, mặc dù nó có thể không phải là bài viết hay nhất của tôi.


5
Tôi hoàn toàn không đồng ý với tuyên bố này, phân trang không phải để tối ưu hóa DB, mà là về việc cung cấp dữ liệu trong các phần có thể quản lý được cho con người. Bạn có thể đọc Harry Potter nếu tất cả nằm trên một trang không? Bạn có thể nộp thuế nếu Mã số thuế nằm trên một trang không?
Malfist

@Malfist: Lý do duy nhất bạn không thể xử lý những thứ đó trên một trang là vì bản thân trang đó sẽ quá lớn. Đây không phải là một vấn đề trong các trang web. Do đó, các trang web tôi đã trích dẫn đã tìm thấy các giải pháp tốt hơn để phân trang, trong khi Lolcats hiện có gần 2000 trang không thể phân trang theo bất kỳ cách hợp lý nào. Nhưng, đó là downvote của bạn, sử dụng nó như bạn muốn.
pdr

1
@Malfist: Ngoài ra, chia mọi thứ thành các phần có thể quản lý là đủ công bằng nếu các phần đó không thay đổi. Nếu tôi đọc các trang 1-4 thì tôi muốn quay lại lần sau và đọc trang 5. Nhưng trong rất nhiều trường hợp, các trang web được phân trang là danh sách các mục, gần đây nhất là trước tiên. Vì vậy, khi tôi quay lại trang 5 sau đó, nó thực sự hiển thị một nửa trang 3 và một nửa trang 4 từ lần cuối tôi ở đó vì có 1,5 trang hoàn toàn mới trong danh sách.
pdr

2
-1 Vì tôi rất không đồng ý với điều này. Tôi thậm chí không chắc bắt đầu giải thích tại sao.
Craige

@Craige: Vâng, được rồi. Tôi chắc chắn không thể đưa ra nhiều tranh luận về điều đó.
pdr
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.