Domanda

Sto avendo un momento difficile gestire la memorizzazione e l'accesso di un grande insieme di dati all'interno di un'applicazione Ruby on Rails. Qui è la mia domanda in poche parole: sto eseguendo l'algoritmo di Dijkstra in quanto riguarda una rete stradale, e quindi la visualizzazione dei nodi che le visite utilizzando l'API di Google Maps. Se si utilizza una dati aperto della rete stradale per costruire il grafico iterazione più di due file txt fornite nel collegamento, ma sto avendo difficoltà memorizzare questi dati nella mia app.

Ho l'impressione che un grande insieme di dati come questo non è un oggetto ActiveRecord - non ho bisogno di modificare il contenuto di tali dati, preferirei essere in grado di accedervi e la cache localmente in un hash di eseguire ruby ??metodi su esso. Ho provato un paio di cose, ma io sono in esecuzione nei guai.

  1. Ho pensato che sarebbe rendere più senso per analizzare i file txt e memorizzare il grafico in formato yml. Vorrei quindi essere in grado di caricare il grafico in un DB come dati di semi, e afferrare il grafico utilizzando Node.all, o qualcosa del genere. Purtroppo, il file yml diventa troppo grande per le rotaie da gestire. Esecuzione di un Rake fa sì che il sistema di funzionare al 100% per l'infinito ...

  2. Poi ho pensato, bene dato che non ho bisogno di modificare i dati, posso solo creare il grafico ogni volta che l'applicazione carica come inizio della sua "inizializzazione." Ma io non so esattamente dove mettere questo codice, ho bisogno di eseguire alcuni metodi, o almeno un blocco di dati. E poi conservarlo in una sorta di variabile globale / sessione che posso accedere a tutti i controllori / metodi. Non voglio a passare questo grande insieme di dati in giro, basta avere accesso ad esso da qualsiasi luogo.

  3. Questo è il modo Attualmente sto facendo, ma non è solo accettabile. Sto l'analisi del file di testo che crea il grafico su un azione di controllo, e sperando che si ottiene calcolando prima che il server volte su.

Idealmente, vorrei conservare il grafico in una banca dati che ho potuto afferrare l'intero contenuto da utilizzare a livello locale. O almeno richiedono solo l'analisi dei dati una volta come i carichi applicativi e quindi vorrei essere in grado di accedervi da diversi punti di vista di pagina, ecc .. Mi sento come questo sarebbe il più efficace, ma io sono in esecuzione in ostacoli al momento.

Tutte le idee?

È stato utile?

Soluzione

Sei sulla strada giusta. Ci sono un paio di modi per farlo. Uno è, nella classe del modello, al di fuori di qualsiasi metodo , impostare le costanti come questi esempi:

MY_MAP = Hash[ActiveRecord::Base.connection.select_all('SELECT thingone, thingtwo from table').map{|one| [one['thingone'], one['thingtwo']]}]
RAW_DATA = `cat the_file`  # However you read and parse your file
CA = State.find_by_name 'California'
NY = State.find_by_name 'New York'

Si otterrà eseguito una volta in un'applicazione di produzione: quando la classe del modello viene caricato. Un'altra opzione: fare questo l'inizializzazione in un altro file di configurazione di inizializzazione o. Vedere la directory config / inizializzatori.

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