Domanda

Perché è presente un limite di blocco hardcoded (0,5 mega dopo la compressione) in memcached?Qualcuno ha ricompilato il proprio per migliorarlo?So che non dovrei mandare in giro grossi pezzi del genere, ma questi pezzi extra pesanti mi capitano di tanto in tanto e provocano il caos.

È stato utile?

Soluzione

Questa domanda era nel domande frequenti ufficiali

Quali sono alcuni limiti in memcached che potrei raggiungere?(Macchina del ritorno)

Per citare:

I limiti semplici che probabilmente vedrai con Memcache sono i limiti della chiave e delle dimensioni degli elementi.Le chiavi sono limitate a 250 caratteri.I dati memorizzati non possono superare 1 megabyte di dimensioni, poiché questa è la più grande dimensione della lastra tipica ".

Le FAQ sono state ora riviste e ora ci sono due domande separate che riguardano questo argomento:

Qual è la lunghezza massima della chiave?(250 byte)

La dimensione massima di una chiave è di 250 caratteri.Nota che questo valore sarà inferiore se si utilizzano "prefissi" del client o funzionalità simili, poiché il prefisso viene attaccato sulla parte anteriore della chiave originale.Le chiavi più brevi sono generalmente migliori poiché salvano la memoria e usano meno larghezza di banda.

Perché gli elementi hanno una dimensione limitata a 1 megabyte?

Ahh, questa è una domanda popolare!

Risposta breve:A causa di come funziona l'algoritmo dell'allocatore di memoria.

Risposta lunga:Il motore di memoria di memoria di Memcached (che sarà collegabile/regolato in futuro ...), utilizza un approccio di lastre alla gestione della memoria.La memoria viene suddivisa in pezzi di lastre di dimensioni variabili, a partire da un numero minimo e salire da un fattoriale fino al più grande valore possibile.

Supponiamo che il valore minimo è di 400 byte e il valore massimo è 1 megabyte e il fattoriale è 1,20:

lastra 1 - 400 byte lastra 2 - 480 byte lastra 3 - 576 byte ...eccetera.

Più grande è la lastra, maggiore è un divario tra di essa e la lastra precedente.Quindi maggiore è il valore massimo, meno efficiente è l'archiviazione della memoria.Memcached deve anche pre-allocare un po 'di memoria per ogni lastra che esiste, quindi impostare un fattoriale più piccolo con un valore massimo più grande richiederà ancora più sovraccarico.

Ci sono altri motivi per cui non vorresti farlo...Se stiamo parlando di una pagina web e stai tentando di archiviare/caricare valori così grandi, probabilmente stai facendo qualcosa di sbagliato.A quella dimensione ci vorrà un notevole tempo per caricare e decomprimere la struttura dei dati in memoria e il tuo sito probabilmente non funzionerà molto bene.

Se vuoi davvero archiviare oggetti più grandi di 1 MB, puoi ricompilare Memcached con un modificato slabs.c:POWER_BLOCK Valutare o utilizzare il back -end Malloc/libero inefficiente.Altri suggerimenti includono un database, Mogilefs, ecc.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top