Buongiorno e grazie per la risposta. Come scritto nell'articolo, il test da me effettuato utilizzando 10.000 punti e il mio trigger con tre insert ha impiegato circa 176 sec; cambiando trigger ed utilizzando quello suggerito, il tempo di esecuzione è 83 sec, praticamente meno della metà. fantastico.
saluti Il giorno 8 gennaio 2018 21:56, <[email protected]> ha scritto: > On Mon, 8 Jan 2018 18:44:55 +0100, Totò Fiandaca wrote: > >> Salve a tutti, >> ho scoperto che QGIS supporta solo spatialite 4.3, credo sia l'ultima >> versione stabile. >> >> Sto studiando le virtualKNN, un modulo implementato nella spatialite 4.4, >> ed ho scoperto che possono cambiare le sorti di un geodatabase. >> >> > ciao Toto', > > occhio che la prima implementazione della KNN che trovi nella 4.4.0 > era affetta da diversi problemi anche gravi che sono stati risolti > in seguito. > ti consiglio caldamente di utilizzare i sorgenti trunk che trovi sul > repository Fossil (4.5.0-devel) se vuoi essere sicuro di avere un > KNN che funzioni correttamente. > > > Ho scritto un articolo e vorrei sottoporlo all'attenzione di persone >> più esperte di me. >> >> Ho alcuni dubbi sui trigger che ho realizzato, soprattutto su quelli senza >> far uso delle virtualKNN. >> >> > ho testato il tuo trigger, e funziona correttamente. > ci trovo un unico difettuccio: utilizza ben tre UPDATE per > ciascuna INSERT, e ciascuna delle UPDATE lancia una subquery > KNN che e' un'operazione computazionalmente pesantuccia. > ... non mi pare la via migliore per ottenere performances > di buon livello. > quindi ho provato a razionalizzare e semplificare, e sono > arrivato a produrre questo: > > CREATE TRIGGER ins_punti AFTER INSERT ON punti > BEGIN > INSERT OR REPLACE INTO punti (fid, nome_strada, data_ins, distanza, > geom) > SELECT NEW.ROWID, s.nome_strada, DateTime('now'), k.distance, NEW.geom > FROM knn AS k > LEFT JOIN strade AS s ON (k.fid = s.pk_1) > WHERE k.f_table_name = 'strade' > AND ref_geometry = NEW.geom > AND k.max_items = 1; > END > > > a questo punto e' ovvio che serve un secondo Trigger > che entri in azione quando un "punto" gia' inserito > viene spostato in una nuova posizione. > come vedi il secondo Trigger e' praticamente identico > al primo, tranne che per le dichiarazioni nella prima > riga. > > CREATE TRIGGER upd_punti AFTER UPDATE OF geom ON punti > BEGIN > INSERT OR REPLACE INTO punti (fid, nome_strada, data_ins, distanza, > geom) > SELECT NEW.ROWID, s.nome_strada, DateTime('now'), k.distance, NEW.geom > FROM knn AS k > LEFT JOIN strade AS s ON (k.fid = s.pk_1) > WHERE k.f_table_name = 'strade' > AND ref_geometry = NEW.geom > AND k.max_items = 1; > END > > ciao Sandro > _______________________________________________ > [email protected] > http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss > Questa e' una lista di discussione pubblica aperta a tutti. > I messaggi di questa lista non hanno relazione diretta con le posizioni > dell'Associazione GFOSS.it. > 796 iscritti al 28/12/2017 -- *Ing. Salvatore Fiandaca* *mobile*.:+39 327.493.8955 *m*: *[email protected] <[email protected]>* *C.F*.: FNDSVT71E29Z103G *P.IVA*: 06597870820 *membro QGIS Italia - http://qgis.it/ <http://qgis.it/>* *socio GFOSS.it - *http://gfoss.it/ *blog:* * https://pigrecoinfinito.wordpress.com/ <https://pigrecoinfinito.wordpress.com/> FB: Co-admin - https://www.facebook.com/qgis.it/ <https://www.facebook.com/qgis.it/>** <https://www.facebook.com/qgis.it/> * *FB: moderatore - **https://www.facebook.com/groups/GisItalia/ <https://www.facebook.com/groups/GisItalia/>** <https://www.facebook.com/groups/GisItalia/> * *TW: <http://goog_95411464>**https://twitter.com/totofiandaca <https://twitter.com/totofiandaca>* 43°51'0.54"N 10°34'27.62"E - EPSG:4326 “Se la conoscenza deve essere aperta a tutti, perchè mai limitarne l’accesso?” R. Stallman Questo documento, allegati inclusi, contiene informazioni di proprietà di FIANDACA SALVATORE e deve essere utilizzato esclusivamente dal destinatario in relazione alle finalità per le quali è stato ricevuto. E' vietata qualsiasi forma di riproduzione o divulgazione senza l'esplicito consenso di FIANDACA SALVATORE. Qualora fosse stato ricevuto per errore si prega di informare tempestivamente il mittente e distruggere la copia in proprio possesso. _______________________________________________ [email protected] http://lists.gfoss.it/cgi-bin/mailman/listinfo/gfoss Questa e' una lista di discussione pubblica aperta a tutti. I messaggi di questa lista non hanno relazione diretta con le posizioni dell'Associazione GFOSS.it. 796 iscritti al 28/12/2017
