Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa
Marvel's Wolverine porta Logan in un'avventura inedita, violenta e fortemente narrativa, costruita attorno alla sua natura di combattente e al difficile rapporto con il proprio passato. Insomniac Games punta su combattimenti spettacolari, progressione e personalizzazione, inserendo l'azione in un mondo segnato dalla persecuzione dei mutanti. Un viaggio intenso, che alterna mattanza, esplorazione e momenti sorprendentemente emotivi.
DJI Romo 2: tante novità lo rendono un robot completo
DJI Romo 2: tante novità lo rendono un robot completo
Romo 2 è la seconda generazione di robot lavapavimenti di DJI, un modello che si caratterizza per la precisione nel sistema di navigazione e per il funzionamento particolarmente silenzioso. Con le modifiche introdotte in questa seconda versione, e un posizionamento di prezzo più allineato alla concorrenza, rappresenta una valida alternativa sul mercato delle soluzioni di pulizia domestica
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED
Il primo Sony con retroilluminazione True RGB alla prova del banco di misura e dei contenuti: luminanza enorme, colori accurati in HDR e un antiriflesso molto efficace. I limiti sono due sole HDMI 2.1 e il blooming fuori asse
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 27-11-2007, 22: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, 11: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, 13: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 16:12.
banryu79 è offline   Rispondi citando il messaggio o parte di esso
Old 28-11-2007, 14: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, 17: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


Marvel's Wolverine, la recensione: Logan torna protagonista in un'avventura brutale e intensa Marvel's Wolverine, la recensione: Logan torna p...
DJI Romo 2: tante novità lo rendono un robot completo DJI Romo 2: tante novità lo rendono un ro...
Sony Bravia 9 II: il True RGB alla prova, dove l'LCD sfida l'OLED Sony Bravia 9 II: il True RGB alla prova, dove l...
Geely EX5, un mese al volante: il SUV elettrico cinese che ci ha sorpreso (quasi) senza riserve Geely EX5, un mese al volante: il SUV elettrico ...
Mova Z70 Ultra Roller Complete: motore potente, rullo di lavaggio e l'IA a guidare Mova Z70 Ultra Roller Complete: motore potente, ...
La prima missione orbitale del razzo spa...
Servizi in streaming sempre più c...
Anteprima della Leapmotor B03X: inizia l...
Anthropic accusa la Cina: Claude utilizz...
I satelliti Rassvet (Starlink russo) di ...
Un agente IA ha risolto un problema su W...
Cina: la CMSA potrebbe cambiare parte de...
68 mensilità di bonus per i dipen...
Rocket Lab ha fatto ricorso contro la de...
Nutanix rende disponibile Azure Virtual ...
Il padrino del deep learning avverte: gl...
Il finto avviso "iPhone Storage is Full"...
Dietrofront in Cina, addio touchscreen p...
Un piccolo accessorio trasforma lo smart...
Dopo 370 anni il Cyphral Distich non è p...
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: 21:14.


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