Question

Pourquoi y a-t-il une limite de blocs codés en dur (0,5 Mo après compression) dans memcaché?Quelqu'un a-t-il recompilé le sien pour l'améliorer ?Je sais que je ne devrais pas envoyer de gros morceaux comme celui-là, mais ces morceaux très lourds m'arrivent de temps en temps et font des ravages.

Était-ce utile?

La solution

Cette question était dans le FAQ officielle

Quelles sont les limites de Memcached que je pourrais atteindre ?(Machine de retour)

Citer:

Les limites simples que vous verrez probablement avec Memcache sont les limites de la clé et de la taille de l'élément.Les clés sont limitées à 250 caractères.Les données stockées ne peuvent pas dépasser 1 mégaoctet, car il s'agit de la plus grande taille de dalle typique. "

La FAQ a maintenant été révisée et comporte désormais deux questions distinctes couvrant ce sujet :

Quelle est la longueur maximale de la clé ?(250 octets)

La taille maximale d'une clé est de 250 caractères.Remarque Cette valeur sera inférieure si vous utilisez des "préfixes" ou des fonctionnalités similaires, car le préfixe est cloué sur le devant de la touche d'origine.Les clés plus courtes sont généralement meilleures car elles enregistrent la mémoire et utilisent moins de bande passante.

Pourquoi les éléments sont-ils limités à 1 Mo ?

Ahh, c'est une question populaire !

Réponse courte:En raison du fonctionnement de l'algorithme de l'allocateur de mémoire.

Longue réponse:Le moteur de stockage de mémoire de Memcached (qui sera enfichable / ajusté à l'avenir ...), utilise une approche de dalles de la gestion de la mémoire.La mémoire est divisée en morceaux de dalles de tailles variables, commençant à un nombre minimum et montant par une valeur factorielle jusqu'à la plus grande valeur possible.

Disons que la valeur minimale est de 400 octets et que la valeur maximale est de 1 mégaoctet, et le factoriel est de 1,20:

dalle 1 - 400 octets dalle 2 - 480 octets dalle 3 - 576 octets ...etc.

Plus la dalle est grande, plus il y a un écart entre elle et la dalle précédente.Ainsi, plus la valeur maximale est grande, moins le stockage de mémoire est efficace.Memcached doit également pré-alloquer une certaine mémoire pour chaque dalle qui existe, donc la définition d'un factoriel plus petit avec une valeur maximale plus grande nécessitera encore plus de frais généraux.

Il y a une autre raison pour laquelle vous ne voudriez pas faire ça...Si nous parlons d'une page Web et que vous essayez de stocker / charger des valeurs aussi importantes, vous faites probablement quelque chose de mal.À cette taille, il faudra un temps notable pour charger et déballer la structure des données en mémoire, et votre site ne fonctionnera probablement pas très bien.

Si vous souhaitez vraiment stocker des articles supérieurs à 1 Mo, vous pouvez recompiler Memcached avec un édité slabs.c:POWER_BLOCK Valeur ou utilisez le maloc / backend libre inefficace.D'autres suggestions incluent une base de données, des mogilefs, etc.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top