Creazione di un database sperimentale

2

Questa domanda riguarda i database ma preferisco pubblicarla qui e non in dba.stackexchange . Il motivo è che ho preoccupazioni con l'applicazione e la progettazione del database. I programmatori possono assistere meglio in questo senso.

La mia applicazione .NET di quattro anni utilizza server di database MySQL 5.1 come back-end. Il database funziona bene. Non ci sono problemi di prestazioni per farci preoccupare. Ma voglio provare funzionalità di database avanzate come Partizionamento, Replica e Cluster. Non ho mai usato questi concetti prima e posso sicuramente provare queste funzionalità su un database esistente, ma ho altri piani.

Voglio utilizzare IBM DB2 express-C come database sperimentale. I record di MySQL devono essere sincronizzati nel database DB2 e voglio utilizzare il database DB2 per i report nella mia applicazione.

C'è uno strumento gratuito per sincronizzare i due database? Devo utilizzare due stringhe di connessione, la prima che coinvolge MySQL per Inserimenti / Aggiornamenti / Elimina e la seconda che coinvolge DB2 per i report?

Questo tipo di approccio folle viene utilizzato nel mondo reale in determinati scenari?

    
posta RPK 26.07.2011 - 18:04
fonte

2 risposte

1

Questo è uno scenario comune nel mondo del database. È bello vedere qualcuno che vuole impararlo. Le aziende inviano i dati avanti e indietro su sistemi diversi tutto il tempo (sia i loro sistemi che i sistemi dei loro clienti e i loro sistemi di venditori). Non riesco a parlare con strumenti gratuiti per farlo perché vivo nel mondo di SQL Server e SSIS è lo strumento che usiamo fornito con SQL Server. Ma quello che vuoi cercare sono gli strumenti ETL. Gli strumenti per questo sono là fuori, semplicemente non so quali sono i migliori. ETL sta per Extract, Transform, Load, che sono i passaggi nel processo di spostamento dei dati da un database all'altro.

Permettetemi di descrivere alcuni dei problemi a cui dovete pensare quando si inviano i dati avanti e indietro tra due sistemi. Il primo e più importante è che è altamente improbabile che i due database abbiano una struttura simile. I campi che sono riutilizzati in uno potrebbero non esistere nell'altro. I tipi di dati saranno diversi. Le regole aziendali saranno diverse. I valori di ricerca saranno diversi.

Dovrai gestire cose come la tabella Stati che esisterà in un db e tutti gli indirizzi devono usare un codice di stato USA a 2 cifre valido nel campo Stato richiesto, ma i dati provengono da una tabella che consente qualsiasi valore ( o anche senza valore) da inserire in un campo di stato nella tabella degli indirizzi, quindi ha cose come Virginia, Ohoi (anziché Ohio), CA, ON (stato canadese dell'Ontario), e Sconosciuto, nonché valori nulli. Devi capire cosa fare con i record che hanno dati che non si adattano al database di ricezione.

Devi pensare a come abbinare i record esistenti a quelli già presenti nel tuo database.

Un'altra cosa a cui devi pensare è come gestire i dati che vengono uniti da un database a causa della ricerca e della correzione dei duplicati. Hai bisogno di avere modo di assicurarti che venga unito nell'altro database?

Devi pensare alle prestazioni. Questo può essere un processo intenso che richiede molte risorse di entrambi i database. È necessario pensare in termini di come posso minimizzare l'impatto sugli altri utenti del database.

La maggior parte degli strumenti ETL consente di inviare direttamente all'altro database (in genere se si trovano nella stessa rete) e altre volte è necessario creare uno o più file da inviare a un clinet in un'altra posizione. Quindi devi pensare a quale dovrebbe essere la struttura dei dati inviati. Dovresti avere un file denormalizzato o diversi file che riescono a ridefinire il modo in cui il tuo database viene normalizzato. Il mittente dovrebbe pulire i dati alle specifiche delle ricevute o viceversa o entrambi dovrebbero fare un po 'di lavaggio. Esistono requisiti legali (ad esempio, è possibile inviare i dati dei pazienti da un ufficio docotprs ad un ospedale).

C'è molto di più, ETL è una specialità complessa, ma penso che sia sufficiente per iniziare a pensare alla pianificazione che devi fare una volta trovato il tuo strumento.

    
risposta data 26.07.2011 - 19:09
fonte
2

Bene, non hai solo bisogno di due diverse stringhe di connessione, hai anche bisogno di connettori di database completamente diversi. E poi il divertimento inizia per davvero.

Molto probabilmente DB2 utilizza una sintassi SQL diversa, quindi è necessario controllare tutte le query selezionate se effettivamente producono lo stesso output. Inoltre: ogni produttore di database ha alcune funzionalità personalizzate integrate nel loro dialetto di SQL. Le cose che funzionano con MySQL non sono automaticamente garantite per funzionare con DB2. Il che significa che il solo trasferimento o replica dei dati nel database DB2 potrebbe essere un lavoro importante di per sé.

Non ho incontrato questo approccio in nessuno scenario del mondo reale, ma poi, non conosco tutti gli scenari del mondo reale che esistono là fuori.

Dall'esperienza consiglierei di evitare questo tipo di cose a meno che tu non abbia una ragione molto strong per percorrere quella strada. Sei molto probabilmente in un mondo di dolore per un guadagno molto piccolo.

    
risposta data 26.07.2011 - 18:24
fonte

Leggi altre domande sui tag