Lembre-estado do objeto em PHP entre as solicitações
-
19-09-2019 - |
Pergunta
Eu estou escrevendo um aplicativo e vou ter alguns dicionário valores em muitos idiomas diferentes.Eu sei que eu poderia usar o GetText, mas AFAIR arquivos precisam ser compilados após a edição, e eu quero deixar o usuário editar o dicionário, e eu não recompilar .mo arquivos no servidor.Eu não sei quantos idiomas são utilizados, então a solução deve ser elástica.
Eu projetei o banco de dados assim que funciona bem, e o esquema parece bem, mas para cada valor de dicionário, há um par de associações, de modo que a solução não é muito rápido.
Por essa razão, eu estou pensando em armazenar dicionário valores de uma só vez, e atualizá-lo apenas após a edição de um valor.Infelizmente, PHP variáveis estáticas não poderia ser utilizado, porque eles morrem no final do pedido.Eu não quiser usar a sessão, porque vou ter de fazer chamadas de DB por usuário.Idealmente, eu gostaria de usar variáveis estáticas como em Java - eles estão vivendo enquanto aplicação de viver na JVM.
Qual é a melhor solução para armazenar algumas variáveis (no meu exemplo, dicionários, entradas de dicionário, etc.) por um longo tempo (não por pedido) para todos os usuários (não por usuário)?
Eu estou pensando em fazer algo como DictionaryValues
classe, serializá-lo uma vez e, em seguida, anular a serialização é cada solicitação.Toda vez que alguém vai editar o dicionário, o objeto poderá ser serializado novamente e vai substituir o antigo objeto serializado.É claro que a edição vai ocorrer, raramente, em comparação com a frequência dicionário valores serão lidos.
Esta é uma boa solução?Devo serializar o objeto e armazená-lo no disco ou escrever para o banco de dados?Qual é mais rápido?
Talvez você a encontrar a melhor solução para esse problema?
Outras dicas
Algumas opções se memcache / APC é demais ou não é possível:
Você poderia "compilar" o seu banco de dados os valores de freqüência em um arquivo PHP e incluir isso.Que seria o mais rápido de análise e processamento-sábio.
Se você não precisa de todos dicionário de valor em cada página (muito provável, não é?) você pode querer usar um cache de tabela que pode funcionar sem as Associações.Essa seria a melhor solução a partir de uma pegada de perspectiva.
Há um par de opções:
- Você pode usar memória compartilhada (shmop ou memcache).
- Você poderia cache para um arquivo ou banco de dados - tente PÊRA::Cache_Lite (ou APC como o @jldupont sugere)