It is currently 8 June 2025, 20:20 Advanced search

funzione preload per query di lookup

Questo forum è nato con lo scopo di raccogliere le proposte di modifica di Instant Developer e discuterne insieme.

funzione preload per query di lookup

Postby theguru » 4 June 2016, 18:46

Avevo già segnalato la cosa, la ripropongo.
La base del problema è semplice: 1000 richieste al db, ognuna per chiedere un singolo record, impiegano MOLTO più tempo di un unica richiesta per chiederne 1000.
Quindi, se io ho un tabella di 1000 clienti e una tabella di 1000 ordini, e nel pannello ordini vi è un campo di lookup per mostrare il cliente padre, assisto a queste tempistiche (semplificate, ovviamente)

prima chiamata del pannello ordini:
- 200ms per caricare la tabella ordini
- 50ms x 40 lookup query = 2000ms per decodificare i nomi dei clienti (ho preso 40 come valore ragionevole per un pannello ben popolato)
TOTALE: 2200ms

seconda chiamata al pannello ordini
- 200ms per caricare tabella ordini
- 0ms per la decodifica, è già tutto in cache
TOTALE: 200ms

Ora, se io potessi precaricare la cache dei clienti, avrei (ragionevolmente) queste performance:
prima chiamata del pannello ordini:
- 200ms per caricare la cache dei clienti
- 200ms per caricare la tabella ordini
TOTALE: 400ms

Detto tutto ciò, si potrebbe avere una funzione proprio di questo tipo?
Non credo sia eccessivamente complessa da implementare

Ho provato anche qualche soluzione fai da te, tipo caricare una collection di clienti prima, ma non sembra avere effetto.
User avatar
theguru
 
Posts: 972
Joined: 29 January 2014, 13:01

Re: funzione preload per query di lookup

Postby r.bianco » 6 June 2016, 7:09

precaricare la cache


Interessante.
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4979
Joined: 8 November 2010, 16:46

Re: funzione preload per query di lookup

Postby d.arrivabene » 7 June 2016, 7:54

Non puoi estrarre i nomi dei clienti direttamente nella masterquery tramite una join piuttosto che fare una lookup separata? In questo caso i tempi dovrebbero essere inferiori a quelli che scrivi. Puoi verificare?
User avatar
d.arrivabene
Pro Gamma
Pro Gamma
 
Posts: 1232
Joined: 5 October 2011, 8:36
Location: Bologna

Re: funzione preload per query di lookup

Postby theguru » 7 June 2016, 11:42

La risposta sarà sicuramente si, anche senza fare la controprova pratica.
Il punto però è diverso: il sistema delle lookup query è molto utilizzato nei progetti INDE; è davvero comodo, proprio perché mi permette di basare le mie classi su singole tabelle piuttosto che join o view, e decodificare i valori quando necessario.
Una ipotetica funzione "preload_cache" ne migliorerebbe di molto le prestazioni, indipendentemente dal fatto che posso decidere di usare un altro sistema.

Comunque ti chiedo, per esserne sicuro (seguo il mio esempio di prima):
se io ho una classe Ordini (basata su tabella ORDINI), ed in determinato pannello voglio mostrare il nome cliente decodificato (dalla classe Clienti), sono obbligato a fare la join nella master query della classe Ordini, o posso "jointare" le due classi nella master query di pannello?
User avatar
theguru
 
Posts: 972
Joined: 29 January 2014, 13:01

Re: funzione preload per query di lookup

Postby r.bianco » 7 June 2016, 11:52

Inoltre, i campi di smartlookup possono essere utilizzati per effettuare ricerche sofisticate.
only work and no play makes jack a dull boy
r.bianco
 
Posts: 4979
Joined: 8 November 2010, 16:46

Re: funzione preload per query di lookup

Postby d.pierangeli » 9 June 2016, 9:26

Però c'è il problema che correresti il rischio di vedere dei dati non aggiornati se qualcuno li ha modificati dopo che hai popolato la cache.

Ho creato l'attività NPQ02802 per tenere conto di questa conversazione. Quando verrà valutata, potrai seguirne l'andamento con Instant Developer Roadmap.
User avatar
d.pierangeli
Pro Gamma
Pro Gamma
 
Posts: 8129
Joined: 30 September 2010, 15:35

Re: funzione preload per query di lookup

Postby theguru » 15 June 2016, 14:18

d.pierangeli wrote:Però c'è il problema che correresti il rischio di vedere dei dati non aggiornati se qualcuno li ha modificati dopo che hai popolato la cache


Beh, si, ma questo credo sia un problema legato al fatto di utilizzare la cache, non al fatto di popolarla con un unica richiesta di N record, piuttosto che con N richieste di un record singolo.
In generale ritengo che la cache documentale sia un ottima soluzione per migliorare le prestazioni, ma allo stato attuale abbia MOLTI parametri di miglioramento, come l'aggiornamento in scrittura, etc..
User avatar
theguru
 
Posts: 972
Joined: 29 January 2014, 13:01


Return to Proposte di modifica

Who is online

Users browsing this forum: No registered users and 9 guests