[Linuxtrent] Re: Implementazione di un recordset persistente lato server per applicazioni AJAX

  • From: Guido Brugnara <gdo@xxxxxxxxx>
  • To: linuxtrent@xxxxxxxxxxxxx
  • Date: Mon, 21 Aug 2006 15:21:11 +0200

ant9000@xxxxxxxxxx ha scritto:

Ciao Guido,
vuoi un meccanismo di accesso ai dati veloce, che non mostri mai record vecchi
e che se la RAM non basta usi il disco... a sentimento, io direi che dovresti
poter ottenere il miglior risultato cercando di spremere al massimo il DB del
gestionale e senza implementare un ulteriore livello di caching.

Tu immagino ti sia fatto un'idea delle limitazioni nell'uso reale che avresti
usando direttamente il DB di appoggio del tuo gestionale; per inquadrare meglio
il problema, puoi raccontarci perché hai scartato questa soluzione?

Ant9000
Inizialmente pensavo di utilizzare direttamente "cursor" del postgres, ma ho desistito in quanto non potevo aggiungere i record inseriti o togliere i record cancellati e comunque i record vanno "letti" sequenzialmente e quindi poco utile come funzionalità.

Ho quindi utilizzato due tabelle di appoggio "recordset" e "recordset_rows" dove nella prima ci sono i dati del singolo recordset persistente mentre in recordset_rows salvo le PK con la relativa posizione.

Recuperando le PK solo a zone evito di metterci dei secondi interminabili quando ho tabelle grandi (dell'ordine delle centinaia di migliaia o addirittura di minuti con tabelle di milioni di righe) ed il "rovescio della medaglia" è accettabile se confrontato con i benefici (tempi di pochissimi secondi alla prima pagina; pochissimi decimi di secondo per le successive).

Delle prove con una tabella "limite" di 1.000.000 di record ho ottenuto che il count(*) richiede circa 3 secondi, che sommati ai circa 15" per copiare il lotto di 1000 record sono ancora tempi accettabili, considerato che la navigazione dei 999 record adiacenti successivi richiederà solo una frazione di secondo.
Un lotto di 100 record richiede comunque 14" e quindi con tabelle molto grandi conviene tenere lotti di dimensioni di quell'ordine di grandezza.


ciao
Guido

--
Per iscriversi  (o disiscriversi), basta spedire un  messaggio con OGGETTO
"subscribe" (o "unsubscribe") a mailto:linuxtrent-request@xxxxxxxxxxxxx


Other related posts: