Bộ nhớ đệm ở lớp nghiệp vụ so với bộ đệm ở lớp dữ liệu


36

Tôi đã luôn làm việc với các dự án trong đó bộ nhớ đệm được thực hiện trên DAL, về cơ bản chỉ khi bạn chuẩn bị thực hiện cuộc gọi đến cơ sở dữ liệu, nó sẽ kiểm tra xem dữ liệu đã có trong bộ đệm chưa và nếu có, nó sẽ không thực hiện cuộc gọi và thay vào đó trả về dữ liệu đó.

Gần đây tôi mới đọc về bộ nhớ đệm ở lớp nghiệp vụ, vì vậy về cơ bản lưu trữ toàn bộ các đối tượng kinh doanh. Một lợi thế tôi có thể thấy ngay là thời gian đáp ứng tốt hơn nhiều.

Khi nào bạn thích cái này hơn cái kia? và bộ nhớ đệm ở lớp nghiệp vụ có phải là một thông lệ không?


Hiệu năng của các ứng dụng của bạn có quan trọng đến mức bộ nhớ đệm trong lớp nghiệp vụ tốt hơn là tránh sự rõ ràng của một cuộc gọi bổ sung đến kho lưu trữ hoặc lớp DAL không?
JDT

1
Không, không phải và sau khi đọc các câu trả lời, tôi nghĩ rằng tôi sẽ chỉ sử dụng bộ nhớ đệm trong DAL. Chúc mừng.
Emma

Bạn nên xem xét bộ nhớ đệm trên Lớp doanh nghiệp của bạn và cũng suy nghĩ về việc nhân rộng.
AK_ 6/2/2015

Câu trả lời:


30

Điều này có lẽ là quá rộng cho một câu trả lời dứt khoát. Cá nhân, tôi cảm thấy rằng một lớp truy cập dữ liệu là nơi tốt hơn để lưu vào bộ đệm, đơn giản vì nó được cho là rất đơn giản - các bản ghi đi vào và ra và đó là nó.

Một lớp kinh doanh dụng cụ nhiều quy tắc thêm độ phức tạp cao hơn, vì vậy nó tốt hơn nếu nó không còn phải quản lý cho mỗi đối tượng quan ngại sẵn có, thêm vào nhiều đối tượng quan tâm nhất quán trong cùng một lớp (hoặc thậm chí cùng một phương pháp) - mà có thể là một sự vi phạm trắng trợn của SRP.

