Sử dụng bộ đệm truy vấn tích hợp sẵn của MySQL thay vì cố gắng tự bảo trì. Nó sẽ tự động xóa các truy vấn được lưu trong bộ nhớ cache vào các bảng khi chúng được ghi vào. Thêm vào đó, nó hoạt động trong bộ nhớ nên rất hiệu quả ...
Ngoài ra, không chỉ truy vấn bộ nhớ cache. Cố gắng lưu vào bộ nhớ cache toàn bộ các phân đoạn của ứng dụng ở các giai đoạn khác nhau trong chu kỳ kết xuất. Vì vậy, bạn có thể để MySQL lưu vào bộ nhớ cache các truy vấn, sau đó bạn lưu vào bộ nhớ cache của từng chế độ xem riêng lẻ (được kết xuất), từng khối riêng lẻ và từng trang. Sau đó, bạn có thể chọn có kéo từ bộ nhớ cache hay không dựa trên yêu cầu.
Ví dụ:người dùng chưa đăng nhập có thể lấy toàn bộ trang trực tiếp từ bộ nhớ cache. Nhưng người dùng đã đăng nhập có thể không thực hiện được (do tên người dùng, v.v.). Vì vậy, đối với anh ta, bạn có thể hiển thị 1/2 lượt xem của mình trên trang từ bộ nhớ cache (vì chúng không phụ thuộc vào đối tượng người dùng). Bạn vẫn nhận được lợi ích của bộ nhớ đệm, nhưng nó sẽ được phân cấp tùy theo nhu cầu.
Nếu bạn thực sự mong đợi nhiều lưu lượng truy cập, bạn chắc chắn nên xem xét Memcached
. Hãy để MySQL lưu trữ các truy vấn của bạn cho bạn, sau đó lưu trữ tất cả các mục bộ nhớ cache của người dùng trên đất liền trong memcache ...
Chỉnh sửa: Để trả lời chỉnh sửa của bạn:
Hệ thống tập tin có thể trở nên chậm nếu một thư mục phát triển lớn. Miễn là bạn đang "định vị trí tên" theo thư mục (vì vậy mỗi thư mục chỉ có một phần nhỏ các tệp bộ nhớ cache), bạn sẽ ổn từ quan điểm đó. Đối với ngưỡng chính xác, nó thực sự sẽ phụ thuộc vào phần cứng và hệ thống tệp của bạn hơn bất kỳ thứ gì khác. Tôi biết EXT3 sẽ khá chậm nếu có tải các tệp trong một thư mục (Tôi có các thư mục với hàng trăm nghìn tệp theo đúng nghĩa đen và có thể mất đến nửa giây để chỉ cần stat()
một trong các tệp, hãy để một mình thực hiện bất kỳ loại danh sách thư mục nào) ...
Nhưng nhận ra rằng nếu bạn thêm một máy chủ khác, bạn sẽ bị trùng lặp bộ nhớ cache (đó không phải là điều tốt) hoặc sẽ phải viết lại toàn bộ lớp bộ nhớ cache của bạn. Có lý do gì để không sử dụng Memcached
ngay từ đầu?
Chỉnh sửa 2: Để trả lời bản chỉnh sửa mới nhất của bạn:
Vẫn còn quá khó để gọi. Tôi có một ứng dụng có cơ sở dữ liệu với khoảng 1,5 tỷ hàng (tăng khoảng 500 nghìn mỗi ngày). Chúng tôi hoàn toàn không sử dụng bất kỳ bộ nhớ đệm nào trên đó vì chúng tôi không gặp vấn đề về đồng thời. Và ngay cả khi chúng ta đã làm vậy, chúng ta nên ném nhiều máy chủ MySQL vào nó hơn là thêm bộ nhớ đệm vì bất kỳ dạng bộ nhớ đệm nào cũng sẽ có tỷ lệ truy cập thấp đến mức sẽ không đáng để dành thời gian phát triển để thêm nó.
Và đó là lý do tôi rất kiên quyết về việc không lưu vào bộ nhớ đệm để tăng tốc độ. Sẽ luôn có một đối tượng không có trong bộ nhớ cache. Vì vậy, nếu bạn nhấn một trang với một trong những đối tượng đó, nó vẫn cần phải nhanh. Theo nguyên tắc chung, tôi cố gắng lưu vào bộ nhớ cache bất kỳ thứ gì sẽ được truy cập lại trong vài phút tới (dù sao thì tôi cũng giữ khoảng thời gian tồn tại khoảng 5 phút trong phiên bản sản xuất trên các ứng dụng khác). Vì vậy, nếu các mục không nhận được nhiều hơn một vài lần truy cập trong khoảng thời gian đó hoặc tỷ lệ truy cập rất thấp (dưới 90%), tôi không bận tâm vào bộ nhớ đệm của mục đó ....