Esportare dati in file share o chiamare un servizio Web per gestire l'esportazione

0

Desidero ricevere opinioni / best practice per il seguente scenario:

Ho un'applicazione A (app C # da un fornitore che non ha un database accessibile, ha un db sqllite ma non abbiamo accesso ad esso) che ha bisogno di esportare piccole quantità di dati nell'applicazione B (personalizzato App homegrown C # con un backend SQL Server) ogni volta che si fa clic su un pulsante specifico sull'applicazione b. Entrambe le applicazioni verranno eseguite su una rete interna (intranet).

Opzioni a cui ho pensato.

  1. Esportare i dati come file di testo dall'applicazione A alla condivisione file e quindi leggere / importare quel file di testo dall'applicazione B
  2. Chiamare un servizio Web di riposo (chiamiamolo applicazione C) dall'applicazione A passando i dati come JSON al servizio Web Rest e quindi il servizio Web Rest caricherà i dati nel database dall'applicazione B.
  3. Chiamare un servizio Web Rest (chiamiamolo applicazione C) dall'applicazione A passando i dati come JSON al servizio Web Rest e quindi il servizio Web Rest sposterà i dati su una coda (IBM ESB) e un'altra applicazione (applicazione d) leggerà dalla coda e caricherà i dati nel database dall'applicazione B.

Sto cercando di trovare l'opzione migliore tenendo conto di molti punti / best practice (scalabilità, gestione degli errori, semplicità, manutenzione, ecc.)

Grazie per i tuoi pensieri / suggerimenti.

    
posta TuSabesTuSabes 24.08.2016 - 01:22
fonte

1 risposta

0

Considerando le informazioni aggiuntive nei tuoi commenti, opterei per una soluzione come questa:

Poiché le tue applicazioni sono entrambe in esecuzione su una rete Intranet, presumo che la disponibilità del tuo servizio sia più o meno garantita.

App A - Esecuzione locale, utilizzata da un utente per dispositivo

Non sono completamente sicuro di come ottenere i dati dall'App A poiché hai menzionato che non hai accesso diretto a sqlite-db. Presumo che ci sia un modo per accedere ai dati usando qualcosa come un'API, ..?

Dal momento che l'app A memorizza comunque i dati in un db sqlite, non andrei a esportare in file flat. A mio avviso, sarai in grado di estrarre i dati dal Db dell'App A ogni volta che lo desideri. In caso di errore durante l'invio dei dati, è possibile rieseguire nuovamente l'esportazione senza perdere dati in modo specifico.

Ogni volta che viene avviata l'esportazione (attivata da App A saving?), invia i dati direttamente al tuo servizio. Verifica se il servizio ha ricevuto l'intero set di dati utilizzando un checksum o qualcosa di simile.

Cercherò di ridurre al minimo la funzionalità e la complessità del tuo codice sui dispositivi che eseguono l'App A poiché la distribuzione su una quantità incerta o crescente di dispositivi può essere dispendiosa in termini di tempo e di sfide.

App B

L'app B non ha bisogno di conoscere il processo di esportazione / importazione, il servizio o l'app A.

servizio

Dovrebbe accettare i dati inviati da qualsiasi applicazione conoscendo il servizio e avendo il permesso di farlo.

Il servizio accetta i dati e li elabora in uno dei seguenti modi:

Opzione 1

Scrive direttamente i dati ricevuti nel database di App B e conferma la ricezione. La scrittura diretta dei dati potrebbe portare ad alcuni problemi come l'utente X carica i dati relativi al paziente 1, il servizio riceve un nuovo set di dati, l'utente Y riceve successivamente i dati del paziente 1s. Ora avranno uno stato diverso di dati. Dovresti affrontarlo, ad esempio, notificando a ciascun cliente i dati aggiornati e ricaricando tutte le istanze di App B che accedono ai dati caricati prima che il servizio li aggiornasse.

Un altro motivo per non scrivere dati direttamente nel database di App B potrebbe essere la quantità di dispositivi e dati inviati che devono essere scritti dal servizio che blocca il database di App B. mentre lo fa.

Opzione 2

Salva i dati ricevuti nel proprio database, memorizzandoli temporaneamente. Nel caso in cui i dati importati non siano necessari immediatamente, è possibile recuperare i dati nel database di App B ogni notte o così. Ciò garantirebbe agli utenti che utilizzano App B di lavorare con lo stesso stato di dati per tutto il giorno, anche se non utilizzerebbero dati aggiornati.

Opzione 3

Nel caso in cui la quantità di dati inviati al servizio diventi troppo grande per procedere immediatamente, è possibile allegare una coda all'opzione 2 per evitare un servizio bloccato.

Conclusione

Poiché ci sono state alcune ambiguità come l'importanza per i dati nell'app B di essere aggiornati, opterei per l'opzione di servizio 2.

    
risposta data 26.08.2016 - 10:43
fonte

Leggi altre domande sui tag