2009-07-16 4 views
7

나는 데이터베이스에서 멤버를 (보다 많거나 적게) 구하는 클래스가 있습니다.php : sessions 대 데이터베이스

제 질문은 : db (MySQL)에서 매번 가져 와서 세션의 배열에 ID 만 남기거나 세션의 배열에 직접 저장하는 것이 더 효율적입니까?

성과 조건의 차이가 너무 큽니까? (100.000 행을 가진 데이터베이스가 주어진다)

답변

10

어쨌든 세션에 ID를 저장한다는 것을 고려하면 세션이 가장 적합합니다. session_start()를 실행하면 세션 정보가로드되므로 1 ~ 10 개의 항목을로드했는지 여부는 관계가 없습니다 (실제로는 커지지 만 문제가되는 경우는 예외).

그래서 세션을 고수하십시오.

APC 또는 memcache와 같은 메모리 내장 캐시를 사용하면 속도가 정말 걱정됩니다. 파일 시스템이나 데이터베이스에서 10 개의 항목에 대한 속도가 걱정되는 것은 산만합니다. 그 차이는 무의미한만큼 아주 작을 것입니다.

주 : 상기 두 가지 가정

  1. 쿼리가 확대됨 (0.1 초 이하이어야 행할 100K 중 10 개 행을 검색)된다; 및
  2. 당신은 하나 개의 질의를하고있다 없습니다 (10)
7

"효율적"이라는 말의 의미에 달려있다. 시간 효율적이고 디스크 공간 효율적입니다. 그리고 요구 사항이 스펙트럼의 극단적 인 끝나지 않는 한 두 사람을 서로 판단하는 것은 매우 어렵습니다. 동전을 뒤집고, 시간이 지남에 따라 성능을 측정하고, 관찰 된 문제를 기반으로 조정하는 것만으로도 OK 일 것입니다.

조숙 한 최적화는 모든 악의 의 근원입니다.

+0

인용구 : 축하,) 어쨌든, 내 우려는 속도에 관한 것입니다. –

+1

글쎄, 둘 다 궁극적으로 디스크에서 나오지 만, 둘 다 캐시에 저장 될 가능성이 높습니다. 하나는 데이터베이스에, 하나는 OS에 의해 (또는 어쩌면 웹 서버/PHP 모듈로, 어떻게 구성되어 있느냐에 따라) 캐시됩니다. 방법은 최소한으로, 미래의 하드웨어 변경에 따라 완전히 바뀔 수 있으며, 생각할 가치가 없을 것입니다. 자연스러운 것으로 들어가는 것이 좋습니다. 소규모 사이트의 경우 세션 접근 방식 일 수 있다고 생각합니다. 다른 모든 것, 데이터베이스. 서버 구성에 따라 공유 호스트에있는 경우 세션 접근을 피할 수 있습니다. –

2

당신은 당신이 제대로 인덱스 설정이있는 경우 관계가 테이블에 100,000 행 또는 10,000,000 행이 있는지 여부.

PHP의 기본 파일 기반 세션은 데이터베이스에서 검색하는 것보다 빠르다고 말했지 만 초당 5,000 + 쿼리와 같이 사이트가 많이 사용되기 전까지는 그 차이를 알 수 없습니다.