2008-12-09 3 views
8

Sto cercando di utilizzare MemCached per un'applicazione web che sto sviluppando e dopo aver cercato MemCached nei giorni scorsi, ho trovato una domanda a cui non sono riuscito a trovare risposta.Come collegare insieme il server MemCached?

Come si collega il server Memcached insieme o come si replicano i dati tra il server MemCached?

In aggiunta: Questa funzionalità è controllata dai server o dai client e come?

risposta

5

Ho utilizzato BeITMemcached e in questo si crea un'istanza di MemcacheClient e si impostano i server che si desidera utilizzare, proprio come stringhe.

A quel punto il client stesso determina quali server ha a disposizione per inserire diversi elementi. Non si sa mai quale articolo sarà inserito.

Controllare here to see how the servers handle failover.

La cosa più semplice è avere un meccanismo ripopolare. Nel mio caso, memorizzo diverse centinaia di oggetti in memcache che escono da un database.Posso solo chiamare ripopolare e rimetterli tutti lì dentro. Ogni volta che aggiungo, aggiorno o li cancelli nel database, effettuo le stesse chiamate a memcache.

7

quando si impostano diversi server, le librerie client utilizzano un primo hash per selezionarne una in cui archiviare ogni coppia chiave/dati. ciò significa che non esiste alcuna replica e che ogni client deve utilizzare lo stesso set di server.

pro:

  • quasi zero in testa, lo stoccaggio e la larghezza di banda crescono linearmente.
  • codice server è mantenuto semplice e affidabile.

contro:

  • alcun cambiamento nella serie di server (si va verso il basso, o si aggiunge uno nuovo) invalida improvvisamente (quasi) tutta la cache.
  • devi essere sicuro di usare lo stesso algoritmo su ogni client.

se si ha il controllo sul codice del client, è possibile memorizzare due volte ogni coppia chiave/dati su due server. assicurati di cercare negli stessi posti quando leggi da un altro client.

+0

Sicuramente non è l'unico modo per farlo? –

+1

L'hashing coerente può limitare significativamente il numero di chiavi invalidate dal loro reinghing su un altro server. Questo dipende anche dal numero di server che hai. –

1

suona come si desidera avere cache che possono far fronte con le macchine il riavvio ecc Se è così ...

In molti casi (supponendo che non si sta scrivendo Facebook) un RDMS è abbastanza veloce per il caching. Basta creare una tabella con una chiave e una colonna BLOB. Se il server RDBS ha abbastanza ram, tutti i dati saranno nella RAM e salvati su disco in modo da consentire il recupero.

Ricordare che questo potrebbe essere un server separato (s) dal server di database principale.

Se si desidera ottenere più fantasia e si utilizza un RDMS di fascia alta, potrebbe essere possibile impostare notifiche di modifica sulle query utilizzate per creare i "dati memorizzati nella cache" che eliminano le righe non aggiornate dalla cache.

Qualcuno è possibile impostare i trigger per cancellare le righe non valide dalla cache, tuttavia questo può essere molto complesso molto rapidamente.

0

Memcached non fornisce la proprietà di replica. Per fare ciò, è necessario aggiungere il server all'elenco dei server client memcached e quindi premere il DB per i dati da memorizzare in quel particolare server.

0

Si dovrebbe seriamente considerare CouchBase. Utilizza il protocollo memcached, offre quasi la stessa velocità e fornisce la replica automatica che stai cercando. Persiste anche sul disco, quindi la cache non sarà mai fredda.

+0

Hai esperienza pratica? Ho incontrato molti problemi strani con Couchbase. A partire dai problemi di bootstrap fino agli arresti anomali e cosa no. Ho cercato di aggravare quei problemi, senza successo. Spero che la tua esperienza sia stata migliore. – Till

+0

Ho esperienza di produzione con Membase, ma non con Couchbase. La mia comprensione è che Couchbase è ora Membase + CouchDB. –

+0

Sì, ho provato anche Membase. Non ho nemmeno usato Couchbase. – Till