none
Salvare dati in una session o database RRS feed

  • Domanda

  • Ciao a tutti
    sto sviluppando un portale per la prenotazione online di hotel.
    Dato che la ricerca potrebbe produrre molti risultati(quindi devo gestire l'impaginazione) e l'utente potrebbe applicare alcuni filtri(come stelle, fascia prezzo ecc), meglio salvare i risultati della ricerca in tabelle del database o salvare tutto in una session?

    Secondo me, se salvo tutto in una session è più veloce recuperare i dati perchè accedo solo una volta al database, ma non so se posso salvare grandi quantità di dati. Se salvo tutto nel database posso salvare grandi quantità di dati, ma il svantaggio è che ogni volta che l'utente cambia pagina o filtro devo interrogare il db e poi non so come gestire l'eliminazione di vecchi dati presenti nel db.

    A livello codice i dati verranno salvati in List annidate tra loro.

    Cosa mi consigliate di utilizzare?

    Grazie mille

    lunedì 19 maggio 2014 09:50

Risposte

  • Ciao SviPla,

    You wrote on 20/05/2014 :

    Grazie mille
    Chiaro e preciso :-)

    Possibili soluzioni?

    rifai la query, il db è molto bravo a fare il suo lavoro, guarda cosa fa qualsiasi motore di ricerca, salva i parametri della ricerca in query string e quando cambi pagina non fa altro che fare una nuova query cambiando solo le informazioni sulla paginazione.

    Fine, semplice efficace e con poche s*ghe mentali :-)

    Se poi diventerai Booking.com allroa avrai un sacco di problemi ma sarà il bello di essere diventati Booking.com :-P

    .m


    blog @ //milestone.topics.it
    • Contrassegnato come risposta SviPla martedì 20 maggio 2014 08:54
    martedì 20 maggio 2014 07:59

