2008-08-07 8 views
4

Pourquoi existe-t-il une limite de bloc codée en dur (0,5 méga après compression) dans memcached? Quelqu'un a-t-il recompilé le leur? Je sais que je ne devrais pas envoyer de gros morceaux comme ça, mais ces gros morceaux supplémentaires arrivent de temps en temps et font des ravages.Limite de bloc Memcached

Répondre

4

Cette question sert à être dans le official FAQ

What are some limits in memcached I might hit? (Wayback Machine)

Pour citer:

Les limites simples que vous verrez probablement avec memcache sont la clé et limites de taille de l'article. Les clés sont limitées à 250 caractères. Les données stockées ne peuvent pas dépasser 1 méga-octet de taille, puisque c'est la plus grande taille de la dalle typique «

La FAQ a été révisé et il y a maintenant deux questions distinctes couvrant ceci:.

What is the maxiumum key length? (250 bytes)

La taille maximale d'une clé est de 250 caractères Notez que cette valeur sera moins si vous utilisez des «préfixes» ou des fonctions similaires, puisque le préfixe est collé sur le devant de l'ori clé ginale. Les clés plus courtes sont généralement mieux car elles économisent de la mémoire et utilisent moins de bande passante.

Why are items limited to 1 megabyte in size?

Ahh, c'est une question populaire!

Réponse courte: En raison du fonctionnement de l'algorithme de l'allocateur de mémoire. Réponse longue: Le moteur de stockage mémoire de Memcached (qui sera enfichable/ajusté dans le futur ...), utilise une approche de dalles pour la gestion de la mémoire . La mémoire est divisée en morceaux de dalles de différentes tailles, commençant à un nombre minimum et croissant par une factorielle jusqu'à la valeur la plus grande possible .

-dire la valeur minimale est de 400 octets, et la valeur maximale est de 1 méga-octet , et le factoriel est 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 espace entre celle-ci et la dalle précédente . Ainsi, plus la valeur maximale est grande, moins le stockage en mémoire est efficace. Memcached doit également pré-allouer de la mémoire pour chaque dalle qui existe, donc le réglage d'une factorielle plus petite avec une valeur maximale de nécessitera encore plus de frais généraux.

Il y a une autre raison pour laquelle vous ne voudriez pas faire cela ... Si nous sommes parler d'une page Web et que vous essayez de stocker/charger des valeurs si grand, vous faites probablement Quelque chose ne va pas.A cette taille, il faudra un certain temps pour charger et décompresser la structure de données en mémoire, et votre site ne fonctionnera probablement pas très bien.

Si vous voulez vraiment stocker des éléments plus grand que 1 Mo, vous pouvez recompiler memcached avec une modification slabs.c:POWER_BLOCK valeur ou utiliser malloc inefficace/back-end libre. D'autres suggestions incluent une base de données , MogileFS, etc.