(Tất nhiên, tôi chỉ đạt được cái nhìn sâu sắc đó sau khi các lớp dịch vụ của tôi đã phát triển đến mức phức tạp không thể kiểm soát được khi họ cố gắng thực hiện đồng thời cả bộ nhớ đệm và cấu hình.


Tại sao bộ nhớ đệm cần phải phức tạp? nó có thể được thực hiện với AOP và một vài chú thích. Nó vẫn là vi phạm SRP? Tại sao không phải khi được thực hiện trong DAL? Ngoài ra, tôi chưa bao giờ thấy các lớp dịch vụ "quá phức tạp" được lưu trữ; độc lập với sự phức tạp của nó, một dịch vụ có thể được xem như một hộp đen và kết quả của nó có thể được lưu trong bộ nhớ cache
user1075613

25

Truy cập dữ liệu và các lớp lưu trữ / lưu trữ là những nơi tự nhiên không thể cưỡng lại để lưu vào bộ đệm. Họ đang thực hiện I / O, khiến chúng trở nên tiện dụng, dễ dàng để chèn bộ nhớ đệm. Tôi dám khẳng định rằng hầu hết mọi lớp DAL hoặc kiên trì sẽ, khi nó đáo hạn, sẽ được cung cấp một chức năng lưu trữ - nếu nó không được thiết kế theo cách đó ngay từ đầu.

Vấn đề là ý định . Các lớp DAL và kiên trì xử lý các cấu trúc mức tương đối thấp - ví dụ: các bản ghi, bảng, hàng và khối. Họ không nhìn thấy các đối tượng "doanh nghiệp" hoặc lớp ứng dụng hoặc có nhiều cái nhìn sâu sắc về cách chúng được sử dụng ở các cấp cao hơn. Khi họ thấy một số hàng hoặc hàng tá khối được đọc hoặc viết, không rõ ràng họ đại diện. "Tài khoản Jones chúng tôi hiện đang phân tích" trông không khác nhiều so với "một số dữ liệu tham chiếu thuế suất cơ bản mà ứng dụng cần chỉ một lần và nó sẽ không được nhắc lại nữa." Ở lớp này, dữ liệu là dữ liệu.

Bộ nhớ đệm có nguy cơ lớp DAL / tồn tại có dữ liệu tham chiếu thuế "lạnh" ở đó, chiếm 12,2 MB bộ nhớ cache và thay thế một số thông tin tài khoản, trên thực tế, sẽ được sử dụng mạnh mẽ chỉ trong một phút. Ngay cả những người quản lý bộ đệm tốt nhất cũng đang xử lý kiến ​​thức ít ỏi về các cấu trúc và kết nối dữ liệu cấp cao hơn và ít hiểu biết về những hoạt động sắp ra mắt, vì vậy họ quay trở lại với các thuật toán dự đoán .

Ngược lại, bộ nhớ đệm lớp ứng dụng hoặc lớp doanh nghiệp gần như không gọn gàng. Nó yêu cầu chèn các hoạt động quản lý bộ đệm hoặc gợi ý ở giữa logic nghiệp vụ khác, điều này làm cho mã doanh nghiệp phức tạp hơn. Nhưng sự đánh đổi là: Có thêm kiến ​​thức về cách cấu trúc dữ liệu cấp vĩ mô và những hoạt động nào sắp diễn ra, nó có cơ hội tốt hơn nhiều để ước tính hiệu quả bộ nhớ đệm tối ưu ("thấu thị" hoặc "Bélády Min").

Việc chèn trách nhiệm quản lý bộ đệm vào mã doanh nghiệp / ứng dụng có hợp lý hay không là một cuộc gọi phán xét và sẽ thay đổi tùy theo ứng dụng. Trong nhiều trường hợp, trong khi người ta biết rằng các lớp DAL / kiên trì sẽ không làm cho nó "hoàn toàn đúng", sự đánh đổi là họ có thể làm một công việc khá tốt, rằng họ làm như vậy theo cách kiến ​​trúc "sạch sẽ" và có thể kiểm chứng chặt chẽ hơn nhiều và việc bắt mức độ thấp đó tránh làm tăng sự phức tạp của mã doanh nghiệp / ứng dụng.

Độ phức tạp thấp hơn khuyến khích tính chính xác và độ tin cậy cao hơn và thời gian tiếp thị nhanh hơn. Điều đó thường được coi là một sự đánh đổi lớn - bộ nhớ đệm kém hoàn hảo, nhưng chất lượng tốt hơn, mã doanh nghiệp kịp thời hơn.


Cảm ơn vi đa trả lơi. Sau khi đọc câu trả lời của bạn và của người khác, tôi nghĩ rằng tôi chắc chắn không cần phải lưu vào bộ đệm trong lớp nghiệp vụ. Nó sẽ chỉ thêm vào sự phức tạp tổng thể của sản phẩm.
Emma

1
Một vấn đề với mô hình "lớp" là các cơ chế bộ đệm hiệu quả thường cần sử dụng thông tin không có sẵn trên một lớp. Tuy nhiên, bạn sẽ nghĩ gì về việc có một lớp nghiệp vụ vượt qua "gợi ý" cho lớp dữ liệu về "kế hoạch" tổng thể của nó? Lớp dữ liệu ban đầu có thể bỏ qua hầu hết các gợi ý như vậy, nhưng nếu tìm thấy nút cổ chai, một số logic có thể được thêm vào, khi được đưa ra một số gợi ý nhất định, sẽ thay đổi các chiến lược lưu trữ theo cách cụ thể cho doanh nghiệp.
supercat

1
Điểm tuyệt vời, @supercat. Tôi sẽ đề cập đến một chiến lược gợi ý / pragma, nhưng câu trả lời đã có từ lâu. Nhưng bạn hoàn toàn chính xác. Gợi ý lớp doanh nghiệp để hạ thấp các lớp về cách ưu tiên bộ nhớ cache hoặc "ghim cái gì", là một cách khá phổ biến / hữu ích để có bộ nhớ đệm cấp cao hơn mà không làm cho mã doanh nghiệp làm tất cả hoặc bị cuốn vào việc quản lý bộ nhớ của riêng mình hệ thống cấp bậc.
Jonathan Eunice

@JonathanEunice: Một điều thú vị về gợi ý là mã không cần phải làm gì nhiều với chúng ban đầu. Rất nhiều hệ thống có một vài điểm nghẽn rõ ràng chi phối hiệu năng của chúng, nhưng có thể khó dự đoán liệu cái nào sẽ đủ tệ để quan trọng. Thêm một lượng nhỏ logic bộ nhớ đệm xấu xí vào một vài điểm quan trọng có thể tốt hơn so với việc ném rất nhiều logic bộ nhớ đệm vào những nơi thực sự không quan trọng.
supercat

1
Chính xác. Đặc biệt là nếu bạn có bộ nhớ đệm cấp thấp "khá tốt" đã ở lớp lưu trữ / truy cập. Bạn có thể chỉ cần thêm một chút thông tin ưu tiên để chuyển từ "khá tốt" sang "thực sự tốt".
Jonathan Eunice

16

Bộ nhớ đệm trên DAL rất đơn giản và đơn giản

DAL của bạn là lớp truy cập dữ liệu trung tâm, có nghĩa là mọi quyền truy cập dữ liệu đều có thể được kiểm soát thông qua các lớp ở đó. Vì cả việc đọc và lưu trữ đều xảy ra trên các lớp đó, việc xóa hoặc cập nhật các mục trong bộ đệm cũng dễ dàng như nhau.

Bộ nhớ đệm trong kinh doanh là linh hoạt

Bộ nhớ đệm cho doanh nghiệp cung cấp cho các nhà phát triển tính linh hoạt để xác định xem việc sử dụng cụ thể của một đối tượng sẽ được hưởng lợi từ bộ đệm. Tùy thuộc vào cấu trúc của các dịch vụ back-end ứng dụng hoặc các quy trình tự động có thể thay đổi dữ liệu được lưu trữ trong các phần khác. Với bộ nhớ đệm trong doanh nghiệp, nhà phát triển có thể xác định liệu một đối tượng kinh doanh nhất định có thể có dữ liệu cũ và đạt được hiệu suất hay không, hoặc có trạng thái cập nhật nhất của đối tượng kinh doanh với chi phí hiệu suất.

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.