2010-10-19 4 views
10

Pour une petite application PHP que j'écris, nous devons stocker un grand nombre d'enregistrements qui ont une clé de hachage, et quelques valeurs de champs simples ('hôte', 'chemin'). par exemple:Quelles sont les bonnes options de stockage rapide et persistant pour les données clé> valeur?

'4420ffb32a' => array(
    'host' => '127.0.0.1', 
    'path' => 'path/to/resource', 
); 

Quel est le meilleur stockage persistant pour des données de ce type? Est-ce que MySQL serait le meilleur choix, ou est-ce trop pour des données aussi simples? Qu'est-ce qui donnerait la meilleure performance?

Répondre

10

Réponse courte:Membase.


Réponse longue:
Vous avez essentiellement trois options: une base de données relationnelle, stockage de fichiers, ou autre chose.

Comme vous l'avez dit, une base de données relationnelle pourrait définitivement être trop lourde. Cela dit, si cela fait partie d'une application qui a déjà une base de données MySQL ou autre, j'irais avec ça. De même, le stockage de fichiers peut parfois être pratique (écrire dans un tas de fichiers XML, par exemple), mais les E/S disque peuvent être lentes.

maintenant dans la autre catégorie, vous avez quelques grandes options NoSQL comme CouchDB ou Memcached.

Si vous n'êtes pas trop inquiet de la persistance de vos données, je recommande memcache. C'est léger, facile à faire fonctionner, et il y a un Memcache PHP extension qui rend l'utilisation facile. Il est fait pour le stockage de valeur-clé comme ceci. Le seul inconvénient de memcache est que toutes vos données sont perdues à la seconde où le service memcache s'arrête. C'est ici que Membase entre en jeu. C'est un fork open-source de memcache compatible avec le protocole, ce qui signifie qu'il fonctionnera avec toutes les bibliothèques client existantes. Cependant, il peut persister vos données et fournir de la cohérence et de la fiabilité, ce que memcache ne peut pas faire seul.

+0

La réponse longue est appréciée. Je suis en train de revoir membase maintenant. – BrianV

+0

Ou utilisez MySQL avec Memcached: http://dev.mysql.com/tech-resources/articles/nosql-to-mysql-with-memcached.html – hakre

4

CouchDB est votre réponse (bien qu'il puisse être un peu trop pour vos besoins) ..

1

ne pourrait être la meilleure réponse. Mais je voudrais le stocker dans une base de données MySQL et probablement utiliser un mysql_pconnect si les données ne sont pas extraites en même temps.

Informations sur pconnect ici: php.net

Une alternative commune à la base de données est un fichier simple mais corrigez-moi si je suis l'accès aux fichiers mal, mais concurent pourrait être plus lent.

Bonne chance.

5

Juste pour suggérer quelque chose de différent, redis (ou redisdb-win32 si vous êtes sur un serveur Windows)

+0

Suggestion intéressante - Je n'avais pas regardé redis avant ... – BrianV

0

Je voudrais aller MySQl, juste au cas où vous auriez besoin de mettre à jour votre application à l'avenir. Mieux vaut être à l'épreuve du futur quand il s'agit d'applications.

1

Étrange personne n'a mentionné Flintstone jusqu'à maintenant. Une bonne option est également Doctrine.

+0

La suppression est d'environ 1 stockage exact, et non ORM qui utilise plusieurs stockages – vladkras

Questions connexes