2009-11-25 3 views
27

하루에 200k 개의 unqiues를 사용하는 단일 서버 사이트가 있고 트래픽은 대략 40 일마다 (어쨌든 지난 5 개월 동안) 배가됩니다.Memcache 대 단일 서버 사이트 데이터 캐싱을위한 APC

저는 한 시간 정도만 mysql_query 함수의 출력을 캐싱 할 계획입니다. 캐시가 그보다 오래된 경우 쿼리를 실행하고 결과를 다시 한 시간 동안 캐시에 넣습니다.

My mysql DB의 크기는 약 200MB (10-20MB/10 자 정도 증가)입니다.

저는 HTML 출력을 작성하고 몇 분 동안 사용하여 HTML을 재생성하여 파일 캐싱을 많이합니다.

유감스럽게도 많은 정렬, 검색 및 정렬 방법과 페이지 매김을 허용하는 데이터베이스 사이트가 있기 때문에 ... 15 만 개가 넘는 캐시 된 페이지가 있습니다. 또한 대부분의로드를 유발하는 검색 쿼리를 캐싱하지 않습니다.

캐싱 시스템을 구현하고 싶습니다. 어느 것이 더 빠른 지 알고 싶습니다. 벤치 마크를보고 싶어합니다.

+3

일이이며, 질문은 나를 도와 줬어, 고마워 stackoverflow. –

답변

32

quick Googling에 따르면 APC는 Memcached보다 5 배 빠릅니다.

내 경험에 따르면 APC는 Memcached ..보다 7-8 배 정도 빠르다고하지만, 다른 서비스에서 memchached에 액세스 할 수 있습니다 (예 : 아파치를 주로 실행하고 일부 트래픽을 위임 한 경우). 예 : 이미지 또는 순수 HTML, lighttpd와 같은 다른 웹 서비스로), 필수적이지는 않지만 정말로 유용 할 수 있습니다.

APC는 memcached보다 기능이 적으며 쉽게 사용할 수 있고 최적화 할 수 있지만 필요에 따라 다릅니다.

+0

+1, 새로운 질문을 던지지 않았습니다. @DaNieL, 당신의 대답은 내 솔루션입니다. –

+0

@Imran : 검색 기능을 사용해 주셔서 감사합니다.) – Strae

+1

Google에서 말하는 곳에서 링크를 제공 할 수 있습니까? 미리 감사드립니다. – Gerry

3

어떤 것이 더 빠를 것인지 정확하게 예측하는 것은 거의 불가능합니다. 비슷한 데이터가있는 개발 환경에서 두 가지 방법으로 테스트를 수행 할 것입니다.

성능이 중요한 경우 항상 프로파일 러를 사용하십시오.

+0

이것은 표준적인 게으른 대답입니다. 사실 ** 어느 것이 더 빠를 것인지 정확하게 예측할 수 있습니다 **. 우리는 더 빨라진 것에 흥미가 없다는 것을 유의하십시오. ** 우리는 ** **에 관심이 있습니다. – Pacerier

9

언급 한 것처럼 캐싱에는 몇 가지 측면이 있습니다. 아마 당신의 PHP 응용 프로그램에서 캐싱의 다음과 같은 측면에 초점을 맞출 것입니다 : PHP 스크립트의 컴파일 된 바이트 코드를 캐시

  • 옵 코드 캐싱. 여기서 벤치 마크를 볼 수 있습니다 (이전 기사 임에도 불구하고) : http://itst.net/654-php-on-fire-three-opcode-caches-compared 참고 : opcode 캐싱을 사용하는 것이 좋습니다.

  • 사용자 데이터 캐싱 - APC 및 다른 사람들이이를 수행합니다. 이것은 참조 데이터 또는 상당히 정적이며 자주 변경되지 않는 데이터입니다. 이 참조 데이터가 변경되면 매일 캐시를 지우거나 클린 캐시를 트리거 할 수 있습니다. 이는 일반적으로 참조 데이터가 자주 사용되고 자주 변경되지 않기 때문에 적극 권장됩니다.

  • SQL 쿼리 캐싱 - Zend는 간단한 설정으로이 작업을 쉽게 처리 할 수 ​​있음을 알고 있습니다. (당신이 언급 한 같은) 이러한 쿼리이 다른 명백한 하나입니다 변경되지 않기 때문에

