52 votes

alternative à memcached qui peut persister sur le disque

Je suis actuellement l'utilisation de memcached avec mon application java, et dans l'ensemble c'est vraiment génial de travailler.

Les caractéristiques de memcached qui sont les plus importantes pour moi sont:

  • c'est rapide, étant donné que les lectures et écritures en mémoire et ne touchez pas le disque
  • c'est juste un magasin de clé/valeur (puisque c'est mon app besoins)
  • il est distribué
  • il utilise la mémoire de manière efficace par le fait que chaque objet direct exactement sur un serveur
  • il ne suppose que les objets sont d'une base de données (depuis mes objets ne sont pas des objets de base de données)

Cependant, il y a une chose que j'aimerais le faire memcached ne peut pas faire. J'ai de temps en temps (peut-être une fois par jour), enregistrer le contenu du cache sur le disque. Et je veux être en mesure de restaurer le cache de la sauvegarde de l'image du disque.

Le disque de l'enregistrement n'a pas besoin d'être très complexe. Si une nouvelle clé/valeur est ajoutée lors de l'enregistrer, je ne m'inquiète pas si c'est inclus dans l'enregistrer ou non. Et si une clé/valeur est modifiée alors que l'enregistrement est en cours, la valeur enregistrée doit être soit l'ancienne ou de la nouvelle valeur, mais je n'ai pas de soins.

Quelqu'un peut-il recommander une autre solution de mise en cache (qu'il soit libre ou commercial) qui a toutes (ou un pourcentage important) de memcached caractéristiques qui sont importantes pour moi, et permet également la possibilité de sauvegarder et de restaurer l'intégralité du cache sur le disque?

20voto

Pascal MARTIN Points 195780

Je ne l'ai jamais essayé, mais qu' redis?
Sa page d'accueil dit (en les citant) :

Redis est une valeur-clé de la base de données. Il est similaire à memcache mais le jeu de données n'est pas volatile, et les valeurs peuvent être cordes, exactement comme dans memcached, mais aussi les listes et les ensembles atomiques les opérations de push/pop.

Pour être très rapide, mais à la persistance même temps le jeu de données entier est pris dans la mémoire et de temps de le temps et/ou lorsqu'un certain nombre de changements pour le jeu de données sont effectuées, il est écrit de manière asynchrone sur le disque. Vous peut-être perdu depuis quelques requêtes qui est acceptable dans de nombreuses applications, mais il est aussi rapide qu'une mémoire DB (Redis prise en charge non-bloquant maître-esclave la réplication afin de résoudre ce problème par la redondance).

Il semble ot de répondre à quelques points dont vous avez parlé, alors peut-être il pourrait être utile, dans votre cas ?

Si vous l'essayez, je suis assez intéressé par ce que vous trouverez, d'ailleurs ;-)


Au passage : si vous avez besoin d'écrire tout cela sur le disque, peut-être un cache système n'est pas vraiment ce dont vous avez besoin... après tout, si vous êtes à l'utilisation de memcached comme un cache, vous devriez être en mesure de re-remplir la demande, chaque fois que cela est nécessaire, encore, je l'avoue, il pourrait y avoir quelques problèmes de performances si vous tout memcached cluster tombe à la fois...

Alors, peut-être quelques "plus" clé/valeur en magasin orienté logiciel pourrait l'aider ? Quelque chose comme CouchDB, par exemple ?
Il ne sera probablement pas aussi vite que memcached, comme les données n'est pas stockée dans la RAM, mais sur le disque, mais...

16voto

markus Points 3224

Peut-être que votre problème comme le mien: je n'ai que quelques machines pour memcached, mais avec beaucoup de mémoire. Même si l'un d'eux échoue ou doit être redémarré, il affecte sérieusement les performances du système. Selon l'origine memcached philosophie, devrais-je ajouter beaucoup plus de machines avec moins de mémoire, mais ce n'est pas rentable et pas exactement de "green IT" ;)

Pour notre solution, nous avons construit une couche d'interface pour le système de Cache de façon à ce que les fournisseurs de sous-jacents des systèmes de cache peuvent être imbriquées, comme vous pouvez le faire avec des cours d'eau, et a écrit un fournisseur de cache pour memcached, mais aussi notre propre très simple Clé-Valeur-2-disque fournisseur de stockage. Ensuite, nous définissons un poids pour les éléments du cache qui représente la façon dont il est coûteux de reconstruire un article s'il ne peut pas être récupéré à partir du cache. Le imbriquée cache Disque est utilisé uniquement pour les articles avec un poids au-dessus d'un certain seuil, peut-être autour de 10% de tous les articles.

Lorsque le stockage d'un objet dans le cache, nous n'allons pas perdre du temps comme de l'épargne à l'un ou les deux caches est mis en file d'attente pour l'exécution asynchrone de toute façon. Donc, l'écriture de la mémoire cache du disque n'a pas besoin d'être rapide. Même pour les lectures: d'Abord on aller pour memcached, et seulement si elle n'est pas là et c'est un "coûteux" de l'objet, puis on vérifie le cache disque (qui est par magnitudes plus lent que memcached, mais encore beaucoup mieux que le recalcul de 30 GO de données après une seule machine est allé vers le bas).

De cette façon nous obtenons le meilleur des deux mondes, sans remplacer memcached par quelque chose de nouveau.

13voto

skaffman Points 197885

EhCache a un mode "disque persistant" qui vide le contenu du cache sur le disque à l’arrêt et restaure les données lors de la sauvegarde. En ce qui concerne vos autres besoins, lorsqu’il est exécuté en mode distribué, il réplique les données sur tous les nœuds, au lieu de les stocker sur un seul. à part cela, il devrait bien répondre à vos besoins. Il est également toujours en cours de développement, contrairement à de nombreux autres frameworks de cache java.

7voto

valyala Points 191

Essayez d' aller au-memcached - memcache serveur écrit en Aller. Il persiste des données mises en cache sur le disque hors de la boîte. Allez-memcached est compatible avec memcache clients. Il a les caractéristiques suivantes manque dans l'original memcached:

  • Les données mises en cache survivre serveur tombe en panne et/ou redémarre.
  • Taille de la mémoire Cache peut dépasser la taille de la RAM de plusieurs ordres de grandeur.
  • Il n'y a pas de 250 octets de limite sur la taille de la clé.
  • Il n'y a pas de limite de 1 mo sur la valeur de la taille. La valeur de la taille est limitée par 2 go.
  • Il est plus rapide que l'original memcached. Il utilise moins de CPU au moment de servir les demandes entrantes.

Voici les chiffres de la performance obtenue via go-memcached-banc:

-----------------------------------------------------
|            |  go-memcached   | original memcached |
|            |      v1         |      v1.4.13       |
| workerMode ----------------------------------------
|            | Kqps | cpu time |  Kqps  | cpu time  |
|----------------------------------------------------
| GetMiss    | 648  |    17    |  468   |   33      |
| GetHit     | 195  |    16    |  180   |   17      |
| Set        | 204  |    14    |  182   |   25      |
| GetSetRand | 164  |    16    |  157   |   20      |
-----------------------------------------------------

Lié statiquement binaires pour aller au-memcached et aller-memcached-banc sont disponibles à la page des téléchargements.

4voto

Benjamin Nitlehoo Points 233

Je pense que membase est ce que vous voulez.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X