2017-10-03 8 views
9

5 백만 개의 키 - 값 쌍을 저장하기 위해 PHP 응용 프로그램과 함께 memcached를 사용할 것을 고려하고 있습니다. 내 목표는 DB에서 앞뒤로 피하는 것입니다 (필자의 경우 파일 시스템). 키 - 값에 초당 100-500 건의 액세스가있을 수 있습니다. 키 - 값은 모두 MD5의 양식에 있습니다memcached에 백만 개의 키 - 값 저장 - 좋은 아이디어 또는 나쁜 아이디어?

array('MD5X' => 'MD5Y', ...) 

나는 데이터가 저장되는 방법을 잘 모르겠지만, 우리는 5 million * 16 bytes (keys) + 5 million * 16 bytes (values)를 곱하면 우리는 ~ 1백80메가바이트를 얻을.

:

데이터 세트가 고정되어

그래서 나는 단지 그것을 읽을 것이다 (EDIT 나는 모든 항목을 저장하는 750메가바이트을 사용 겠다는 memcached를 인스턴스와 시도 후.).

질문 :

  1. 이 좋은 또는 나쁜 디자인인가?
  2. memcached를 강제로 (서버가 중단되지 않는 한) 강제로 데이터를 다시로드해야합니까? 메모리 캡이 저장된 데이터보다 높다고 가정하십시오. 그렇지 않은 경우 어떤 기술을 사용하여 동일한 목표를 달성 할 수 있습니다.

감사합니다.

+0

특정 사용 사례에 대한 성능 프로파일을 제공해야합니다. 또는 캐싱이 내장 된 실제 DB를 사용하는 것이 좋습니다. 단일 배열을 저장하는 경우 전체 배열을 조사하지 않아도됩니까? –

+0

감사합니다. @PaulCollingwood, 불행히도 DB를 사용할 수 없습니다. 환호 – JoeSlav

답변

0

필요한 성능을 얻으실 수 있습니까? 명확히. Memcache는 빠르게 타오른다. 약 1 천만 개의 키를 저장하고 memcache에 초당 약 700 회 액세스합니다. 결코 우리를 실망시키지 않았습니다.

응용 프로그램을 시작할 때 memcache의 모든 키를로드하고 만료 날짜를 매우 길게 설정할 수 있습니다. 기억해야 할 것은 memcache가 궁극적으로 캐시라는 것입니다. 또한 스토리지 엔진으로 사용해서는 안됩니다. 필요한 데이터 (키)를 찾을 수 없을 가능성이 항상 있다고 생각하고이 경우 DB 호출을해야합니다.

다른 방법으로는 cassandra와 같은 noSQL 데이터베이스를 볼 수 있으며, 사용자의 요구에 맞는 우수한 읽기 및 쓰기 속도를 제공합니다. 유일한 것은 memcache와 비교하여 cassandra를 미세 조정하는 것이 약간 어렵다는 것입니다.

+0

감사합니다. 내 이해에 따라, 만료를 지정하지 않으면 항목이 만료되지 않아야합니다. 메모리 또는 슬랩 문제가없는 한. 내가 DB를 가지고 있지 않기 때문에 (그리고 새로운 라이브러리를 소개하고 싶지는 않지만) 파일 시스템을 사용하기에 충분한 디스크 공간이 없기 때문에, 수동으로 반복되고로드되는 거대한 배열을 사용하려고 생각하고있다. 서버가 시작되면 memcached에 저장됩니다. memcached에서 항목을 찾을 수없는 경우 다른 동작을 기본값으로 사용하거나 배열에서 읽는 것을 고려할 수 있지만 동시성과 서버를 죽이는 것을 두려워합니다. – JoeSlav