Cách tiếp cận này là khá nhiều cách được chấp nhận để làm bất cứ điều gì trong công ty của chúng tôi. Một ví dụ đơn giản: khi một phần dữ liệu cho khách hàng được yêu cầu từ một dịch vụ, chúng tôi sẽ tìm nạp tất cả dữ liệu cho khách hàng đó (phần có liên quan đến dịch vụ) và lưu nó vào một từ điển trong bộ nhớ sau đó phục vụ nó từ đó theo các yêu cầu sau (chúng tôi điều hành các dịch vụ đơn lẻ). Mọi cập nhật sẽ đến DB, sau đó cập nhật từ điển trong bộ nhớ. Có vẻ như tất cả đều đơn giản và vô hại nhưng khi chúng tôi thực hiện các quy tắc kinh doanh phức tạp hơn, bộ đệm sẽ không đồng bộ và chúng tôi phải đối phó với các lỗi khó tìm. Đôi khi chúng tôi trì hoãn việc ghi vào cơ sở dữ liệu, giữ dữ liệu mới trong bộ nhớ cache cho đến lúc đó. Có những trường hợp khi chúng ta lưu trữ hàng triệu hàng trong bộ nhớ vì bảng có nhiều quan hệ với các bảng khác và chúng ta cần hiển thị dữ liệu tổng hợp một cách nhanh chóng.
Tất cả việc xử lý bộ đệm này là một phần lớn của cơ sở mã của chúng tôi và tôi cảm thấy đây không phải là cách đúng đắn để làm điều đó. Tất cả sự tung hứng này làm tăng quá nhiều tiếng ồn cho mã và nó làm cho khó hiểu logic kinh doanh thực tế. Tuy nhiên tôi không nghĩ rằng chúng tôi có thể phục vụ dữ liệu trong một khoảng thời gian hợp lý nếu chúng tôi phải truy cập cơ sở dữ liệu mỗi lần.
Tôi không hài lòng về tình hình hiện tại nhưng tôi không có cách nào khác tốt hơn. Giải pháp duy nhất của tôi là sử dụng bộ đệm cấp 2 NHibernate nhưng tôi gần như không có kinh nghiệm với nó. Tôi biết nhiều doanh nghiệp sử dụng Redis hoặc MemCached rất nhiều để đạt được hiệu suất nhưng tôi không biết làm thế nào tôi có thể tích hợp chúng vào hệ thống của chúng tôi. Tôi cũng không biết liệu chúng có thể thực hiện tốt hơn các truy vấn và cấu trúc dữ liệu trong bộ nhớ hay không.
Có cách tiếp cận nào khác mà tôi nên xem xét không?