2013-11-02 3 views
0

Мне нравится иметь систему кэширования данных на основе местоположения (на сервере) для предоставления данных для мобильного приложения. то есть, если некоторые пользователи запрашивают данные из местоположения (что является общим для всех пользователей из той же области), я выберу значения из БД и покажу им. Но если второй пользователь получает одну и ту же страницу в течение следующих 5 минут из того же места, то я не хочу запрашивать миллионы записей, присутствующих в БД, и я могу просто взять их, если он есть в кеше файлов. Итак, любые такие вещи, доступные сейчас в PHP?Система кэширования на основе местоположения

+0

Вы имеете в виду на том же компьютере или просто в том же месте (например, в том же IP или что-то) – putvande

+0

@putvande На сервере. Так что я могу уменьшить нагрузку на БД, так как он содержит более миллиона записей .. – Stranger

+0

Я не думаю, что вы можете это сделать. – putvande

ответ

4

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

, например, ваши основные параметры: lat и long. Предположим, что вы получили запрос с lat = 123 и long = 234 (с некоторыми случайными значениями), вы проверите, что ваша папка кэша - это файл с именем 123_234.data присутствует или нет. Если он присутствует, вместо запроса базы данных вы читаете файл и отправляете контент в качестве вывода, иначе вы читаете из базы данных и перед отправкой ответа напишите этот ответ в кеше файла/123_234.data. Таким образом, вы также можете использовать файлы позже, не запрашивая снова базу данных.

Проблемы:

  1. Время: Кэш истекает в какой-то момент или другой. Поэтому, проверяя, существует ли файл, вам также нужно проверить последнюю измененную временную метку, чтобы гарантировать, что кеш не истек. Это зависит от ваших требований приложения, если срок действия кеша истекает через минуту, 10 минут, часов, дней или месяцев.
  2. Создание интеллектуальных имен файлов кэша в этом случае будет сложным, так как даже на расстоянии 100 м длина лат, длинная комбинация будет отличаться. Одним из вариантов для вас может быть выбор имен файлов путем установки точности. например, полная длинная комбинация лат имеет форму 28.631541,76.945281. Возможно, вы захотите создать файл кеша с именем 28.63154_76.94528.data (сокращение значения точности до 5-ти мест после десятичного). Это снова зависит, если вы хотите кэшировать только одну точку на земном шаре или географическую область, а также географическую область, а затем ее радиус.

Я не знаю, почему кто-то проголосовал за вопрос, я считаю, что это очень хороший и разумный вопрос. Там идет мой upvote :)

+0

Действительно я ценю ваш ответ, и это имеет смысл. – Stranger

1

Если все, что вас беспокоит, это запросы ... одним из подходов может быть таблица db, которая хранит результаты запроса как json или сериализованные php-объекты вместе с любыми полями, которые вам нужны для сопоставления местоположений.

хрон работу работает на любой интервал лучше всего подходит бы очистить истекшие результаты

+0

Ценный ответ. Но что вы думаете с точки зрения производительности, когда оно растет? – Stranger

+0

конечно простой в реализации. действительно зависит от ваших внутренних ресурсов и того, что вы хотите оптимизировать – charlietfl

+0

Когда у нас будет больше пользователей, производительность БД (когда она станет огромной) снова станет медленнее, что делает поиск еще медленнее в огромном БД правильно? – Stranger

Смежные вопросы