2010-07-22 5 views
2

Je pré-génère plus de 20 millions de pages html gzippées, je les stocke sur disque et je les sers avec un serveur web. Maintenant, j'ai besoin que ces données soient accessibles par plusieurs serveurs Web. Rsync-ing les fichiers prend trop de temps. NFS semble être trop long. J'ai envisagé d'utiliser un magasin de clés/valeurs comme Redis, mais Redis ne stocke les chaînes que comme des valeurs, et je soupçonne qu'il va s'étouffer avec les fichiers gzippés. Mon idée actuelle est d'utiliser une simple table MySQL/Postgres avec une clé de chaîne et une valeur binaire. Avant de mettre en œuvre cette solution, je voulais voir si quelqu'un d'autre avait de l'expérience dans ce domaine et pouvait offrir des conseils.Quelle est la meilleure façon de mettre en cache des données binaires?

Répondre

2

J'ai la tête bien sur Redis, c'est un.

J'ai aussi entendu des choses extrêmement positives sur memcached. Il convient également aux données binaires.
Prenez Facebook par exemple: Ces gars utilisent memcached, aussi pour les images!
Comme vous le savez, les images sont en binaire. Alors, obtenez memcached, obtenir une machine pour l'utiliser, un classeur pour PHP ou tout ce que vous utilisez pour vos sites, et c'est parti! Bonne chance!

+0

Mon problème avec memcached est que si l'alimentation s'éteint, je perds mes données. Donc, en plus de récupérer d'une panne de courant, je dois reconstruire mon cache. – Scott

+0

Cela dépend de ce que vous cherchez, exactement, et quel est le budget. Pensez à avoir des «miroirs» ou des données, même si une machine tombe en panne, l'autre ou les autres peuvent servir. De plus, si le serveur tombe en panne, et qu'il est le seul, vous pouvez écrire un script pour télécharger à nouveau les données à partir du hdisk ou de quelque chose au démarrage. Il y a beaucoup d'options. Je n'irais pas pour une base de données ACID car il y a beaucoup de frais généraux qui ne sont pas nécessaires à cette fin. Il ne cache pas, autant que je sache, les données d'une manière que memcached fait, qui sur ce dernier est conçu spécifiquement pour votre but, donc optimisé pour cela – Poni

+0

Je suis d'accord sur la base de données, mais on m'a donné le luxe d'explorer quelques options, alors j'ai pensé à ce que le diable. – Scott

1

Tout d'abord, pourquoi mettre en cache les gzips? La latence du réseau et le temps de transmission sont supérieurs de plusieurs ordres de grandeur au temps passé par le processeur à compresser le fichier, ce qui le rend peut-être la solution la plus simple.

Cependant, si vous en avez vraiment besoin, je ne suis pas sûr qu'une base de données centrale soit plus rapide qu'un partage de fichiers (bien sûr, vous ne devriez pas deviner ces choses!). Une approche simple pourrait consister à héberger les fichiers d'origine sur un partage NFS et à laisser chaque serveur web les gzip et les mettre en cache localement à la demande. memcached (comme le suggère Poni) est également une bonne alternative, mais ajoute une couche de complexité.

+0

Je suis en train de comparer les systèmes de fichiers, postgres et tokyo cabinet. Je vais mettre à jour ma question avec les résultats. – Scott

Questions connexes