Domanda

Bene, credo di avere un dubbio molto di base qui:

Sto sviluppando un'applicazione sul GAE (Java) e l'esecuzione di una query per l'archivio dati che restituisce un sacco di entità, quindi ho bisogno di memorizzare nella cache esso. Stavo usando memcache e stava lavorando molto, ma se tengo l'elenco delle entità in una variabile statica, l'intera richiesta va come due volte più veloce rispetto all'utilizzo di memcache. Penso che sia perché non sono deserializzazione le entità per tutto il tempo.

Quale sarebbe l'inconveniente di utilizzare una variabile statica invece su memcache? Non so se ci potrebbero essere diversi casi di mia applicazione nella nuvola, e quindi diverse istanze della mia variabile statica?

L'elenco degli enti che sto cercando di cache sono i migliori (maggiore punteggio) i messaggi della scorsa settimana. Prendo quella lista e scelgo 5 casuale post e mostrare loro in un paio di pagine.

Grazie per l'aiuto!

È stato utile?

Soluzione

App Engine scale con la creazione di nuove istanze della propria applicazione, come il numero di utenti che colpiscono aumenta. Come ha detto drudru, diversi utenti potrebbero essere servite da diverse istanze. In generale, memcache è il posto più veloce per memorizzare qualcosa che si desidera essere coerente a livello globale. Tuttavia, nel tuo caso ci può essere qualche margine di miglioramento.

parlare si dispone di un elenco di posti e si sceglie a caso 5 per mostrare agli utenti. Ha importanza se 2 diversi utenti vedono un diverso insieme di 5? Se stai scegliendo quelli casuali in ogni caso, forse non importa. Poi si potrebbe memorizzare l'elenco completo di tutti i messaggi in memcache, e tirare 5 quelli casuali fuori memcache e memorizzarli in una variabile statica.

In secondo luogo, che cosa stai memcaching, e come stai tirando fuori? State immagazzinando un intero gruppo di pieni messaggi in memcache, tutti ottenendo, quindi scegliendo 5? Forse si può solo scaricare l'elenco dei posti, scegliere 5, e solo ottenere il 5 avete bisogno? Se si pensa che è la deserializzazione che si sta rallentando, questo potrebbe aiutare. Stai facendo alcuna elaborazione sui posti dopo che li ottenete? Se è così, potessero i risultati di tale elaborazione essere memorizzati nella cache?

Altri suggerimenti

Non si può contare su variabili statiche (o qualsiasi altra cosa in memoria JVM) di essere in giro quando la richiesta successiva colpisce, perché Google è libero di avviare e arrestare le macchine virtuali quando ne hanno voglia. Dagli sguardi di esso, sembrano preferire di avviare JVM supplementari invece di thread aggiuntivi nella stessa JVM, che aggrava il problema.

Ma, si dovrebbe essere in grado di utilizzare le variabili statiche come strato di cache, a patto di avere un modo per caricare i dati da qualche altra parte, se è andato via.

Vorrei anche non cercare di andare in mare con l'utilizzo di memoria là, ci deve essere una quota della quantità di memoria è possibile utilizzare.

Si, non v'è alcuna garanzia che l'istanza sarà lo stesso per i vari utenti su Internet. Si potrebbe finire costantemente la lettura di questo in una statica nel peggiore dei casi. Il memcache ha una maggiore garanzia di essere disponibili. Vorrei solo usare il memcache, e la vostra applicazione non dovrebbe avere problemi di scala in futuro.

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