Thứ Năm, 18 tháng 9, 2025

Những cách phân trang API

Nguồn

 API Pagination: Making Billions of Products Scrolling Possible

Phân trang là gì?

Khi xây dựng API trả về tập dữ liệu lớn, ta cần một cách để chia dữ liệu đó thành các phần nhỏ để dễ dàng theo dõi. Đó chính là Phân trang - Pagination. Đây là cách chúng ta chia kết quả thành các phần và cho phép client request chúng một cách tuần tự thay vì gửi hàng ngàn record cùng một lúc. Ta gửi chúng theo từng batch, có thể là 10 hoặc 100. Việc này giúp quản lý tải server, giảm lưu lượng mạng và giúp ứng dụng của chúng ta phản hồi nhanh hơn.

Có hai phương pháp chính để xử lý phân trang: dựa trên offset (Offset-based) và dựa trên cursor (Cursor-based).

Phân trang dựa trên offset

Với phân trang dựa trên offset, chúng ta có hai dạng.

Đầu tiên là phân trang dựa trên trang (Page-based). Ở đây, chúng ta chỉ cần biết trang hiện tại và số lượng item trên mỗi trang.

Thứ hai là phân trang dựa trên offset (Offset-based). Ở đây, chúng ta chỉ cần biết offset và limit. Offset là vị trí bắt đầu của dữ liệu, còn limit là số lượng dữ liệu cần lấy. Trong SQL, một truy vấn offset sẽ trông như thế này: SELECT * FROM table OFFSET 20 LIMIT 10;.

Phân trang dựa trên offset dễ xây dựng nhưng có vấn đề với các tập dữ liệu lớn. Khi offset lớn, truy vấn sẽ chậm hơn vì cần xử lý mọi dòng trước offset trước khi trả kết quả. Vấn đề lớn hơn xảy ra khi tập dữ liệu thay đổi nhanh. Offset-based có thể bỏ sót hoặc hiển thị dữ liệu hai lần nếu có dữ liệu mới được thêm vào. Điều này có nghĩa là kết quả có thể không nhất quán giữa các request.

Phân trang dựa trên cursor

Phân trang dựa trên cursor giải quyết các vấn đề của offset-based. Chúng ta chọn một cột index như ID làm cursor, sau đó hash giá trị của cursor để bảo mật.

Client gửi giá trị cursor cuối cùng mà nó có. Chúng ta sử dụng cursor này để lọc và lấy batch tiếp theo. Sau đó, chúng ta trả kết quả cùng với cursor mới cho item cuối cùng.

Client sử dụng cursor mới này cho request tiếp theo.

Phân trang dựa trên cursor hoạt động rất tốt với các tập dữ liệu lớn và thay đổi nhanh. Nó giữ nguyên tính nhất quán ngay cả khi có dữ liệu được thêm hoặc xóa giữa các request. Điều này giúp nó trở nên rất thích hợp cho feeds thời gian thực hoặc bất kỳ dữ liệu nào thay đổi thường xuyên.

Một số cách cài đặt phân trang dựa trên cursor bao gồm phân trang dựa trên keyset (Keyset-based) và phân trang dựa trên thời gian (Time-based).

Phân trang dựa trên key set sử dụng key index như primary key để lấy kết quả tiếp theo một cách hiệu quả bằng cách truy cập trực tiếp vào các row mà không cần quét qua tất cả các row trước đó.

Phân trang dựa trên thời gian sử dụng cursor là các timestamp để phân đoạn và lấy các bản ghi trong khoảng thời gian cụ thể. Phương pháp này rất hữu ích cho các ứng dụng xử lý dữ liệu chuỗi thời gian.

Kết luận

Dùng phân trang cursor-based cho các tập dữ liệu lớn và thay đổi nhanh. Chúng giữ nguyên tính nhất quán và hoạt động tốt hơn so với offset-based. Mặc dù cài đặt phức tạp hơn, nhưng đáng với công sức bỏ ra.

=============================
Website không chứa bất kỳ quảng cáo nào, mọi đóng góp để duy trì phát triển cho website (donation) xin vui lòng gửi về STK 90.2142.8888 - Ngân hàng Vietcombank Thăng Long - TRAN VAN BINH
=============================
Nếu bạn không muốn bị AI thay thế và tiết kiệm 3-5 NĂM trên con đường trở thành DBA chuyên nghiệp hay làm chủ Database thì hãy đăng ký ngay KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE, được Coaching trực tiếp từ tôi với toàn bộ bí kíp thực chiến, thủ tục, quy trình của gần 20 năm kinh nghiệm (mà bạn sẽ KHÔNG THỂ tìm kiếm trên Internet/Google) từ đó giúp bạn dễ dàng quản trị mọi hệ thống Core tại Việt Nam và trên thế giới, đỗ OCP.
- CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
- Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
2 khóa học online qua video giúp bạn nhanh chóng có những kiến thức nền tảng về Linux, Oracle, học mọi nơi, chỉ cần có Internet/4G:
- Oracle cơ bản: https://bit.ly/admin_1200
- Linux: https://bit.ly/linux_1200
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
cơ sở dữ liệu, cơ sở dữ liệu quốc gia, database, AI, trí tuệ nhân tạo, artificial intelligence, machine learning, deep learning, LLM, ChatGPT, DeepSeek, Grok, oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c/21c/23c/23ai, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, docker, k8s, micro service, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master