Io uso MongoDB e Tornado. Tuttavia, alcuni post dicono che MongoDB non fa cache.
Non so chi ha detto questo, ma MongoDB ha un modo per memorizzare nella cache le query, infatti utilizza il sistema operativo LRU' mettere in cache dal momento che non fa la gestione della memoria stessa.
Fintanto che il set di lavoro si inserisce nell'LRU senza che il sistema operativo lo debba sfogliare o scambiare costantemente, si consiglia di leggere questa query dalla memoria nella maggior parte dei casi. Quindi, sì, MongoDB può memorizzare nella cache, ma tecnicamente no; il sistema operativo fa.
Attualmente 99 di queste query sono uno spreco di alimentazione del computer.
I meccanismi di caching per risolvere questo tipo di problemi sono gli stessi nella maggior parte dei tecnici, sia di MongoDB che di SQL. Certo, questo è importante solo se si tratta di un problema, probabilmente stai microterminando se me lo chiedi; a meno che tu non abbia traffico Facebook o Google o Youtube.
Il caching soggetto va su un argomento enorme che va da query nella cache sia in pre-aggregate MongoDB/Memcache/Redis ecc per il caching HTML e altre risorse di Internet per fare meno lavoro possibile sul lato server.
Il tuo scenario, personalmente come ho detto, sembra che tu stia pensando male alla potenza del computer sprecato. Anche se dovessi memorizzare questa query in un'altra raccolta/tecnologia, probabilmente useresti la stessa quantità di energia e risorse recuperando il risultato di quella tecnologia piuttosto che se non ti preoccupassi. Tuttavia questa ipotesi si riduce a voi avere il diritto indici, schemi, set-up ecc
vi consiglio di leggere alcuni link su una buona progettazione dello schema e la creazione dell'indice:
Creare un codice HTML statico memorizzato nella cache con qualcosa di simile a Nginx non è preferito, perché voglio rendere ogni volta una pagina personalizzata da Tornado.
Yea penso cercando di preoccuparsi di caching delle query si sono pre-maturo ottimizzando, soprattutto se non si vuole decollare, quello che sarebbe stato il 90% del carico sul server ogni volta; caricando la pagina stessa.
Mi concentrerei sugli schemi e sugli indici e quindi mi preoccupo del caching se ne hai davvero bisogno.
Grazie per la risposta! Comunque penserei che la risposta di Josh mi si addica di più. Ma vorrei ancora esaminare il problema dell'indicizzazione. Grazie :) –
@MKYung Hmm un modulo che prende una nuova query in memoria, crea un nuovo elenco usando i risultati (causando IO) e quindi fa una query su quell'elenco risultando in due raccolte che contengono praticamente gli stessi dati in memoria allo stesso tempo finché l'LRU non ha bisogno di estrarre la memoria ... Non vedo il punto completo di quel modulo ma ok :) – Sammaye
Non sappiamo dalla domanda dell'OP quanto tempo ci vuole per generare ogni pagina in modo che non è possibile dire dalle informazioni fornite se si sta ottimizzando prematuramente o micro-ottimizzando. – frankster