2010-04-12 8 views
3

Mon application est configurée via beaucoup de clés/valeurs (disons 30.000 par exemple)PHP: stockage de configuration optimal?

Je veux trouver la meilleure méthode de déploiement pour ces configurations, sachant que je veux éviter DEFINEs pour permettre la reconfiguration de l'exécution .

J'ai pensé

  • les pré-compilation dans un tableau via un fichier php
  • pré-compilation-les dans une base de données SQLite tmpfs
  • les pré-compilation dans un memcached db

quelles sont mes options pour

  • le meilleur temps d'accès aléatoire à ces configurations (la mémoire n'est pas un problème)?
  • le meilleur temps d'accès structuré si je peux briser ces configuration dans les familles comme (réseau, i18n, ..)

Merci Jerome

+0

Que fait votre application pour laquelle elle a besoin de 30k paramètres? – ryeguy

+0

il existe différents axes de croissance: les clés i18n, l'image de marque, les URL de référencement –

+0

Il y a un problème que je vois ici. D'une part, vous dites que la mémoire n'est pas un problème. D'un autre côté, vous dites que vous avez besoin de haute performance. Bien que l'utilisation d'un tableau plat soit l'option la plus rapide, l'ironie est que ce sera très lent s'il est énorme car il pourrait être paginé sur le disque à moins que vous n'ayez un ram infini. Je ne comprends pas pourquoi vous n'utilisez pas une base de données. – ryeguy

Répondre

2

Eh bien, si la mémoire n'est pas un problème, il suffit de sérialiser un tableau dans un fichier. Il n'y a absolument aucune solution plus rapide que cela. Vous n'avez pas l'en-tête d'E/S et de bibliothèque de SQLite, et vous n'avez pas le surcoût réseau de memcached. Mais gardez à l'esprit, la mémoire doit vraiment pas un problème. Vous chargerez la totalité de la matrice de 30 000 éléments en même temps, plutôt que d'utiliser une base de données, où vous pourrez les charger en fonction des besoins.

Pour structurer les paramètres, vous pouvez les placer dans leur propre fichier.

Mais vraiment, vous devriez utiliser une base de données. C'est ce qu'ils sont là pour ça. Je me demande vraiment pourquoi vous auriez besoin de s'inquiéter des paramètres 30k .. vous pourriez vouloir reconsidérer votre conception d'application.

+1

La mémoire à accès aléatoire fournit toujours le meilleur accès aléatoire selon mon expérience. – webbiedave

+0

@webbiedave: ne peut pas discuter avec cette déclaration. – ryeguy

+0

par "sérialiser" un tableau dans un fichier, vous voulez créer le tableau dans un fichier php ou utiliser la méthode unserialize sur un tableau pré-sérialisé? Cela fait-il une différence de performance? –

0

Qu'en est-il dans une base de données?

Avec un schéma comme celui-ci:

| key | value | 

Vous pouvez avoir des données comme ceci:

| currency | pound | 
| timezone | GMT | 

Il signifie également que vous pouvez interroger comme ceci:

SELECT * FROM options WHERE key = 'timezone' 

Ou même Renvoie beaucoup d'options:

SELECT * FROM options WHERE key IN ('timezone','currency') 

Cela peut être dans n'importe quel type de base de données, notamment une base de données SQLite. Si vous utilisez un langage tel que PHP, vous pouvez utiliser ADOdb pour l'abstraction de base de données afin que votre application soit portable entre différents types de bases de données, juste une idée si vous étiez inquiet d'être lié à une base de données.

+0

Le problème avec une configuration de base de données simple est le temps d'accès. Pour chaque clé ou groupe de clés nécessaire dans une zone de code php spécifique, vous avez besoin d'une requête. Même avec un cache qui signifierait probablement des centaines de récupération de base de données. –

+0

Je ne sais pas si je ne comprends pas votre point de vue, mais dites-vous que vous auriez du code répétitif? Parce que vous pouvez facilement utiliser des fonctions ou même des classes comme un wrapper et récupérer les options de cette façon, par exemple 'Options :: getOption ('timezone')'. –

+0

no. Il existe un cache en cours de traitement pour les clés déjà récupérées, mais selon la page affichée, les clés peuvent être différentes. –

0

Si vous voulez structuré, je dirais fichiers ini en utilisant la fonction parse_ini_file.