Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Roborock Qrevo Curv 2 Flow: ora lava con un rullo
Qrevo Curv 2 Flow è l'ultima novità di casa Roborock per la pulizia di casa: un robot completo, forte di un sistema di lavaggio dei pavimenti basato su rullo che si estende a seguire il profilo delle pareti abbinato ad un potente motore di aspirazione con doppia spazzola laterale
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite
Abbiamo guidato per diversi giorni la Alpine A290, la prima elettrica del nuovo corso della marca. Non è solo una Renault 5 sotto steroidi, ha una sua identità e vuole farsi guidare
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile
Abbiamo provato a fondo il nuovo Magic 8 Lite di HONOR, e per farlo siamo volati fino a Marrakech , dove abbiamo testato la resistenza di questo smartphone in ogni condizione possibile ed immaginabile. Il risultato? Uno smartphone praticamente indistruttibile e con un'autonomia davvero ottima. Ma c'è molto altro da sapere su Magic 8 Lite, ve lo raccontiamo in questa recensione completa.
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-11-2007, 23:54   #1
Edde
Senior Member
 
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
Voglio un vostro parere

Ciao

La mia applicazione legge un db e ne estrae l'equivalente schema ontologico, secondo alcune regole base che non sto qui a dire, perchè esulano dal discorso che voglio fare.

In due parole, dico che ad ogni tabella, ad ogni colonna, ad ogni foreign key del db, corrisponde una classe/attributo/relazione sull'ontologia. E l'ontologia può, in una fase successiva all'estrazione iniziale, essere arricchita con ulteriori relazioni.

Devo aggiungere una funzionalità fondamentale: la gestione dei cambiamenti.

Questo è lo stato attuale delle cose:

- Estraggo l'ontologia dal DB. Investo diverse ore per modellarla, eliminando classi, attributi e relazioni che non mi servono, aggiungendone degli altri, modificando nomi, label, campi da indicizzare per la ricerca testuale dei dati.
Ad un certo punto un tizio decide di modificare la struttura di una tabella del DB. Magari elimina una colonna, magari la rinomina. O magari aggiunge una nuova tabella.
Ecco, allo stato attuale delle cose io perdo tutto: a meno di non effettuare le relative modifiche "a mano" agendo sui file che mantengono il mapping ontologia/db, sono costretto a ripetere l'estrazione ed a manipolare nuovamente l'ontologia ottenuta. Insomma, non è una cosa pensabile.

Quello che dovrebbe essere:

- In seguito alla modifica del db, faccio partire una procedura che, in maniera totalmente automatica, confronta lo stato attuale dell'ontologia con la nuova struttura del db, ed opera le necessarie modifiche. E' stata eliminata una tabella sul db? Bene, la relativa classe dell'ontologia (e tutto quello che la riguarda) deve essere eliminata. E' stata aggiunta una colonna? Verrà generata in automatico la corrispondente proprietà. E così via...

Tutto funziona a meraviglia (nella mia mente... ancora devo andare sul pratico ) per eliminazione ed aggiunte. Ma non so bene come gestire il cambiamento dei nomi...
Immaginiamo di avere una tabella "Pippo" e di cambiarne il nome in "Pluto".
Da un confronto sui nomi, io mi accorgerei che Pippo non esiste più (e devo pensare che sia stata cancellata) e che c'è una nuova tabella chiamata Pluto. Ovviamente se mi limito a cancellare, sull'ontologia, tutto quello che riguardava Pippo e ad estrarre nuovamente Pluto, rischio di perdere una miriade di informazioni... perchè magari Pippo era stata elaborata sull'ontologia, dove avevo creato diverse nuove relazioni che la riguardavano.
Relazioni che estraendo ex-novo tutto quanto finisco inevitabilmente per perdere.
Quindi non è una strada percorribile.

L'ideale sarebbe riuscire a catturare l'identificatore univoco associato dal DB a tabelle e colonne (diverso dal nome, e non modificabile). In questo caso diventerebbe tutto semplicissimo... ma non sono sicuro che questa informazione esista, ed al momento non ho idea su come reperirla. Se qualcuno sa qualche cosa (uso Oracle e MySQL) si faccia avanti

Ma se questo non fosse possibile... voi come procedereste? Quale può essere a vostro avviso una possibile soluzione per il problema?

L'applicazione è scritta in java, ma non è un'informazione importante: si tratta più che altro di un problema di logica... una volta messa su un'idea sensata, la si può mettere in pratica senza grandi problemi.

Spero di aver stuzzicato la vostra fantasia...

Già se avete letto fino a qui, sento di dovervi ringraziare
Edde è offline   Rispondi citando il messaggio o parte di esso
Old 28-11-2007, 12:17   #2
Edde
Senior Member
 
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
Mentre cercavo info su google mi è venuta un'altra idea... in assenza di questo fantomatico id univoco (indipendente dal nome della tabella), che probabilmente esiste su oracle, ma non sono affatto convinto che esista su mySQL, potrei usare la data di creazione delle tabelle...

Immaginiamo che io abbia una tabella "Pippo" creata alle 15.30 e 12sec del 12/11/07... e all'improvviso tu le cambi nome in "Pluto".

