Руководства

Кэширование результатов геокодирования без путаницы в расчёте квоты

Геокодировать один и тот же адрес дважды за неделю обычное дело, и кэш очевидное решение. Люди спотыкаются на том, что забывают: попадание в кэш и промах кэша выглядят для вашего приложения одинаково, но для квоты это совершенно разные вещи.

Что можно безопасно кэшировать

Геокодированный адрес меняется редко, поэтому полный результат прямого или обратного запроса с ключом по нормализованному вводу можно безопасно кэшировать надолго, на недели или месяцы в зависимости от того, насколько часто меняются ваши адресные данные. Результат определения IP безопасно кэшировать на более короткий срок, поскольку диапазоны время от времени переназначаются. Идентификатор часового пояса стабилен, но его utc_offset меняется при переходе на летнее время, поэтому кэшируйте идентификатор и пересчитывайте смещение, а не храните весь ответ бессрочно.

Ответы из кэша не расходуют квоту

Попадание в кэш означает, что для этого запроса вы вообще не обращались к API, поэтому ни X-Quota-Used, ни ваш баланс не меняются. В этом весь смысл кэширования, но это также значит, что попадание в кэш нигде не отразится в заголовках квоты, которые учитывают только вызовы, реально дошедшие до API. Не пытайтесь сверять собственные счётчики запросов с заголовками квоты, если вы не учитываете попадания в кэш отдельно.

Пример ключа кэша

cache_key = "forward:" + normalize("221B Baker Street, London")

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

Чего ожидать по объёму

Если половина входящих адресов повторяется в пределах окна кэширования, то фактическое число запросов, списываемых с бесплатной квоты и предоплаченного баланса, составит примерно половину исходного объёма адресов. Это стоит знать, прежде чем решать, нужно ли выходить за пределы 2 500 бесплатных запросов в день, включённых в каждый ключ, ведь реальное число обращений к API может оказаться намного меньше, чем предполагает исходный трафик.

Когда обходить кэш

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

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