2009-09-07 30 views
7

Dữ liệu cache (A) hiệu quả hơn, hiệu quả hơn, nhanh hơn, an toàn hơn được sử dụng cho mỗi lần tải trang trong mảng $ _SESSION (nhưng vẫn truy vấn bảng cho cờ để tải lại dữ liệu mới), hoặc (B) để tải nó từ cơ sở dữ liệu mỗi lần?Dữ liệu bộ nhớ cache trong SESSION PHP hoặc truy vấn từ db mỗi lần?

Tôi đang sử dụng phương pháp bộ nhớ cache (A), nhưng tôi lo lắng rằng với hàng trăm người dùng, bộ nhớ có thể trở thành một vấn đề? Nó chỉ là dữ liệu đơn giản, như firstname, họ, sinh nhật, v.v.

Với một trong hai phương pháp, vẫn có một truy vấn đang chạy. Suy nghĩ?

+0

Hãy nhớ rằng $ _Session không có trong bộ nhớ. Nó trên đĩa theo mặc định. Tất nhiên, bạn thực sự có thể sử dụng bộ nhớ cơ sở dữ liệu được lưu trữ cho biến phiên của bạn. – ryeguy

+0

ah vâng!cảm ơn bạn rất nhiều vì lời nhắc nhở! – Andrew

Trả lời

6

Nếu dữ liệu của bạn được sử dụng trên mọi trang và giống nhau cho tất cả người dùng, tôi sẽ không lưu nó trong $ _SESSION (có nghĩa là có một bản sao khác của dữ liệu đó cho từng người dùng), nhưng với một chủ nghĩa mecanism khác, như:

  • tập tin
  • Trong bộ nhớ, với APC ví dụ (nếu chỉ có 1 máy chủ)
  • Trong bộ nhớ, với memcached, ví dụ (nếu bạn có nhiều máy chủ)
  • Nếu dữ liệu của bạn yêu cầu tính toán dài hoặc một số truy vấn DB để thu được, lưu vào bộ đệm trong cơ sở dữ liệu có thể là một khả năng khác (có nghĩa là chỉ có 1 truy vấn để lấy lại, và tính toán ít)


Nếu dữ liệu của bạn là không giống nhau cho mỗi người dùng (mà có vẻ là trường hợp trong tình huống của bạn, như bạn có bộ nhớ đệm tên, ngày sinh, ...):

  • tôi sẽ chắc chắn rằng tôi chỉ nhớ cache những gì là cần thiết
  • Khi bạn chỉ có một vài dữ liệu để bộ nhớ cache, đặt nó trong phiên nên được khá OK
  • Nếu yo u thực sự có nhiều người dùng, có thể bạn sẽ gặp phải một số vấn đề về khả năng mở rộng khác, và rất có thể sẽ sử dụng một số thứ như memcached; có nghĩa là bạn sẽ có một số cách khác để lưu vào bộ nhớ đệm ;-)

Là một sidenote: nếu bạn đang thực hiện truy vấn này lặp đi lặp lại, máy chủ DB của bạn nên tự lưu lại (cho MySQL, nó sẽ đi vào "query cache"); vì vậy, nó sẽ không tồi tệ như bạn nghĩ, tôi cho rằng - ngay cả khi không được tối ưu hóa nhiều lắm ^^

1

Nó phụ thuộc vào những gì bạn đang xử lý phiên. Trình xử lý phiên của bạn có thể là MySQL và do đó câu hỏi sẽ không tốt hơn, nhưng cách tối ưu hóa việc xử lý phiên của bạn.

Trình xử lý phiên PHP mặc định là các tệp nhưng có thể thay đổi thành mysql khá dễ dàng.

Nếu bạn đang nói về dữ liệu không phải người dùng cụ thể, thì chỉ cần lưu dữ liệu đó vào DB. Lo lắng về việc tối ưu hóa nếu bạn gặp phải vấn đề sau này. Nó thường có lợi hơn nhiều để sử dụng một mẫu thiết kế tốt hơn sau đó suy nghĩ về tối ưu hóa trước khi tay. Thiết kế mã của bạn để bạn có thể dễ dàng sử dụng trình xử lý khác để lưu trữ và sau đó bạn sẽ không gặp phải vấn đề về tối ưu hóa.

Nếu đó là người dùng cụ thể, hãy sử dụng phiên, nhưng sử dụng trình xử lý phiên thích hợp nếu cần.

Các vấn đề liên quan