Sessione di File VS VS Memcache per una Cache in PHP?

Ho una rete sociale

  • La tabella utenti è di circa 60.000 righe
  • La tabella di amici è di circa 1 milione di
    righe (utilizzato per determinare chi è il vostro
    amico)

Ho voglia di fare un friend feed, muro, qualunque cosa si voglia chiamare, mostrerà le cose come utente di stato post (tipo twitter posts), mostrerà un paio di elementi diversi, ma per l’inizio sarà solo essere amico di stato e, forse, post di blog.

Fondamentalmente si vedrà soltanto contenuto pubblicato con un ID utente è nella tua lista di amici.

Ho cercato di trovare il modo migliore e non hanno ottenuto molto lontano, ma qui è la mia ultima idea.

Attualmente per costruire questo feed, devo

  1. Ottenere l’elenco di amico ID sul
    grande amico tabella
  2. Ottenere il flusso di dati da un amico
    ids del risultato di cui sopra
  3. JOIN la tabella utente per ottenere il
    editori immagine URL e il nome utente
  4. Quindi UNIRE i commenti tavolo per ottenere
    commenti su gli elementi del feed

Che è una grande attività per costruire che alimentano

Ho 3 idee finora, questo è dove il vostro aiuto ci può venire in.

Memcache Opzione:

  1. Utilizzare memcache e cache degli utenti
    friendlist come un array quando l’utente
    accede al sito, anche quando l’utente
    approva la richiesta di un nuovo amico per un
    amico per essere aggiunto al vi elenco,
    avrebbe ricostruito c’cache.
  2. Oltre a raggiungere i vostri amici ho potuto salvare i vostri amici immagine URL e il nome utente, questo potrebbe accelerare le cose di nuovo, eliminando questa query quando si costruisce il friend feed.

File di cache Opzione:

  1. Fare lo stesso come la memcache opzione
    ma non salvare i dati come array
    per un file di cache invece di memoria,
    quindi includere questo file di cache in
    pagina.
  2. Non so quale delle due è la migliore
    metodo per prestazioni capisco
    memcache negozi tutto in memoria
    così gli amici che hanno come 20,000
    amici, che potrebbe utilizzare un sacco di
    memoria e un file di cache sarebbe solo
    mettere in memoria quando gli utenti
    ha bisogno se non sbaglio. Anche se ho
    ha fatto il metodo del file, quando un utente
    i registri di fuori del sito, vorrei eliminare
    c’file di cache in modo che la cartella cache
    non sarebbe mai essere troppo grande di file

Cache di sessione Opzione:

  1. Stesso come cache dei file di cui sopra, ho appena realizzato che i dati di sessione viene salvata in un file, quindi non sarebbe che la rendono in grado di essere una cache?

Per favore datemi i vostri pareri o consigli o informazioni si hanno su questo come non ho molta conoscenza di memorizzazione nella cache, ho letto molto, ma a volte altri popoli, idee per aiutare un sacco

  • “i dati di sessione viene salvata in un file”. La vostra dichiarazione di cui sopra è sbagliato. La sessione può essere configurato per memorizzare nel database. Sessione predefinita con il gestore di file.
InformationsquelleAutor JasonDavis | 2009-07-29

 

3 Replies
  1. 32

    Memcache è la vostra scommessa migliore per un sacco di motivi:

    1. È VERAMENTE veloce – Tutto in memoria, ed è altamente ottimizzato per situazioni come la tua (e la memorizzazione nella cache in generale 🙂
    2. Distribuito – Questo significa che se si dispone di più web /app server in esecuzione, che possono accedere tutti la stessa cache
    3. È possibile piscina più server per memcache – Se hai un paio di server che sono relativamente sottoutilizzate (o più dedicato server di cache), si possono mettere tutti insieme in un unico grande cache
    4. Super scalabile (per i motivi citati prima)
    5. Ha grande supporto PHP – I PECL pacchetto per memcache è stato recentemente aggiornato con un sacco di nuove bontà
    6. È anche possibile memorizzare le sessioni utente in memcache – basta impostare nel tuo php.file ini. Questo è molto più veloce rispetto a memorizzare le sessioni di database e permette sessioni di persistere su più host web (se sei in un carico equilibrato)… questo sarà anche dare al vostro sito un po ‘ di prestazioni in più, come non c’è alcuna necessità di colpire il filesystem /database per la sessione di informazioni su ogni richiesta.

    … e molti di più 😉

    Come alcune delle vostre preoccupazioni circa l’ingombro di memoria di singoli elementi memorizzati nella cache hai un paio di opzioni. Il mio pensiero iniziale è quello di dare un vortice, vedere quanto grande questi elementi nella cache davvero ottenere (si possono trovare diverse open-source cose per monitorare l’effettivo utilizzo della cache, come i cactus). Penso che sarà più piccolo di quanto si potrebbe pensare.

    Se non lo sono, vorrei suggerire un ripensamento della strategia di cache per quanto riguarda quello che è in realtà cache, per quanto tempo, etc. Forse si potrebbe costruire il feed da diverse cose che già nella cache (cioè cache singoli dati utente, per poi costruire l’alimentazione per una persona da tutti coloro i singoli elementi nella cache). Ci sono un sacco di buoni articoli là fuori su quel fronte, basta cercare ‘em out 🙂

    • Grazie per il post, molto informativo, anche quando si parla di cactus per misurare l’utilizzo della ram, cosa si intende misurare in generale o di una misura durante l’uso di memcache? Grazie
    • In realtà c’è un cactus plugin per il monitoraggio memcache stesso… vi darà hit / miss, num elementi, etc.
    • grazie non vedo l’ora di provare memcache, anche io ho appena scoperto di facebook limiti di gente a 5.000 amici quindi penso che ho intenzione di fare così e che aiuterà più, allora nulla!
  2. 1

    Predefinito dimensione massima per l’oggetto che è consentito in Memcache è 1MB.

    @jsaondavis :
    “i dati di sessione viene salvata in un file”.

    Tua dichiarazione di cui sopra è sbagliato. La sessione può essere configurato per memorizzare nel database. Sessione predefinita hadndler è il file.

  3. 1

    Redis sarebbe una buona soluzione:

    Qui è un thread sul Redis Vs. Memcached.
    Suona come Redis è dotato di 512 mb di archiviazione, invece, il limite di 1mb… un po ‘ diverso 🙂

    Memcached vs Redis?

Lascia un commento