Chia sẻ bộ đệm - Thực hành tốt nhất không hợp lệ


14

Tôi muốn biết điều gì sẽ là một cách tiếp cận tốt hơn để vô hiệu hóa / cập nhật các đối tượng bộ đệm.

Điều kiện tiên quyết

  • Có máy chủ memcached từ xa (phục vụ như bộ đệm cho nhiều ứng dụng)
  • Tất cả các máy chủ được lưu trữ bởi azure (vùng ái lực, cùng trung tâm dữ liệu)
  • Kích thước đối tượng bộ nhớ cache dao động từ 200 byte đến 50 kilobyte


Cách tiếp cận 1 (lưu trữ trong bộ đệm càng sớm càng tốt)

  1. Đối tượng A được tạo -> lưu trữ trong cơ sở dữ liệu và lưu trữ trong bộ đệm
  2. Đối tượng A được khách hàng yêu cầu -> kiểm tra sự tồn tại của bộ đệm, nếu không thì tìm nạp từ cơ sở dữ liệu và lưu trữ trong bộ đệm
  3. Đối tượng A được cập nhật -> lưu trữ trong cơ sở dữ liệu, lưu trữ trong bộ đệm

Cách tiếp cận 1 dường như đơn giản hơn. Nếu một cái gì đó được tạo ra, đặt trong bộ đệm càng sớm càng tốt. Bất kể ai đó sẽ cần nó.


Cách tiếp cận 2 (lưu trữ bộ nhớ cache lười biếng)

  1. Đối tượng A được tạo -> lưu trữ trong cơ sở dữ liệu
  2. Đối tượng A được khách hàng yêu cầu -> kiểm tra sự tồn tại của bộ đệm, nếu không thì tìm nạp từ cơ sở dữ liệu và lưu trữ trong bộ đệm
  3. Đối tượng A được cập nhật -> lưu trữ trong cơ sở dữ liệu, xóa khóa trong bộ đệm

Cách tiếp cận 2 dường như được nhận biết nhiều hơn về bộ nhớ. Trong phương pháp này chỉ có các mục được yêu cầu vào bộ đệm.


Câu hỏi 1: Trong suy nghĩ về hiệu suất, điều gì sẽ là một cách tiếp cận tốt hơn? Bộ nhớ cũng như CPU ​​chưa được tính.

Câu hỏi 2: Suy nghĩ của tôi có phải là một loại tối ưu hóa sớm?

Câu 3: Có suy nghĩ nào khác không? Cách tiếp cận khác?

Câu trả lời:


12
  1. Là không thể trả lời, ngoại trừ để nói nó phụ thuộc. Có rất nhiều yếu tố sẽ xác định cách tiếp cận nào sẽ là tốt nhất trong trường hợp của bạn, ví dụ: Có phải bình thường các đối tượng được tạo sẽ được truy xuất ngay sau khi chúng được tạo không? Tỷ lệ cập nhật cho truy cập là gì?
  2. Re. quyết định bạn cần một bộ đệm: Nếu bạn đang tối ưu hóa mà không có dữ liệu thì có, đó là tối ưu hóa kỹ thuật sớm. Tôi nói về mặt kỹ thuật vì kinh nghiệm / sự khôn ngoan thông thường có thể cho bạn biết bạn sẽ cần một bộ đệm nào đó. Re. quyết định cách bộ đệm sẽ hoạt động tốt nhất: có, đó chắc chắn là tối ưu hóa sớm.
    • Tối ưu hóa thường không phải là tìm kiếm giải pháp tốt nhất / tối ưu nhất. Nó sẽ đi như sau:
      1. Tìm các nút thắt trong hệ thống.
      2. Tìm nơi bạn có thể tạo ra sự khác biệt lớn nhất với số lượng công việc ít nhất.
      3. Làm ít nhất công việc!
      4. Nó đã đủ nhanh chưa? Nếu không, hãy đến # 1.
      5. Làm xong!
    • Thành thật mà nói, không có cách tiếp cận nào bạn mô tả âm thanh phức tạp. Tại sao không thực hiện cả hai và xem cái nào hoạt động tốt nhất?
    • Bước 3 trong cách tiếp cận # 2 có thể được thay đổi thành "Đối tượng A được cập nhật -> lưu trữ trong cơ sở dữ liệu, cập nhật mục trong bộ đệm".

Baqueta, cảm ơn câu trả lời của bạn. Tôi đánh giá cao nó.
lurker tin

@lurkerbelow Vui mừng khi được giúp đỡ.
vaughandroid

2

memcached quản lý các đối tượng bằng chính sách riêng của mình, đối tượng được lưu trong bộ nhớ cache sẽ hết hạn nếu không ai truy cập hoặc memcached hết bộ nhớ. Do đó, cách tiếp cận đầu tiên của bạn không phải là một ý tưởng hay vì đối tượng của bạn trong memcached sẽ tiếp tục bị vô hiệu do hết bộ nhớ khi bạn đang tạo đối tượng.

Q1. Cách tiếp cận 2 sẽ tốt hơn về mặt hiệu suất vì nó không gửi đối tượng đến memcached, mặc dù sự cải thiện hiệu suất là rất ít.

Quý 2 Thật khó để nói. Giả sử bạn biết nút cổ chai và phác thảo các cách tiếp cận, nó sẽ không còn sớm.

H3 Có một cách tiếp cận khác như bộ nhớ cache chỉ trong memcached.

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.