는 정수의 다음과 같은 배열이 상상 : PHP와 만 배열 아기
array(1, 2, 1, 0, 0, 1, 2, 4, 3, 2, [...]);
정수
100 만 개 항목까지 계속을; 단지 하드 코딩되지 않고 미리 생성되어 JSON 형식의 파일 (약 2MB 크기)로 저장됩니다. 이러한 정수의 순서는 중요합니다. 일관성이 있고 항상 동일한 인덱스에서 동일한 값을 가져야하므로 매번 임의로 생성 할 수 없습니다. "좋아"나는json_decode
약 2를 구문 분석해야하기 때문에 아마 합리적인 생각, "-
이 파일이 나중에 PHP에서 다시 읽을 경우 그냥 배열을 얻을 수는 700에서 900ms로한다 (예를 들면 + json_decode
file_get_contents
사용) 백만 자, 캐쉬하자. " APC는 약 68MB의 엔트리를 캐시하는데, 보통은 zvals가 크다. 그러나 APC에서이 배열을 다시 검색하는 것은 내 눈에 아직도 너무 많이 좋은 600ms을 필요로합니다.
편집 : APC는 백만 개의 항목 배열이 길고 무거운 과정 인 콘텐츠를 저장하고 검색하기 위해 직렬화/비 직렬화를 수행합니다.
그래서 질문 : 나는 백만 항목의 배열에 상관없이 PHP에서 데이터 저장소 또는 방법을로드하려는 경우
나는이 대기 시간을 기대해야 하는가? 지금까지 내가 이해 APC는 zval 자체를 저장, 그래서 이론적으로 APC에서 검색하는 것은 아마도 (더 구문 분석, 변환없이, 아니 디스크 액세스)이유에 대한 느린 APC입니다 얻을 수있는만큼 빨리해야한다 그래서 겉으로보기에 단순한 무엇인가?PHP를 사용하여 100 만 개의 항목 배열을 메모리에로드하는 효율적인 방법이 있습니까? RAM 사용을 가정하면 문제가되지 않습니다.
인덱스를 기준으로이 배열의 조각에만 액세스 할 수 있습니다 (예 : 인덱스 15에서 인덱스로 청크를로드하는 경우). 전체 배열을 메모리에 실제로 저장하지 마십시오 (예, 이것이 정상적인 방법이라고 생각합니다. 모든 것을 알고 싶었습니다.) 전체 배열을위한 가장 효율적인 데이터 저장소 시스템은 무엇이겠습니까? 분명히 RDBM이 아닙니다. 나는 redis를 생각하고 있지만, 나는 다른 아이디어를 듣게되어 기쁩니다.
[SplFixedArray] (http://php.net/manual/en/class.splfixedarray.php)를 사용해 보셨나요? – Buddy
@Buddy는별로 다르지 않지만 메모리를 적게 사용하지만 APC는 오래 걸립니다. – Mahn
숫자가 작고 배열이 정적 인 경우 대신 단일 1Mb 문자열 객체를 사용할 수 없습니까? – 6502