Вопрос

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

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

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

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

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

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

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

Это было полезно?

Решение

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

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

Другие советы

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

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

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

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

  1. Вы можете использовать общую память (Шмоп или кэш памяти).
  2. Вы можете кэшировать в файл или базу данных — попробуйте PEAR::Cache_Lite (или БТР как предлагает @jldupont)
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top