2016-02-17 13 views
5

ho il seguente codice nel elisir:Come creare una variabile globale in elisir modulo

def get_trackerid(imei) do 
    client = get_new_client() 
    {:ok, result} = :cqerl.run_query(client, "SELECT * FROM trackers_by_imei where imei = \'#{imei}\';") 
    row = :cqerl.all_rows(result) 
end 

Ora, ora molte funzioni chiamano funzione get_trackerid e ogni volta che la funzione viene chiamata, una chiamata al database è fatto.

C'è un modo per scrivere una funzione in elixir tale che il risultato sia memorizzato in una variabile locale. Quindi, quando viene richiesta la tracker successiva per lo stesso imei, posso ottenere i dati dalla variabile locale stessa.

Penso che non ci sia alcun concetto di variabile globale in elisir, quindi non è un'opzione, giusto?

risposta

4

Hai alcune opzioni per salvare lo stato in Elisir.

Se questo metodo fa parte di un modulo che esegue un GenServer, è possibile utilizzare il parametro state per memorizzare i valori nella cache.

È inoltre possibile utilizzare uno ets table per memorizzare i valori nella cache. Questo funzionerebbe sia all'interno che all'esterno di un GenServer.

5

Quello che stai chiedendo è chiamato "memoization". Dico questo se ti interessa Google e vedi se riesci a trovare di più sull'argomento.

Questo è un grande post di blog discutendo una tecnica Memoizzazione in Elixir: https://web.archive.org/web/20161116091132/http://ineverfinishanyth.in/2014/01/20/memoization-in-elixir

TL; DR

costruire una cache e controllare la cache quando si tenta di fare il vostro calcolo per vedere se la risposta è già lì. Nel caso di questo post sul blog, costruisce un archivio di valori-chiave come una cache, ma ovviamente quale tipo di cache che dovresti costruire dipenderà molto dai dati che stai memorizzando nella cache.

+0

Il collegamento fornito è rotto. – tuned

+1

@tunedconsulting Ho modificato il link in modo che punti alla versione della cache di google della pagina web. –

+1

il nuovo collegamento è qui http://ineverfinishanyth.in/2014/01/20/memoization-in-elixir (: – tuned

Problemi correlati