Io non troverei più "Pippo" (e la cosa mi farebbe pensare che sia stata eliminata) e trovo una nuova tabella "Pluto" (e la cosa mi fa pensare che sia stata creata ex-novo.
Ad un certo punto mi rendo conto che "Pluto" ha come data di crezione proprio le 15.30 e 12sec del 12/11/07.... e quindi non può che essere la vecchia "Pippo" che è stata rinominata... che ne dite?

L'unico dubbio che ho, è che per DB creati via script SQL, in realtà molte tabelle diverse (non ho ben idea della rapidità con cui questo avvenga) potrebbero essere create proprio nello stesso secondo... ed in quel caso, se diverse di queste tabelle venissero cancellate e/o rinominate contemporaneamente, la semplice analisi dell'istante di creazione potrebbe non essere più sufficiente... ma magari accostandogli l'analisi della struttura (la tabella A ha 3 colonne Varchar. Varchar, int. La tabella B ne ha 5 int, Varchar, varchar, varchar, long) si potrebbero limitare i danni...

Non so, non ne sono convinto appieno, ma mi sembra una soluzione sensata... che in mancanza di meglio vale la pena approfondire.
Edde è offline   Rispondi citando il messaggio o parte di esso
Old 28-11-2007, 14:50   #3
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Ma a questo punto non basta fare il confronto tra i campi delle due tabelle (come hai detto sopra) e il numero di record presenti?
Se combaciano si tratta della stessa tabella (rinominata) e non di una nuova.


@EDIT: mi sembrava troppo semplice, ok ho detto una nubbiata

Ultima modifica di banryu79 : 28-11-2007 alle 17:12.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-11-2007, 15:25   #4
Edde
Senior Member
 
Iscritto dal: Oct 2001
Città: Prov. di Frosinone
Messaggi: 948
Quote:
Originariamente inviato da banryu79 Guarda i messaggi
Ma a questo punto non basta fare il confronto tra i campi delle due tabelle (come hai detto sopra) e il numero di record presenti?
Se combaciano si tratta della stessa tabella (rinominata) e non di una nuova.
Non è così semplice.
Il confronto è fatto sulla base della struttura, non del numero di record (che tra le altre cose possono cambiare, senza che io ne abbia alcun controllo... l'applicazione funziona solo in lettura e tutto quello che succede sul db gli è invisibile). E la stessa struttura della tabella può cambiare.

Quindi se tu non ti limiti a rinominare "Pippo" in "Pluto", ma rinomini anche qualche colonna, ne aggiungi una, ne elimini due... ecco che la stessa struttura della tabella è cambiata. O magari elimini effettivamente una tabella, e ne crei una strutturalmente identica (ma diversa per utilizzo). Usando solo questo criterio potresti essere portato a pensare che siano la stessa rinominata.
Quindi credo che questo genere di confronto possa essere un supporto per capire se due tabelle, apparentemente diverse, sono invece la stessa con un diverso nome. Ma si tratta di un supporto... poi deve esserci qualche altra cosa (e la data di creazione potrebbe essere un fattore importante) che mi possa guidare.
Edde è offline   Rispondi citando il messaggio o parte di esso
Old 28-11-2007, 18:25   #5
banryu79
Senior Member
 
L'Avatar di banryu79
 
Iscritto dal: Oct 2007
Città: Padova
Messaggi: 4131
Altra idea...

Ho chiesto a due programmatori con cui sto lavorando e mi hanno suggerito che il tuo applicativo potrebbe, ogni volta che si connette in lettura col database, andare a consultare il log del database... Sarebbe un file dove tutte le operazioni fatte sul db vengono registrate.

Quindi riusciresti a vedere se un tabella è stata distrutta oppure se è stata "solo" rinominata, un campo è stato eliminato e ne hanno aggiunti due nuovi ma è sempre lei, in fondo.

Probabilmente questo file di log va interpretato per estrarne i dati; esistono degli strumenti che riescono a leggere file di log e a convertirli/produrre equivalenti istruzioni SQL...

Di più non so, spero almeno sia un'idea
banryu79 è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Roborock Qrevo Curv 2 Flow: ora lava con un rullo Roborock Qrevo Curv 2 Flow: ora lava con un rull...
Alpine A290 alla prova: un'auto bella che ti fa innamorare, con qualche limite Alpine A290 alla prova: un'auto bella che ti fa ...
Recensione HONOR Magic 8 Lite: lo smartphone indistruttibile e instancabile Recensione HONOR Magic 8 Lite: lo smartphone ind...
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
AOC propone un QD-OLED al prezzo di un I...
AGCOM segnalerà la AI Mode di Goo...
L'Estonia porta ChatGPT in classe: firma...
2 nm giapponesi contro TSMC: il piano di...
Questa scopa elettrica Tineco iFLOOR 5 è...
FRITZ!Box 6825 4G sbarca in Italia a 129...
Red Hat presenta Digital Sovereignty Rea...
AMD Zen 6 'Olympic Ridge': sette configu...
Amazon batte Walmart dopo 30 anni: il so...
Digos nel mirino dell'intelligence cines...
Sony non vuole aumentare il prezzo della...
Energia geotermica: la (costosa) rispost...
MG ha già venduto 1 milione di au...
"Something Big Is Happening" —...
Renault chiude il 2025 con una perdita r...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 02:36.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v