Доработать правильное хранение большого массива (до неск. Мб) на PHP

1 000 руб. за проект
15 июня 2019, 18:06 • 2 отклика • 79 просмотров
Проведено исследования на сервере скорости обработки большого массива строк (166385 строк) и способ хранения массива в виде текстового фала (подобно csv с разделителем строк "переносом строки" и разделителем полей "табуляцией"), в виде сериализации массива. Оба способа при записи на диск подвергаются сжатию функцией gzencode(), таким образом занимат примерно в 5 раз меньше памяти (2 Мб вместо 10Мб). Нужно доработать эксперимент проверкой еще одного способа указанного здесь http://qaru.site/questions/123310/how-do-i-store-an-array-in-a-file-to-access-as-an-array-later-with-php (ищите на странице фразу "Еще один быстрый способ"), только попробуйте запаковать массив в виде : https://www.php.net/manual/ru/phar.using.intro.php и потом подключить файл к основному скрипту.

Вообщем Ваша задача сделать пример выгруззки любого массива в Phar-архив и затем подключить его. По идее такой способ хранения будет занимать места не больше чем gzip-архив, при этом подключаться гораздо быстрее. Поскольку сейчас узким местом является десериализации массива либо разбивка строк либо разбивка строк при помощи explode. И проверить, будет ли способ через подключение Phar-архива работать быстрее, чем десериализация. Поскольку еще пробовали eval http://qaru.site/questions/123310/how-do-i-store-an-array-in-a-file-to-access-as-an-array-later-with-php как описано здесь, но более быстрых результатов это почему-то не дало.

Все время в єксперименте обозначено в миллисекундах: с*10-3.







Результату єксперимента:




Разрешено ОЗУ: 128M

Еxplode




Время создания массива csv: 258.46с*10-3

Всего: 166385 строк

Пик ОЗУ: 86.75Мб

Сериализация

Время сериализации массива: 65.21с*10-3

Время записи ser: 70.69с*10-3

Время считывания ser: 5.34с*10-3

Время десериализации массива: 88.88с*10-3

Всего: 166385 строк

Разрешено ОЗУ: 128M

Пик ОЗУ: 125.5Мб