Programmazione.it v6.4
Ciao, per farti riconoscere devi fare il login. Non ti sei ancora iscritto? Che aspetti, registrati adesso!
Info Pubblicità Collabora Autori Sottoscrizioni Preferiti Bozze Scheda personale Privacy Archivio Libri Corsi per principianti Forum
Risolvere i colli di bottiglia in MySQL con MemCached (2/3)
Scritto da Rocco Galati il 23-10-2008 ore 09:11
Intel Parallel Studio XE
Come si è detto nel precedente articolo, il collo di bottiglia che si viene a creare in alcuni tipi di database è dovuto soprattutto al fatto che, per ogni utente, ci si ritrova ad avere numerose query verso la base di dati, per recuperare informazioni sulla sessione, sulla configurazione o su eventuali messaggi di notifica che, in genere, sono presenti in ogni pagina che viene caricata. Per un tipo di sito web, ci si ritrova ad eseguire comandi del genere:
  1. <span style="font-size:1.0em">
  2. SELECT *
  3.  
  4. FROM news
  5.  
  6. WHERE category_id=21 AND status=1
  7.  
  8. ORDER BY publish_date DESC
  9.  
  10. LIMIT 5;
  11. </span>
Ogni volta che questo comando viene eseguito, MySQL effettua, come prima cosa, un parsing sulla query, successivamente decide dove allocare le informazioni, andare a leggere l'indice della tabella, effettuare gli appositi filtri tra le varie righe in base alle variabili category_id e status, poi tenta di ordinare quelle estratte e infine le ritorna al chiamante come risultato.

Sebbene una simile query impieghi solo frazioni di secondo per essere eseguita, quando inizia ad essere richiamata più e più volte, il server inizia a mostrare i primi sintomi di rallentamento. Il fatto ironico, se lo si vuole vedere in questo modo, è che, il più delle volte, questa stessa query ritorna sempre lo stesso risultato.

Questo potrebbe far pensare che se si potesse ricorrere ad un qualche sistema di caching, si potrebbe porre un qualche riparo al fenomeno del collo di bottiglia e rendere il server più stabile e meno lento. A venire in aiuto, in casi del genere, è la soluzione offerta dal MemCached, che permette di utilizzare coppie formate da chiave e valore, dotate di due operazione primarie: get e set. Tutti i dati vengono allocati nella memoria RAM del server permettendo così un accesso notevolmente più veloce, anche rispetto a quello della singola query eseguita sul database.

Una volta installato, MemCached permette di creare un'istanza di se stesso e di allocare una quantità di memoria prescelta.
  1. <span style="font-size:1.0em">
  2. sudo /usr/bin/memcached -m 8 -p 11211 -u nobody -l 127.0.0.1
  3. </span>
Con questo comando, si fa in modo che MemCached si metta in ascolto sulla porta 11211 su localhost usando 8MB di memoria RAM e giri come utente nobody.

Per comunicare a MemCached di settare una nuova coppia di chiave e di valore, si usa un comando abbastanza semplice:
  1. <span style="font-size:1.0em">
  2. set [KEYNAME] [FLAGS] [EXPIRES] [BYTES]rn
  3.  
  4. [BYTES OF DATA]rn
  5. </span>

dove KEYNAME può essere una qualsiasi stringa sino ad un massimo di 250 caratteri, FLAGS è utilizzata, invece, dalle librerie del client per denotare un qualsiasi tipo di caratteristica utile riguardo i dati salvati, EXPIRES è settata a zero se i dati non devono mai essere cancellati, oppure indica un numero intero di secondi per i quali bisogna mantenere valide le informazioni; infine BYTES indica la dimensione dei dati da salvare.
Precedente: Firefox con TraceMonkey batte Chrome
Successiva: Linux Manuale per l'Amministratore di Sistema
Copyright Programmazione.it™ 1999-2013. Alcuni diritti riservati. Testata giornalistica iscritta col n. 569 presso il Tribunale di Milano in data 14/10/2002. Pagina generata in 0.221 secondi.