Mongodb – Building with Patterns: The Computed Pattern

Content Protection by DMCA.com

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
Content Protection by DMCA.com