2014-11-04 6 views
0

다른 사람들이이 점에 대해 어떻게 생각하는지 궁금합니다. 당신이 가지고있는 의견이나 사실을 고맙게 생각할 것입니다. :)MySQL 쿼리에 대한 생각과 SESSION 변수 사용에 대한 생각?

많은 정보가 MySQL에서 가져와 여러 페이지에서 필요한 곳에 응용하고 있습니다.

는 더 많은 감각을 ...

  1. 풀 ONCE 모든 데이터와 새 페이지마다 데이터베이스에서 데이터를 가져 오는 다른 페이지

  2. 에서 사용할 세션 변수에 저장겠습니까 그게 필요해

내가 선호하는 방법은 # 1이라고 가정하지만, 세션 변수 "너무 많이"를 사용하는 것에 대한 단점이있을 수 있습니까?

URL과 관련하여 URL과 관련하여 URL (예 : domain.com/somepage.php?somedata=something & otherdata = thisdata)을 저장하거나이를 저장하기 위해 SESSION 변수를 사용하는 것이 좋습니다. 데이터가 일반/깨끗한 상태로 유지 될 수 있도록 (예 : domain.com/somepage.php)?

두 가지 질문이 모두로드되어 있지만 가능한 통찰력을 얻을 수 있습니다.

감사합니다.

+0

다른 유용한 리소스 : http://www.xarg.org/2011/10/optimized-pagination-using-mysql/ –

+0

이것은 또한 지원 아키텍처에 크게 좌우됩니다. 예를 들어, 한 곳에서 나는 사용 된 오라클과 서버에서 아주 적은 양의 RAM으로 작업했으며, 다른 곳에서는 많은 양의 RAM으로 MySQL을 사용했습니다. 첫 번째 경우 Oracle은이를 처리 할 수 ​​있기 때문에 쿼리가 대량 작업을 수행하게하고 두 번째 세션에서는 우리가 사용하는 메모리 리소스가 있었기 때문에 (세션 남용) 세션을 사용했습니다. – Mark

+0

몇 가지 요인에 따라 다르지만, 대부분의 시나리오에서 세션 저장소를 사용하는 것은 MySQL을 쿼리하는 것보다 빠릅니다. – Carlos

답변

3

어디서나 답변을 적용 할 수있는 시점까지는 질문에 답변 할 수 없습니다.

많은 웹 서버 아키텍처가 하나의 동일한 컴퓨터에 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에 쿼리하는 명백한 오버 헤드를 피하기 위해 세션에 일부 데이터를 저장하면을 읽지 않아도 이익을 얻을 수 없습니다. 거의 정반대가 될 가능성이 큽니다.

+0

나는 이것을 "모든 곳에서 적용 할 수 없다"라는 경고로 상정했다. 그러나 일반적으로 질문의 근거는 의견을 근거로해야한다고 생각한다. – Mark

-1

사용자 (클라이언트 PC)에 대해 생각해보십시오. 세션은 사용자 PC에 약간의 공간을 차지하며, 세션은 길을 잃을 수도 있고 페이지를 닫은 후 이메일을 보내거나 링크를 복사하여 다른 브라우저에 붙여 넣을 수도 있습니다. 하나님 연습 거기에 그냥 쿼리를 사용하여 생각하지만, 뭔가 참고, 가능한 페이지의 쿼리 수를 줄이기 위해 노력, 그것은 귀하의 사이트 속도가 느려집니다.

0

세션에 넣는 것은 거의 항상 끔찍한 아이디어입니다. 다른 모든 옵션을 다 써 버리지 않으면 고려할 가치가 없습니다. 당신은 당신이 가져올 열을 아래로 트림처럼, 실행중인 쿼리를 단순화하기 위해 할 수있는 일이 있다면

  • 가 평가 : 여기

    는 이러한 문제를 해결하는 방법입니다. SELECT * 대신 SELECT x,y을 시도해보십시오. 여기서 필요한 유일한 열입니다.

  • EXPLAIN을 사용하면 쿼리가 오래 걸리는 이유를 알 수 있습니다. 과 같은 간단한 승리를 찾아 색인을 추가하십시오.
  • MySQL 서버가 올바르게 조정되었는지 확인하십시오. 기본 구성은 끔찍하며 일부 간단한 한 줄 수정으로 성능이 크게 향상 될 수 있습니다.
  • 이러한 모든 작업을 시도했지만 더 이상의 성능을 낼 수없는 경우에만 결과를 캐싱하려고합니다.

캐싱은 올바른 것을 얻는 것이 가장 어려운 작업 중 하나이기 때문에 캐싱에 대한 핀만 가져옵니다.

Memcached 또는 Redis과 같은 것을 사전 재검색 된 결과의 더 빠른 저장소로 사용할 수 있습니다. 더 이상 사용되지 않는 캐시 된 데이터가 자동으로 만료되도록 설계되었습니다.

$_SESSION을 사용하는 이유는 데이터가 일단 입력되면 나중에 제대로 제거하기가 거의 필요 없으므로 계속 증가하는 세션으로 이어지는 나쁜 생각입니다. 실적이 염려되는 경우 세션을 가능한 작게 유지하십시오.