추가 (가능한 경우) :

  • 캐싱 HTML 페이지 - 분명히 정적 페이지를 캐싱은보다 빠르다 하나를 생성하고 일반적으로 애플 리케이션의 대부분의 페이지가 너무 동적이기 때문에 이것은 어렵습니다. 그럴만 한 가치가 있다면 쿼리가 캐시되고 SQL이 간단하다면이 것에 집중하지 않을 것입니다.

  • 캐싱 SQL 결과 - 개인적으로 나는이 문제로부터 벗어납니다. DBMS가 일반적으로 캐싱을하기 때문에 데이터베이스가 작업을 수행하고 최선을 다할 것입니다. 실행 스레드에 대한 결과를 캐시 할 수 있습니다 (즉, 다시 검색하지 않으므로 검색했습니다).하지만 그 이상으로 진행되지는 않습니다.

나는 성공적으로 (나는 개인적으로 APC 작업을 좋아하고 내 참조 데이터와 SQL 쿼리 연산 코드 캐싱 및 사용자 데이터 캐싱을 가정) APC와 eAccelerator를 사용했습니다. XDebug를 사용하여 코드를 프로파일 링하십시오.

+0

나는 SQL 쿼리 캐싱과 SQL 결과 캐싱의 차이점을 잘 모르겠다. 내가 왜 이것을 캐쉬하고 싶지 않니? –

+1

Sql 쿼리 캐싱이 SQL 문을 캐시하고 있습니다 (즉, id =? 인 계정에서 신용을 선택하십시오). 이것은 변경되지 않습니다. 해당 쿼리의 결과는 $ 200.00 일 수도 있지만 그 금액은 상대 데이터 유형에 따라 달라질 수 있습니다. 일반적으로 쿼리는 가능한 결과에 비해 "약간"입니다. –

+0

다음은 Doctrine (ORM)의 설명입니다 - http://www.doctrine-project.org/documentation/manual/1_0/en/caching –

7

APC 키 - 값 저장소와 Memcache를 비교 하시겠습니까? APC는 opcode 캐시도 수행하기 때문에 다른 점이 있습니다.

글쎄, 단일 시스템에서 APC k-v 캐시는 memcache보다 빠릅니다. Memcache는 더 많은 기능을 제공하지만 분산 환경을위한 것이며, APC는 단일 서버에서만 작동합니다.

저는 최근 벤치 마크를 설정하고 양쪽 모두에서 1 백만 개의 키를 얻었습니다. 각 키는 순차적 인 정수이고 값은 32 바이트 문자열이었습니다.

로컬 호스트에서 memcache는 단일 스레드에서 초당 12k 키를 검색 할 수있었습니다. APC는 90K/초를 반환했습니다. 그러나 memcache와 함께 다중 스레드 또는 "multi_get"을 사용하면 APC 성능에 매우 가깝습니다.

벤치 마크는 slicehost에서 1GB vps에서 실행되었습니다.

1

IPB 3.1.4를 APC와 함께 사용하면 두 배 빠른 속도로 작동합니다.

Requests per second: 43.46 [#/sec] (mean) 
Requests per second: 24.23 [#/sec] (mean) 

내 경우 APC에서 memcached를 아직

7

와 IPB을 테스트하지 마십시오 것은 59 배 빠른 memcache에 비해 여기

<?php 
ini_set('apc.enable_cli','1'); //if u run in cli you may need to do changes in php.ini 
error_reporting(E_ALL); 
$mem=new Memcache(); 
$mem->connect('127.0.0.1',11211); 
$mem->replace('testin','something'); 
$i=0; 
$time=time()+microtime(); 
apc_store ('testin','something'); 
$num=1000000; 
while($i<$num){ 
$mem->get('testin'); 
$i++; 
} 
echo "memcache took: ",time()+microtime()-$time," for 1 million gets","\n"; 
$time=time()+microtime(); 
$i=0; 
print_r(apc_fetch('testin')); 
while($i<$num) { 
apc_fetch('testin'); 
$i++; 
} 
echo "apc took: ",time()+microtime()-$time,"for 1 million gets \n"; 

출력

memcache took: 37.657398939133 for 1 million gets 
somethingapc took: 0.64599800109863for 1 million gets 
관련 문제