Запоминать состояние объекта в PHP между запросами - PullRequest
1 голос
/ 13 ноября 2009

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

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

По этой причине я думаю о том, чтобы сохранить значения словаря один раз и обновить его только после редактирования значения в нем. К сожалению, статические переменные PHP не могут быть использованы, потому что они умирают в конце запроса. Я не хочу использовать сессию, потому что мне придется делать вызовы БД для каждого пользователя. В идеале я хотел бы использовать статические переменные так же, как в Java - они живут так же долго, как приложение в JVM.

Каково лучшее решение для хранения некоторых переменных (в моем примере - словарей, словарных записей и т. Д.) В течение длительного времени (не по запросу) для всех пользователей (не для пользователя)?

Я думаю сделать что-то вроде DictionaryValues класса, сериализовать его один раз, а затем десериализовать его при каждом запросе. Каждый раз, когда кто-то редактирует словарь, объект снова сериализуется и заменяет старый сериализованный объект. Конечно, редактирование будет происходить редко по сравнению с тем, как часто будут читаться значения словаря.

Это хорошее решение? Должен ли я сериализовать объект и сохранить его на диске или записать в базу данных? Какой из них быстрее?

Может быть, вы найдете лучшее решение для этой проблемы?

Ответы [ 3 ]

5 голосов
/ 13 ноября 2009

Вы можете попробовать PHP APC . Это быстрый и простой в использовании. Вы можете сериализовать / десериализовать объекты и легко хранить / получать их.

В распределенной среде вы можете выполнять те же функции, используя memcache .

2 голосов
/ 13 ноября 2009

Несколько вариантов, если memcache / APC слишком много или невозможно:

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

Если вам не нужно каждое значение словаря на каждой странице (скорее всего, не так ли?), Вы можете использовать кеширующую таблицу, которая может работать без соединений. Это было бы лучшим решением с точки зрения занимаемой площади.

1 голос
/ 13 ноября 2009

Есть несколько вариантов:

  1. Вы можете использовать совместно используемую память ( shmop или memcache ).
  2. Вы можете кэшировать в файл или базу данных - попробуйте PEAR :: Cache_Lite (или APC , как подсказывает @jldupont)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...