어디서나 답변을 적용 할 수있는 시점까지는 질문에 답변 할 수 없습니다.
많은 웹 서버 아키텍처가 하나의 동일한 컴퓨터에 HTTP 서버 (Apache, Nginx), 서버 측 언어 (PHP, Ruby, Python) 및 RDBMS (MySQL, PostgreSQL)를 처리합니다.
가장 일반적인 설정 중 하나입니다.
지금,이 시나리오에서 일어나는 것입니다 : 당신은 MySQL로 연결
- 가 - 당신은 PHP> MySQL의에서 연결을 설정하고 있음을 "비용"당신은 데이터를 요청 조금
- , MySQL은 이렇게 (RAM에 캐시되지 않은 경우)
- PHP는 데이터를 가져 와서 정보를 저장할 메모리를 할당합니다.
- 이제 세션에 저장합니다. 하지만 기본적으로 세션은 디스크 기반이므로 쓰기 작업을 실행하고 하드 드라이브의 최소 1 회의 I/O 작업을 수행했습니다.
하지만 디스크에서 일부 데이터를 이동했습니다)을 RAM (PHP 변수)에 저장 한 다음 다시 디스크에 저장합니다.
당신은 정말로 자신이나 당신의 시스템을 도와주지 않았는데, 어떤 일이 일어나면 느리게 만들었습니다.
한편, PHP (및 다른 언어)는 MySQL (및 다른 데이터베이스)와의 연결을 유지할 수 있으므로 새 연결을 여는 비용을 최소화합니다 (이는 사물의 웅장한 계획에서 실제로 저렴합니다).
여기서 알 수 있듯이 이는 하나의 시나리오입니다.HTTP 서버를 전용 머신에, PHP를 전용 머신에, MySQL을 전용 머신에 배치하는 시나리오가 있습니다. 문제는 다시 MySQL에서 PHP 세션으로 데이터를 이동하는 것이 더 저렴하다는 것입니다. 그 세션 디스크 기반, redis 기반, memcache 기반, 데이터베이스 기반인가요? MySQL에 연결하는 비용은 얼마입니까?
당신이 상상할 수있는 어떤 시나리오에서 물어볼 필요가있는 것 - 어떤 거래를하고 있으며 무엇을 위해을 가지고 있습니까?
따라서 가장 일반적인 설정 (PHP와 데이터베이스가 동일한 컴퓨터에서 실행 중일 경우)은 대답이 아니므로 세션에 일부 MySQL 데이터를 저장하는 것이 좋지 않습니다. InnoDB를 사용한다면 (적절하다면) 적절하게 최적화되어 있다면, 을 db에 쿼리하는 명백한 오버 헤드를 피하기 위해 세션에 일부 데이터를 저장하면을 읽지 않아도 이익을 얻을 수 없습니다. 거의 정반대가 될 가능성이 큽니다.
다른 유용한 리소스 : http://www.xarg.org/2011/10/optimized-pagination-using-mysql/ –
이것은 또한 지원 아키텍처에 크게 좌우됩니다. 예를 들어, 한 곳에서 나는 사용 된 오라클과 서버에서 아주 적은 양의 RAM으로 작업했으며, 다른 곳에서는 많은 양의 RAM으로 MySQL을 사용했습니다. 첫 번째 경우 Oracle은이를 처리 할 수 있기 때문에 쿼리가 대량 작업을 수행하게하고 두 번째 세션에서는 우리가 사용하는 메모리 리소스가 있었기 때문에 (세션 남용) 세션을 사용했습니다. – Mark
몇 가지 요인에 따라 다르지만, 대부분의 시나리오에서 세션 저장소를 사용하는 것은 MySQL을 쿼리하는 것보다 빠릅니다. – Carlos