Mongodb – Building with Patterns: The Computed Pattern

Nội dung

Mẫu thiết kế tính toán trước (Computed Pattern)

Trong chuỗi bài viết “Xây dựng với Mẫu thiết kế”, chúng ta đã xem xét các cách lưu trữ dữ liệu một cách tối ưu. Tuy nhiên, chỉ lưu trữ và có sẵn dữ liệu thường không mang lại nhiều giá trị. Giá trị của dữ liệu trở nên rõ ràng hơn khi chúng ta có thể tính toán các giá trị từ nó. Ví dụ: Tổng doanh thu bán hàng của Amazon Alexa mới nhất là bao nhiêu? Bao nhiêu người xem đã xem bộ phim bom tấn mới nhất? Những câu hỏi như thế này có thể được trả lời từ dữ liệu được lưu trữ trong cơ sở dữ liệu, nhưng cần phải tính toán để đạt được kết quả.

Tuy nhiên, việc chạy các tính toán này mỗi khi được yêu cầu sẽ tốn rất nhiều tài nguyên, đặc biệt là trên các tập dữ liệu lớn. Việc sử dụng các chu kỳ CPU, truy cập đĩa, bộ nhớ có thể gây tốn nhiều tài nguyên.

Hãy tưởng tượng một ứng dụng web thông tin về phim. Mỗi khi chúng ta truy cập ứng dụng để tìm một bộ phim, trang web cung cấp thông tin về số lượng rạp chiếu phim, tổng số người xem bộ phim và doanh thu tổng cộng. Nếu ứng dụng phải tính toán những giá trị đó cho mỗi lượt truy cập trang, nó có thể sử dụng rất nhiều tài nguyên xử lý đối với các bộ phim phổ biến.

Tuy nhiên, phần lớn thời gian, chúng ta không cần biết các số liệu chính xác đó. Chúng ta có thể thực hiện tính toán ở nền và cập nhật tài liệu chính về thông tin phim định kỳ. Những tính toán này cho phép chúng ta hiển thị một biểu diễn hợp lệ của dữ liệu mà không cần phải đặt nhiều công sức vào CPU.

Mẫu thiết kế tính toán trước (Computed Pattern)

Mẫu thiết kế tính toán được sử dụng khi chúng ta cần tính toán dữ liệu một cách lặp lại trong ứng dụng của chúng ta. Mẫu thiết kế tính toán cũng được sử dụng khi mẫu truy cập dữ liệu là truy cập dữ liệu đọc nhiều; ví dụ: nếu bạn có 1.000.000 lượt đọc mỗi giờ nhưng chỉ có 1.000 lượt ghi mỗi giờ, việc tính toán tại thời điểm ghi sẽ giảm số lần tính toán xuống 1/1000.

Trong ví dụ cơ sở dữ liệu phim của chúng ta, chúng ta có thể thực hiện tính toán dựa trên tất cả thông tin chiếu phim của một bộ phim cụ thể, tính toán kết quả và lưu trữ kết quả đó cùng với thông tin về bộ phim. Trong môi trường ghi ít, việc tính toán có thể được thực hiện kết hợp với bất kỳ cập nhật nào của dữ liệu nguồn. Khi có các ghi chép thường xuyên hơn, các tính toán có thể được thực hiện ở các khoảng thời gian xác định – ví dụ: mỗi giờ. Vì chúng ta không can thiệp vào dữ liệu nguồn trong thông tin chiếu phim, chúng ta có thể tiếp tục chạy lại các tính toán hiện có hoặc chạy các tính toán mới tại bất kỳ điểm nào trong thời gian và biết rằng chúng ta sẽ nhận được kết quả chính xác.

Các chiến lược khác để thực hiện tính toán có thể bao gồm, ví dụ: thêm một dấu thời gian (timestamp) vào tài liệu để chỉ ra thời điểm cập nhật cuối cùng. Ứng dụng sau đó có thể xác định khi nào cần thực hiện tính toán. Một lựa chọn khác có thể là có một hàng đợi các tính toán cần được thực hiện. Việc chọn chiến lược cập nhật tốt nhất nên để lại cho nhà phát triển ứng dụng.

Ứng dụng mẫu (Sample Use Case)

Mẫu thiết kế tính toán có thể được sử dụng bất cứ nơi nào cần thực hiện tính toán trên dữ liệu. Dữ liệu cần tính tổng, chẳng hạn như doanh thu hoặc số lượt xem, là một ví dụ tốt, nhưng dữ liệu chuỗi thời gian, danh mục sản phẩm, ứng dụng xem đơn lẻ và nguồn sự kiện cũng là các ứng cử viên lý tưởng cho mẫu thiết kế này.

Đây là một mẫu mà nhiều khách hàng đã triển khai. Ví dụ, một khách hàng thực hiện các truy vấn tổng hợp hàng loạt trên dữ liệu xe và lưu kết quả để máy chủ hiển thị thông tin trong vài giờ tới.

