Сохранение и восстановление класса в PHP как метод оптимизации? - PullRequest
0 голосов
/ 17 февраля 2019

У меня есть веб-страница в приложении PHP, которая обращается к файлу данных проприетарного формата, анализирует его и генерирует результат на основе пользовательского ввода.Работает отлично.

Тем не менее, файл данных становится все больше и больше, и анализ занимает больше времени.Запросы пользователей также растут.

Прежде чем все выйдет из-под контроля, я хочу немного оптимизировать приложение, не тратя на это слишком много времени.

В данный момент файл данных анализируется внутри класса, и этот класс знает все о файле.

Вывод должен быть точным с точностью до 4 часов от файла данных.

Самый быстрый способ оптимизировать это для меня - загружать и анализировать файл по событию cron каждый час и сохранять те данные, которые веб-страница может загружать гораздо быстрее, что означает анализ файла один раз в час.вместо каждого запроса.

Каков наилучший способ сделать это?

Я сразу подумал «база данных», но это похоже на большую работу, пытаясь сохранить все данные, и любые данные могут измениться в файле, поэтому вместо попытки сравнить данные мне пришлось быотбрасывайте таблицу каждый час и пополняйте ее, что дает шанс веб-приложению вернуть неверные данные пользователю.

Итак, я подумал, можно ли взять класс, сохранить его на диск, и веб-приложение повторно загрузит эти данные в память, когда это потребуется?Имеется в виду очень небольшая модификация приложения (и небольшой скрипт, запускаемый на cron).

1 Ответ

0 голосов
/ 17 февраля 2019

Вы можете сериализовать класс, но это не очень рекомендуется.

Поскольку вы используете php и заинтересованы только в наборе результатов, тогда проще всего будет хранить данные с использованием uapc, это всего лишь ключ/ значение хранится в памяти.

Пример:

function GetData() {
    $cached = apc_fetch('myParsedData');
    if(!empty($cached)) {
        return $cached;
    }
    $data = file_get_contents(...);
    $result = Parse($data);
    apc_store('myParsedData', $result, 3600);
    return $result;
}

function Parse($data) {
    //do something
    return $result;
}

Это будет хранить данные в течение 3600 секунд, а когда оно будет пустым, будет загружать его с диска.

...