PHP и миллион массива ребенка

Представьте, что у вас есть следующий массив целых чисел:

array(1, 2, 1, 0, 0, 1, 2, 4, 3, 2, [...] );

Целые числа идут до миллиона записей; только вместо того, чтобы быть жестко закодированными, они были предварительно сгенерированы и сохранены в формате файла JSON (размером приблизительно 2 МБ). Порядок этих целых чисел имеет значение, я не могу генерировать его случайным образом каждый раз, потому что он должен быть согласованным и всегда иметь одинаковые значения при одинаковых индексах.

Если этот файл потом читается в PHP (например, с использованиемfile_get_contents + json_decode) требуется только от 700 до 900 мс, чтобы вернуть массив & # x2014; & Quot; Хорошо & Quot; Я подумал, что это, вероятно, разумно, так какjson_decode должен проанализировать около 2 миллионов символов, давайте его кэшируем. APC кэширует его в записи, которая занимает около 68 МБ, вероятно, нормально, zvals большие.Retrieving however this array back from APC also takes some good 600ms что в моих глазах все еще слишком много.

Edit: APC does serialize/unserialize to store and retrieve content which with a million item array is a lengthy and heavy process.

Итак, вопросы:

Should I expect this latency if I intend to load a one million entries array, no matter the data store or the method, in PHP? As far as I understand APC stores the zval itself, so theoretically retrieving it from APC should be as fast as it can possibly get (no parsing, no conversion, no disk access)

Why is APC so slow for something so seemingly simple?

Is there any efficient way to load a one million entries array entirely in memory using PHP? assuming RAM usage is not a problem.

If I were to access only slices of this array based on indexes (e.g. loading the chunk from index 15 to index 76) and never actually have the entire array in memory (yes, I understand this is the sane way of doing it, but I wanted to know all the sides), what would be the most efficient data store system for the complete array? Obviously not a RDBM; I'm thinking redis, but I would be happy to hear other ideas.

Ответы на вопрос(4)

Ваш ответ на вопрос