# Session condivise?

**URL:** <https://www.ruby-forum.com/t/session-condivise/114237>\
**Category:** IT\
**Created:** [September 10, 2007, 11:08am UTC](https://www.ruby-forum.com/t/session-condivise/114237 "2007-09-10T11:08:20Z")\
**Posts on this page:** 8\
**Page:** 1

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 11:08am UTC](https://www.ruby-forum.com/t/session-condivise/114237/1 "2007-09-10T11:08:20Z")

</div>

In Rails ho dei dati che vengono estratti da un database e che mi  
servono ad ogni richiesta di pagina, quindi dovrei salvarli in sessione.  
Ora, visto che questi dati sono comuni a tutto l’applicativo, mi sembra  
stupido duplicarli in tutte le sessioni degli utenti.  
Piuttosto si dovrebbe tenerli in un unico punto affinche lo stesso dato  
sia accessibile a tutti.  
Come fare?  
Esiste qualcosa tipo le Application di .NET?  
tks

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 11:23am UTC](https://www.ruby-forum.com/t/session-condivise/114237/2 "2007-09-10T11:23:22Z")

</div>

Potresti provare a serializzare l’oggetto che contiene i tuoi dati  
con marshal e salvarlo sul disco con

mio\_oggetto = Marshal.dump nome\_oggetto  
open (‘file\_su\_disco’, ‘w’){ |f| f \<\< mio\_oggetto }

poi potrai leggere da file il tuo oggetto  
mio\_oggetto = Marshal.load open(‘file\_su\_disco’)

Il giorno 10/set/07, alle ore 11:08, Giuliano U. ha scritto:

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 11:32am UTC](https://www.ruby-forum.com/t/session-condivise/114237/3 "2007-09-10T11:32:23Z")

</div>

> Potresti provare a serializzare l’oggetto che contiene i tuoi dati \> con marshal e salvarlo sul disco con  
> si, potrei, ma comunque ad ogni caricamento di una pagina dovrei fare un  
> accesso al disco, quindi tanto varrebbe salvare il risultato della  
> complessa query che faccio ogni volta, su un campo di una tabella sul db  
> pe run accesso diretto ai risultati…

no, io voglio proprio mantenerli in memoria…

siccome non ho chiaro come Rails venga gestito internamente, non sò come  
fare…

con una variabile globale potrebbe funzionare?

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 1:15pm UTC](https://www.ruby-forum.com/t/session-condivise/114237/4 "2007-09-10T13:15:47Z")

</div>

Prima di cercare una soluzione tecnica, potresti dirci questi dati con  
quale frequenza cambiano e perché ti serve averli uguali per ogni utente.  
Devi farci sopra qualche elaborazione particolare?  
i miei dati non cambiano finchè un amministratore di sistema non modifica  
le impostazioni dell’applicazione… ovvero quasi mai, e devo farci  
sopra delle elaborazioni per filtrare la visibilità o l’editabilità di  
alcune parti dell’applicazione.  
se la query che le estrae non fosse pesantuccia, le prenderei ad ogni  
richiesta… ma lo è 🙂

Io sto affrontando un problema anologo in questo momento e avevo  
intenzione di recuperare questi dati “on-demand” mettendo in cache il  
partial contenente il risultato

i miei dati non sono da visuaòlizzare… ma ci devo lavorare sopra, quindi  
per me non è possibile…

Come fai ad aggiornare la variabile globale all’interno dei vari  
processi?

e che ne so? infatti non era questo che volevo fare… io intendevo non  
una variabile globale all’interno di un processo, ma proprio globale per  
i processi… esistono? mah!!!

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 1:06pm UTC](https://www.ruby-forum.com/t/session-condivise/114237/5 "2007-09-10T13:06:45Z")

</div>

Prima di cercare una soluzione tecnica, potresti dirci questi dati con  
quale  
frequenza cambiano e perché ti serve averli uguali per ogni utente. Devi  
farci sopra qualche elaborazione particolare?

Io sto affrontando un problema anologo in questo momento e avevo  
intenzione  
di recuperare questi dati “on-demand” mettendo in cache il partial  
contenente il risultato. In questo modo è possibile gestirne completamente  
il ciclo di vita utilizzando i meccanismi standard di rails.

Scrivere su file non mi sembra una scelta proponibile perché idealmente vi  
sono più richieste contemporanee e sarebbe necessario un meccanismo per  
gestire le scritture contemporanee.

Anche tenerli in memoria in una variabile globale non la ritengo una  
soluzione valida perché aggiunge complessità in fase di deploy: come fai ad  
aggiornare la variabile globale all’interno dei vari processi?

Magari qualche esperto di rails ci può aiutare :D.

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 4:00pm UTC](https://www.ruby-forum.com/t/session-condivise/114237/6 "2007-09-10T16:00:35Z")

</div>

Il 10/09/07, Giuliano U. [removed\_email\_address@domain.invalid](mailto:removed_email_address@domain.invalid) ha scritto:

> i miei dati non sono da visuaòlizzare… ma ci devo lavorare sopra, quindi  
> per me non è possibile…

uhm… ho capito devi filtrare dei contenuti… e cachare questi contenuti  
è  
una cattiva idea? Le performance in generale miglioreranno!

> Come fai ad aggiornare la variabile globale all’interno dei vari processi?
> 
> e che ne so? infatti non era questo che volevo fare… io intendevo non  
> una variabile globale all’interno di un processo, ma proprio globale per i  
> processi… esistono? mah!!!

Allora, l’unico modo che hai per fare questo è avere un processo esterno  
che  
mantiene i dati in memoria e te li passa, ma ricorda che in questo caso  
è  
necessario aprire una socket ecc. e quindi anche questa soluzione  
aggiunge  
overhead. Sicuramente meno che fare una query estesa sul db, ma di più che  
aprire un file. Quindi probabilmente la soluzione migliore è fare il dump  
su  
file. Anche se, architetturalmente parlando, non è una bella soluzione.

Piuttosto, hai provato a migliorare le perfomance della query  
utilizzando  
indici e simili? Oppure sono solo una grande quantità di dati? Talvolta è  
possibile migliorare le performance semplicemente ristrutturando il  
database  
per semplificare determinate operazioni.

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 4:57pm UTC](https://www.ruby-forum.com/t/session-condivise/114237/7 "2007-09-10T16:57:48Z")

</div>

mmm… a quanto ho capito mi conviene salvarmi i risultati  
dell’elaborazione su un campo db apposito e fare una singola  
interrogazione veloce ad ogni richiesta…

se non è possibile altrimenti…

---

<div class="post-metadata">

**Author:** ![Giuliano\_U](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/g/ecd19e/32.png) [@Giuliano\_U](https://www.ruby-forum.com/u/Giuliano_U)\
**Post date:** [September 10, 2007, 1:18pm UTC](https://www.ruby-forum.com/t/session-condivise/114237/8 "2007-09-10T13:18:47Z")

</div>

scusate ma mi si è sminkiata la formatazione… il contenuto della mia  
mail era:

> Prima di cercare una soluzione tecnica, potresti dirci questi dati con quale frequenza cambiano e perché ti serve averli uguali per ogni utente. Devi farci sopra qualche elaborazione particolare?

i miei dati non cambiano finchè un amministratore di sistema non modifica  
le impostazioni dell’applicazione… ovvero quasi mai, e devo farci  
sopra delle elaborazioni per filtrare la visibilità o l’editabilità di  
alcune parti dell’applicazione. se la query che le estrae non fosse  
pesantuccia, le prenderei ad ogni richiesta… ma lo è 🙂

> Io sto affrontando un problema anologo in questo momento e avevo intenzione di recuperare questi dati “on-demand” mettendo in cache il partial contenente il risultato\>

i miei dati non sono da visuaòlizzare… ma ci devo lavorare sopra, quindi  
per me non è possibile…

> Come fai ad aggiornare la variabile globale all’interno dei vari processi?

e che ne so? infatti non era questo che volevo fare… io intendevo non  
una variabile globale all’interno di un processo, ma proprio globale per  
i processi… esistono? mah!!!