Một công ty xuất bản tập hợp mọi loại dữ liệu để tạo ra các danh sách được sắp xếp như “100 Bộ phim hay nhất…”. Những danh sách đó chỉ cần được tạo lại định kỳ, trong khi dữ liệu cơ bản có thể được cập nhật vào thời điểm khác.

Kết luận

Mẫu thiết kế mạnh mẽ này cho phép giảm tải công việc CPU và tăng hiệu suất ứng dụng. Nó có thể được sử dụng để áp dụng tính toán hoặc thao tác trên dữ liệu trong một bộ sưu tập và lưu kết quả trong một tài liệu. Điều này cho phép tránh việc thực hiện cùng một tính toán một cách lặp đi lặp lại. Khi hệ thống của bạn thực hiện các tính toán giống nhau một cách lặp đi lặp lại và tỷ lệ đọc/ghi cao, hãy xem xét Mẫu thiết kế Tính toán.

Chúng ta đã qua một phần ba trong chuỗi “Xây dựng với Mẫu thiết kế”. Lần tới, chúng ta sẽ tìm hiểu về các tính năng và lợi ích của Mẫu con (Subset Pattern) và cách nó có thể giúp giải quyết vấn đề thiếu bộ nhớ.

Tóm tắt

Mô tả
Mẫu thiết kế tính toánThực hiện tính toán định kỳ trên dữ liệu và lưu kết quả vào một tài liệu
Ứng dụng mẫuÁp dụng cho các tính toán cần chạy trên dữ liệu
Kết luậnMẫu thiết kế giúp giảm tải công việc CPU và tăng hiệu suất ứng dụng
Anthony Nguyễn

Cây bút chính tại VietnamTutor

Bài viết cùng chuyên mục

Nâng Cấp Laravel 13: Checklist 10 Bước Không Thể Bỏ Qua 2026

Hướng dẫn nâng cấp Laravel 13 chi tiết với checklist 10 bước. Từ kiểm tra PHP 8.3, cập nhật dependencies, đến xử lý lỗi thường gặp

Hardening Laravel Production: Checklist Bảo Mật Toàn Diện 2026

Checklist hardening Laravel production toàn diện. Từ cấu hình server, database, SSL đến security headers, rate limiting và monitoring.

Authentication & Authorization Trong Laravel: Hướng Dẫn A-Z 2026

Hướng dẫn chi tiết cách xây dựng hệ thống Authentication (xác thực) và Authorization (phân quyền) trong Laravel với Breeze, Fortify, Sanctum, Policies và Gates.

Bảo Mật Laravel: 10 Lỗi Phổ Biến & Cách Phòng 2026

Hướng dẫn 10 lỗi bảo mật phổ biến nhất trong Laravel và cách phòng tránh hiệu quả. Từ XSS, SQL injection đến authentication vulnerabilities.

Migration PHP Attributes Laravel 13: Hướng Dẫn Chi Tiết

Cách chuyển đổi từ protected properties sang PHP Attributes trong Laravel 13 với hướng dẫn từng bước và code examples chi tiết.

Laravel 13 Có Gì Mới? Tổng Hợp Tính Năng Mới 2026

Laravel 13 ra mắt ngày 17/3/2026 với PHP 8.3, PHP Attributes, AI SDK và nhiều cải tiến. Khám phá chi tiết các tính năng mới của

Kubernetes for Beginners 2026: Hướng Dẫn Từ A-Z

Kubernetes (K8s) là nền tảng container orchestration phổ biến nhất hiện nay. Bài hướng dẫn này sẽ giúp bạn hiểu Kubernetes là gì, kiến trúc cơ

Docker Compose Best Practices 2026: 10 Tips Quan Trọng

Docker Compose giúp bạn quản lý multi-container applications dễ dàng hơn. Bài viết này tổng hợp 10 best practices quan trọng nhất để sử dụng Docker

Lỗ hổng RCE (CVE-2025-55182) trên React, Next.js?

Cảnh báo khẩn cấp: React2Shell (CVE-2025-55182) gây RCE nghiêm trọng cho React/Next.js. Nắm cơ chế, dấu hiệu & phòng thủ cấp bách để bảo vệ ứng

Dead-Letter Queue: Giải pháp cứu cánh cho tin nhắn lỗi hệ thống

DLQ là chìa khóa quản lý tin nhắn lỗi hiệu quả trong hệ thống phân tán. Đảm bảo tin nhắn không bị mất, tăng độ tin

Lập trình viên: Xây doanh nghiệp một người, kiếm 10.000 USD/tháng

Lập trình viên: Khám phá khung làm việc để xây dựng doanh nghiệp một người, kiếm 10.000 USD/tháng. Biến kỹ năng code thành cỗ máy tiền,