Tutte le risposte

  • Sicuramente salvare i risultati della query all'interno del DB non è la soluzione migliore.

    Dovresti al limite salvare i parametri/filtri necessari ad eseguire la query.

    Questi dati li puoi salvare anche nella session ma devi stare attento al caso in cui hai dei server in load balancing.

    Inoltre per evitare un eccessivo dispendio di risorse ti consiglio utilizzare la paginazione anche sulla query che utilizzi per estrarre i dati.

    Ciao


    Luca Congiu (congiuluc)
    Personal Blog: blog.dotnetcode.it

    Se hai trovato la soluzione all'interno del Forum, ricorda di segnalare il post come risposta, in alternativa puoi postare la soluzione da te adottata. Questo aiuterà altri utenti, che hanno riscontrato la stessa problematica, ad identificare rapidamente la soluzione/risposta corretta.

    lunedì 19 maggio 2014 10:40
    Moderatore
  • Ciao Luca
    Grazie per l'aiuto, scusami, ma alcune cose non mi sono chiare.

    Perchè dovrei salvare i parametri/filtri necessari per la query? Ma intendi salvare nella query?

    Se non utilizzo le session, cosa posso utilizzare?

    Cosa intendi con "Inoltre per evitare un eccessivo dispendio di risorse ti consiglio utilizzare la paginazione anche sulla query che utilizzi per estrarre i dati."?

    Io pensavo di leggere solo una volta i dati dal db, salvare tutto in una struttura di list annidate ed utilizzare Linq per filtrare i dati oppure salvare tutto in un datatable, applicare i filtri e ricostruirmi ogni volta i list annidati.

    Grazie

    lunedì 19 maggio 2014 11:23
  • Ciao SviPla,

    You wrote on 19/05/2014 :

    Io pensavo di leggere solo una volta i dati dal db, salvare tutto in una struttura di list annidate ed utilizzare Linq per filtrare i dati oppure salvare tutto in un datatable, applicare i filtri e ricostruirmi ogni volta i list annidati.

    ...e al secondo utente che si coollega il server web muore.

    .m


    blog @ //milestone.topics.it
    lunedì 19 maggio 2014 12:06
  • ????
    lunedì 19 maggio 2014 13:41
  • Ciao SviPla,

    You wrote on 19/05/2014 :

    ????

    le sessioni sono il male assoluto, fine, usare una sessione per qualsiasi cosa è il miglior modo per garantirsi che la tua applicazione web non scalerà mai verso un numerom decente di utenti.
    Le sessioni andrebbero tolte e tagliati "i ditini" ai dev che le usano.

    Una sessione ammazza memoria per un tempo T, predefinito e di default per 20 minuti, con lo scopo di far credere al server web che l'utente sia connesso, ma http è un protocollo disconnesso e un mondo connesso come quello che le sessioni cercano di farci credere è un ossimoro on-top-of http.

    Perché? perché il primo utente si collega, una sessione viene creata e vivrà nella memoria del tuo web server per 20 minuti, un secondo utente si collega e un'altra sessione, un terzo utente si collega e via così, dopo 100 utenti hai per 20 minuti la memoria del web server satura, ma sono ancora li davanti? non luo puoi sapere, a prescindere per 20 minuti la tua RAM è andata, fine.

    La cosa più bella? sono 100 utenti o sono sempre lo stesso che ha aperto il browaser, fatto una query, chiuso il browser, riaperto...fatta una nuova query...e via dicendo?

    Non lo puoi sapere, nello scenario che descrivi un singolo utente potrebbe ammazzrti la macchina solo aprendom e chiudendo il browser.

    Le sessioni sono il male assoluto :-)

    .m


    blog @ //milestone.topics.it
    martedì 20 maggio 2014 05:57
  • Grazie mille
    Chiaro e preciso :-)

    Possibili soluzioni?

    martedì 20 maggio 2014 07:56
  • Ciao SviPla,

    You wrote on 20/05/2014 :

    Grazie mille
    Chiaro e preciso :-)

    Possibili soluzioni?

    rifai la query, il db è molto bravo a fare il suo lavoro, guarda cosa fa qualsiasi motore di ricerca, salva i parametri della ricerca in query string e quando cambi pagina non fa altro che fare una nuova query cambiando solo le informazioni sulla paginazione.

    Fine, semplice efficace e con poche s*ghe mentali :-)

    Se poi diventerai Booking.com allroa avrai un sacco di problemi ma sarà il bello di essere diventati Booking.com :-P

    .m


    blog @ //milestone.topics.it
    • Contrassegnato come risposta SviPla martedì 20 maggio 2014 08:54
    martedì 20 maggio 2014 07:59
  • Grazie

    Ancora una domanda: supponiamo che utilizzi un gridview o un qualsiasi altro controllo per l'impaginazione. Se ogni volta carico solo i dati da visualizzare nella pagina, come fa il controllo ha capire che in realtà quella che sto visualizzando è, per esempio, pagina 2/100? Se non sbaglio, un gridview si crea il numero di pagine in base ai dati che passo.

    Grazie ancora

    martedì 20 maggio 2014 09:05
  • Ciao SviPla,

    You wrote on 20/05/2014 :

    Ancora una domanda: supponiamo che utilizzi un gridview o un qualsiasi altro controllo per l'impaginazione. Se ogni volta carico solo i dati da visualizzare nella pagina, come fa il controllo ha capire che in realtà quella che sto visualizzando è, per esempio, pagina 2/100? Se non sbaglio, un gridview si crea il numero di pagine in base ai dati che passo.

    mai usata una GridView :-)
    https://www.google.it/search?q=asp.net+gridview+paging&oq=asp.net+gridview+&aqs=chrome.2.69i57j0l5.5448j0j7&sourceid=chrome&es_sm=93&ie=UTF-8

    Dovrebbe però fare più o meno tutto da sola

    .m


    blog @ //milestone.topics.it
    mercoledì 21 maggio 2014 05:10
  • Certo che ho usato una gridview, ma utilizzando una gridview cmq ogni volta devo leggere da db tutte i risultati della ricerca e passare al gridview. Per velocizzare pensavo di leggere dal db solo la pagina richiesta.

    Cmq, grazie

    giovedì 22 maggio 2014 09:27
  • Ciao SviPla,

    You wrote on 22/05/2014 :

    Certo che ho usato una gridview

    perdonami era: io non ho mai usato una GridView :-)

    ma utilizzando una gridview cmq ogni volta devo leggere da db tutte i risultati della ricerca e passare al gridview.

    Comunque a me non sembra proprio:
    http://www.codeproject.com/Articles/16238/GridView-Custom-Paging

    .m


    blog @ //milestone.topics.it
    venerdì 23 maggio 2014 03:47
  • Grazie mille per tutto l'aiuto Mauro
    Ho le idee più chiare ora

    Ancora grazie

    venerdì 23 maggio 2014 07:34