2011-11-17 46 views
5

Có ai có thể giải thích bất lợi về việc lưu trữ lượng lớn dữ liệu trong phiên hoặc chỉ cho tôi một số đọc không?Phiên: giới hạn kích thước phiên

Tôi cũng sẽ quan tâm nếu có bất kỳ sự khác biệt nào giữa lưu trữ dữ liệu trong một phiên và đọc dữ liệu từ các tệp dữ liệu?

+0

Xem http://stackoverflow.com/questions/4649907/maximum-size-of-a-php-session http://stackoverflow.com/questions/217420/ideal-php-session-size – Mob

+0

Bạn đã đã ở đây. Vui lòng ngừng ký bài đăng của bạn (Và tiêu đề của bạn nên _đặt câu hỏi_, không liệt kê các công nghệ và chủ đề) –

Trả lời

4

Nếu bạn lưu trữ một lượng lớn dữ liệu trong một phiên, bạn sẽ có hiệu suất đầu vào/đầu ra giảm vì sẽ có rất nhiều đọc/ghi.

Phiên trong PHP, theo mặc định, được lưu trữ trong thư mục/tmp trong một tệp phẳng. Do đó, dữ liệu phiên của bạn được viết trong một tệp dữ liệu của một số loại.

PHP cho phép bạn ghi đè trình xử lý phiên mặc định của mình theo hàm session_set_save_handler() nơi bạn có thể xác định lại cách phiên được đọc/ghi/duy trì.

Bạn cũng có thể ghi đè điều này thông qua tệp php.ini nơi bạn chỉ định thông qua chỉ thị session.save_handler.

Bây giờ, ngụ ý có một số lượng lớn phiên lưu trữ dữ liệu lớn là rất nhiều tệp sẽ được tạo và sẽ mất một chút thời gian để tìm chúng do cách hoạt động của ổ đĩa cứng. là những cái phổ biến vẫn còn). Bạn càng có nhiều thời gian để tìm nó. Họ càng lớn thì càng mất nhiều thời gian để đọc nó. Nếu bạn có nhiều người trong số họ và họ lớn - gấp đôi rắc rối, cần có sự thay đổi trong cách tiếp cận.

Vậy giải pháp là gì?

Thông thường, khi gặp hiệu suất giảm - mọi người tải cân bằng trang web của họ. Điều đó không làm việc với các phiên không may vì cân bằng tải đang chọn máy tính để sử dụng sẽ phục vụ yêu cầu hiện tại. Điều đó có nghĩa là các máy tính khác nhau sẽ phục vụ các trang bạn duyệt ở một số trang web. Có nghĩa là, nếu các máy tính đó sử dụng cơ chế mặc định của bộ nhớ phiên (/ tmp directory), các phiên sẽ không được bảo toàn trên các máy chủ vì chúng không thể truy cập thư mục/tmp của nhau. Bạn có thể giải quyết điều này bằng cách gắn một NAS và làm cho nó hiển thị trên toàn cầu cho tất cả các máy tính trong cụm, nhưng đó là cả tốn kém và khó duy trì.

Tùy chọn khác là lưu trữ các phiên trong cơ sở dữ liệu. Một cơ sở dữ liệu có thể truy cập từ bất kỳ máy tính nào trong cụm hư cấu của chúng tôi. Thông thường, có các cơ sở dữ liệu chuyên dụng được sử dụng để xử lý các phiên, chuyên về ý nghĩa tách biệt với cơ sở dữ liệu lưu trữ nội dung trang web của bạn hoặc bất kỳ nội dung nào. Trong thời gian phổ biến NoSQL - theo ý kiến ​​của tôi, NoSQL là một công cụ tuyệt vời để xử lý các phiên. Họ quy mô dễ dàng, họ nhanh hơn trong việc ghi dữ liệu vào thiết bị lưu trữ hơn RDBMS.

Tùy chọn thứ ba là tăng tất cả điều này, mương ổ đĩa cứng làm giải pháp lưu trữ vĩnh viễn và chỉ sử dụng bộ nhớ máy chủ của bạn để lưu trữ phiên. Những gì bạn nhận được là hiệu suất đáng kinh ngạc, tuy nhiên tất cả RAM của bạn có thể nhanh chóng biến mất. Bạn cũng có thể tạo một cụm máy tính lưu trữ các phiên trong RAM của chúng. Redis và Memcache rất tuyệt vời cho nhiệm vụ này, googling một chút sẽ cung cấp cho bạn nguồn lực tốt giải thích cách sử dụng Redis hoặc Memcache để lưu trữ phiên.

Điểm mấu chốt của tất cả điều này là: không lưu trữ quá nhiều dữ liệu trong các phiên của bạn. Theo nhu cầu và ngân sách của bạn - có 3 tùy chọn có sẵn để lưu trữ và làm việc với các phiên.

1

Đây là một liên kết tốt: http://tuxradar.com/practicalphp/10/1/0

phiên dữ liệu là khối lượng công việc rất tốn kém quá. Cách tốt nhất để làm điều đó là lưu trữ một cookie, hoặc session_id và sử dụng nó để tìm kiếm những gì bạn cần từ một dbfile/rdbms. Điều này cũng cho phép trang web của bạn chạy trên môi trường nhiều máy chủ khi dữ liệu phiên được giới hạn ở một đơn.

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