Question

Je suis en train d'écrire une application et je vais avoir quelques valeurs du dictionnaire dans de nombreuses langues différentes. Je sais que je pourrais utiliser GetText, mais les fichiers AFAIR doivent être compilés après l'édition, et je veux laisser le dictionnaire d'utilisateur de modifier, et je ne peux pas recompiler .mo fichiers sur le serveur. Je ne sais pas combien de langues seront utilisées, de sorte que la solution doit être élastique.

J'ai conçu la base de données il fonctionne bien, et le schéma semble bien, mais pour chaque valeur dictionnaire il y a quelques jointures, de sorte que la solution ne soit pas trop rapide.

Pour cette raison, je pense à stocker des valeurs de dictionnaire une fois, et vous rafraîchir seulement après la modification d'une valeur en elle. Malheureusement, les variables statiques PHP ne pouvaient pas être utilisés, car ils meurent à la fin de la demande. Je ne veux pas utiliser session, parce que je vais devoir faire DB appels par utilisateur. Idéalement, je voudrais utiliser des variables statiques comme dans Java -. Ils vivent aussi longtemps que l'application en direct dans JVM

Quelle est la meilleure solution pour stocker certaines variables (dans mon exemple - dictionnaires, entrées de dictionnaire, etc.) pendant une longue période (et non par demande) pour tous les utilisateurs (et non par l'utilisateur)?

Je pense à faire quelque chose comme classe DictionaryValues, sérialiser une fois, et deserialize alors chaque demande. Chaque fois que quelqu'un va modifier le dictionnaire, l'objet sera de nouveau sérialisé et remplacer l'ancien objet sérialisé. Bien sûr, l'édition se produira rarement par rapport à la fréquence des valeurs dictionnaire sera lu.

Est-ce une bonne solution? Dois-je sérialiser l'objet et le stocker sur le disque ou écrire à la base de données? Lequel est plus rapide?

Peut-être vous trouver une meilleure solution pour ce problème?

Était-ce utile?

La solution

Vous pouvez essayer PHP APC . C'est rapide et facile à utiliser. Vous pouvez sérialisation / objets délinéariser et magasin / les obtenir facilement.

Dans un environnement distribué, vous pouvez effectuer les mêmes fonctions en utilisant memcache .

Autres conseils

Quelques options si memcache / APC est trop ou pas possible:

Vous pouvez « compiler » vos valeurs de base de données fréquemment dans un fichier PHP et inclure cela. Ce serait le plus rapide et le traitement parsing- sage.

Si vous n'avez pas besoin chaque valeur dans le dictionnaire chaque page (très probable, est-ce pas?), Vous pouvez utiliser une table de mise en cache qui peut fonctionner sans JOIN. Ce serait la meilleure solution du point de vue de l'empreinte.

Il y a deux options:

  1. Vous pouvez utiliser la mémoire partagée ( shmop ou memcache ).
  2. Vous pourriez mettre en cache dans un fichier ou base de données - essayez PEAR :: Cache_Lite (ou < a href = "http://php.net/apc" rel = "nofollow noreferrer"> APC comme @jldupont suggère)
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top