Welcome! Log In Create A New Profile

Advanced

Улучшение кеширования вызовов удаленного веб-сервиса

Posted by Dmitry Prostoy 
Уважаемые,

Оптимизируя сайт, решил заняться задачей оптимизации кеширования
вызовов удаленного веб-сервиса. Смысл в следующем: при обращении к
странице, php вызывает удаленный веб-сервис. Результат кеширует
локально. При следующем обращении, если данные есть в кеше - удаленный
вызов не осуществляется, используются закешированные данные.

Первая реализация выглядела следующим образом:
* Локальная папка ".cache", в которую файлы складывались с именем md5
( $remote_url ).
* Таблица в базе данных, в которой фиксировались все закешированные
файлы, количество обращений к ним, дата создания, дата последнего
обращения и т.д.

Буквально за несколько дней папка разрастается на ~50k файлов. Через
несколько месяцев доростает до 250k. Как показала статистика, файлы
хорошо ранжируются по частоте обращений. От тех, которые нужны
буквально каждому пользователю до тех, которые запрашивались по
несколько раз за весь период. Реально часто используемых файлов около
20-30k.

Понимая, что хранить такое количество файлов в одной папке не очень
хорошо, а также, что в БД реальной необходимости нет - решил
модифицировать алгоритм, предварительно полностью очистив базу.
Текущая реализация следующая:
* В локальной папке ".cache" лежат папки "0", "1"...."z".
* В каждой из этих папок в свою очередь также лежат папки "0",
"1"...."z".
* Далее, файлы складываю по следующему принципу:
** $hash = md5( $remote_url)
** $dir1 = substr( $hash, 7, 1 );
** $dir2 = substr( $hash, 13, 1 );
** $local_path = ".cache/" . $dir1 . "/" . $dir2 . "/" . $hash;
от БД отказался - фактом наличия данных в кеше является успешное
выполнение file_get_contents( $local_path );

(продолжение следует :) )
Sorry, only registered users may post in this forum.

Click here to login

Online Users

Guests: 69
Record Number of Users: 6 on February 13, 2018
Record Number of Guests: 421 on December 02, 2018
Powered by nginx      Powered by FreeBSD      PHP Powered      Powered by MariaDB      ipv6 ready