Grazie mille per la condivisione

saluti

Il giorno mar 30 apr 2024 alle ore 15:22 Francesco Fiermonte via
QGIS-it-user <qgis-it-user@lists.osgeo.org> ha scritto:

> Ciao,
>
> ho avuto una bella e piacevole chiaccherata con *Alessandro Furieri* (che
> legge in CCN e che ringrazio davvero moltissimo).
>
> Penso sia utile condividere con la lista un "estratto" dei punti che sono
> emersi da questo sostanzioso scambio di e-mail (grazie, Sandro, per rendere
> disponibile il Tuo pensiero).
>
> Per la leggibilità, il testo è stato "adattato", intervenendo anche sulla
> formattazione.
>
> --------------------------------------------------------------
>
> *WAL *= Write-Ahead Logging mentre *SHM *= Shared Memory
>
> e' tutta roba interna di *SQLite*. la spiegazione completa la puoi
> leggere qua:
>
> https://www.sqlite.org/wal.html
>
> -----------------------------------------------
>
> ***** *GPKG-WAL*: Questo file contiene il LOG DI SCRITTURA ANTICIPATA
> (WAL) per la connessione corrente. In pratica, registra lo stato
> transazionale del database tra le operazioni di COMMIT o ROLLBACK. In altre
> parole, tiene traccia dei cambiamenti apportati al database durante una
> sessione di lavoro. *****
>
> invece nel modo *classic *per gli stessi identici compiti viene creato un
> file con suffisso *-journal* che pero' ha una struttura del tutto
> differente e che lavora in tutt'altro modo.
>
> nota che in entrambi i casi questi logfiles devono stare nella solita
> cartella dove si trova il DB.
>
> andiamo un po' a vedere cosa succede in caso di disastro, p.es. dopo una
> caduta di tensione o un crash di sistema.
>
> quando prima o poi andrai ad aprire quel DB che e' rimasto azzoppato,
> SQLite si accorgera' dalla presenza del file di log che ci sono operazioni
> pendenti da sanare. comincia quindi a sbobinarsi a ritroso tutto il log, ed
> alla fine il tuo DB tornera' immacolato e pulito come se nulla fosse
> accaduto.
>
> ovviamente avrai perso tutte le operazioni che non erano ancora arrivate
> ad un COMMIT, ma almeno ritorni al punto da cui eri partito.
>
> -----------------------------------------------
>
> ***** *GPKG-SHM*: Questo file gestisce l’accesso concorrente al database
> tramite un indice verso il file WAL. In sostanza, aiuta a garantire che più
> utenti possano accedere al database contemporaneamente senza causare
> conflitti. *****
> corretto: una *shared memory* e' solo un blocco di memoria che puo'
> essere condiviso tra processi diversi, che cosi' possono scambiarsi
> direttamente le informazioni. insomma, visto che non e' possibile avere una
> vera architettura *client-server* si cerca di aggirare il problema
> facendo cooperare i vari processi passando per la *shared memory*.
>
> -----------------------------------------------
>
> in pratica sono dei meccanismi abbastanza sofisticati che servono proprio
> per dare a SQLite un certo livello di multiutenza. che non sara' comunque
> mai perfetto visto che l'architettura generale non e' intesa per quello, ma
> sicuramente sono un bel passo avanti rispetto al vecchio modo tradizionale
> con cui lavora SQLite.
>
> personalmente li uso pochissimo, perche' ogni rosa ha le sue spine, che in
> questo caso significa che se puta caso qualcosa va storto fare ripartire
> SQLite senza perdere dati protrebbe anche essere una gran bella rogna.
>
> inoltre potrebbero nascere dei conflitti se piu' processi operano sul
> medesimo DB, alcuni in modo *WAL* ed altri in modo *classico*.
>
> se *QGIS* ha deciso di optare per il* WAL* mode dovrebbe significare che
> sono abbastanza sicuri di essere riusciti a mettere in piedi un ragionevole
> sistema di multiutenza.
>
> nota bene che comunque *SQLite* non ama affatto gli accessi remoti via
> rete, per cui in pratica tutti i processi concorrenti dovrebbero girare
> sempre sulla solita macchina dove e' installato di DB ... che ovviamente
> limita pesantemente la condivisione dei dati tra i vari processi.
>
> (...)
>
> quei files temporanei vengono creati autonomamente da *SQLite*, ed
> ovviamente devono stare nella stessa cartella dove si trova il DB quindi tu
> non vedrai mai nulla se lavori su di una macchina diversa da quella dove
> sta il DB, e' consequenziale.
>
> il vero problema sta tutto in questa idea di accedere ad un DB che e'
> fisicamente collocato in un altro PC tramite condivisione di rete.
>
> per quanto mi risulta i ragazzi di *SQLite *non si stancano mai di
> ripetere che e' una ricetta garantita ed assicurata per disastri che
> potrebbero anche arrivare alla "frittura" complete del DB e di tutti i dati
> che contiene.
>
> funziona e funziona bene, ma solo fin quando sia il DB che tutti i
> processi che accedono a quel DB stanno tutti su di un'unica macchina,
> altrimenti e' come giocare alla roulette russa, a volte va liscia ma a
> volte invece no :-P
>
> giusto per entrare un pelo nel tecnico; un buon sistema operativo e' in
> grado di assicurare un rigoroso sincronismo delle operazioni. se qualcosa
> dovesse andare male (crash, caduta di corrente etc) avrai sempre un solido
> punto di ripristino da cui ripartire. magari scoprirai che avrai perso le
> ultimissime operazioni ancora non concluse, ma tutto il resto verra'
> correttamente ripristinato.
>
> ma se nel mezzo ci infili una rete con tutti i suoi tempi di latenza non
> c'e' piu' modo di garantire la sincronicita' complessiva, perche' in caso
> di crash qualche informazione assolutamente critica potrebbe essere ancora
> in transito sulla rete e dunque andra' persa per sempre in modo del tutto
> non recuperabile.
>
> conclusione: se per te lavorare in parallelo sul solito DB da piu'
> postazioni client e' assolutamente indispensabile passare a *PostGIS*,
> che avendo una vera architettura client/server ti garantisce una ripartenza
> certa anche nei casi piu' incresciosi. *SQLite *e' meraviglioso, ma non
> e' progettato per questi ambienti, ed e' inutile tentare di tirarlo per la
> coda.
>
> (...)
>
> ****** *SQLITE non è pensato per gestire l'editing concorrente* *****
>
> assolutamente no.
>
> ci sono diversi trucchetti per tentare di aggirare il problema, ma per
> l'appunto sono semplicemente dei trucchetti (e pure rischiosi). per gli
> accessi concorrenti c'e' *PostGIS *che e' fatto apposta.
>
>
> ***** *Ma allora, i due piccoli files ( "GPKG-WAL" & "GPKG-SHM") sono
> davvero necessari? E se si, a cosa servono? ******
>
> e' semplicemente una scelta degli sviluppatori; se tu apri il DB *SQLite *in
> un certo modo lui attiva diligentemente il *WAL *mode, altrimenti lavora
> nel modo classico ... ma questo ovviamente non significa affatto che poi le
> cose funzioneranno come ci si aspetta.
>
> questa e' una responsabilita' che cade interamente sulle spalle degli
> sviluppatori e dei loro utenti. che magari dovrebbero essere ben
> consapevoli del fatto che il *WAL mode *su rete ha i suoi lati oscuri e
> pure pericolosi.
>
> giusto per capirsi; io personalmente ho usato con buon successo il *WAL *mode
> su un *WEB server *dove avevo un unico processo abilitato in scrittura e
> millantamila processi che accedevano solo in lettura ... cosi' funziona di
> sicuro e funziona pure bene, ma se si pretende di scrivere simultaneamente
> da parte di piu' utenti si sta sicuramente andando in cerca di guai.
>
> ****** Visto che è bene operare in regime di "single-user" (ciascuno
> gestisce, in locale, il proprio database), i due files temporanei sono
> "inutili". Ma, se così fosse, perché mantenerli? Sbaglio a pensare?******
>
> dipende ... io personalmente uso sempre i buoni vecchi *journal-files *e
> mi sono sempre trovato benissimo.
>
> altri sviluppatori potrebbero avere idee o esigenze diverse in cui magari
> il *WAL *e' piu' performante. dipende dai casi (e pure dai gusti
> personali).
>
> ****** Usando un GPKG in QGIS i due files TMP vengono creati perché - in
> linea teorica - il DB supporta l'editing concorrente ma è meglio non usarlo
> a meno che dati e processi non risiedano tutti sulla stessa macchina. ******
>
>
> *P.S.* giusto per la curiosita' di saperlo. nel mio lavoro (...) sui *server
> *uso molto spesso dei *DB SQLite* belli ciccioni da* diversi GB* ;-)
>
> volano come i missili e ci accedono per la consultazione via *WEB *un
> casino di utenti ... ma sono tutti *in sola lettura* ;-)
>
> i dati "freschi" entrano sempre tramite *Postgres*, e solo a cose fatte
> vado ad estrarre i db di lavoro *SQLite * che alimentano i servizi *WEB *di
> consultazione.
>
> ... e detto per inciso, uno* SQLite *ben ottimizzato rispetto a *Postgres
> *e' come vedere una moto super sport che gareggia con un TIR :-P
>
> ma il nostro ciclo di lavoro e' molto particolare, la programmazione dei
> servizi cambia solo 1-2 volte al mese, per il resto del tempo tutto resta
> invariato.
>
> per l'appunto, dipende da caso a caso.
>
> --------------------------------------------------------------
> ---
> Un Caro Saluto,
> Francesco
> <https://www.dist.polito.it/personale/scheda/(nominativo)/francesco.fiermonte>
> --------------------------------------------------------
> This message and its attachments are private and confidential. If you have
> received this message in error, please notify the sender and remove it and
> its attachments from your system.
> -----------------------------------------
> e.o.f.
>
> _______________________________________________
> QGIS-it-user mailing list
> QGIS-it-user@lists.osgeo.org
> https://lists.osgeo.org/mailman/listinfo/qgis-it-user
>


-- 
*Salvatore Fiandaca*

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.
_______________________________________________
QGIS-it-user mailing list
QGIS-it-user@lists.osgeo.org
https://lists.osgeo.org/mailman/listinfo/qgis-it-user

Rispondere a