Domanda

Ho un client grasso .NET Winform Click-Once distribuito che parla con tre database, 2 database SQL Server e uno Oracle.

Il primo database di SQL Server, chiamerò il Master. Volevo aggiungere più tabelle e colonne al database Master ma mi è stato detto che non avrei avuto i diritti per farlo, che non era negoziabile. Quindi, ho deciso di aggiungere un nuovo database di SQL Server, che chiamerò il database delle estensioni per memorizzare ulteriori informazioni che vorrei inserire nel Master.

Dato che non avevo i diritti per posizionare il database Extension sullo stesso server del Master, ho creato l'estensione db su un altro server e ho creato un collegamento db dal server del database delle estensioni al server del database del master. Ciò mi ha permesso di eseguire query su due database. Avevo anche un terzo database, uno Oracle, a cui mi collegavo occasionalmente.

Poiché pensavo che la connessione al database Oracle richiedesse l'installazione di driver Oracle che probabilmente non si trovavano sul PC dell'utente finale, ho deciso di fare in modo che il client WinForm chiamasse un servizio Web e il servizio Web avrebbe restituito i risultati. Per motivi di coerenza e poiché il mio istinto mi ha detto che le operazioni di accesso al database devono essere eseguite da un unico posto, ho adottato lo stesso approccio quando il client fat aveva bisogno di parlare con i database di SQL Server, vale a dire, passavano attraverso un servizio web.

Ora mi sto chiedendo se sto subendo un impatto eccessivo sulle prestazioni dovendo prima chiamare il server Web e quindi fare in modo che il server Web chiami il database invece di aprire una connessione sul PC dell'utente nel client fat e connettersi direttamente ai database di SQL Server. Si noti che l'app a cui mi riferisco è un'utilità non ufficiale che necessita dell'accesso a questi tre database di produzione ma che non può essere effettivamente eseguita in produzione, quindi sospetto che le normali pipe ad alta velocità tra il mio server Web di sviluppo e il database di produzione non applicare qui.

Per prestazioni ottimali, la mia app Winform dovrebbe stabilire una connessione direttamente ai database di SQL Server? Quali sono i compromessi?

È ancora vero oggi che sono necessari driver aggiuntivi per connettersi a un database Oracle o tutto ciò nel framework .NET ora e potrei connettermi direttamente anche al database Oracle, se lo volessi?

Inoltre, ho scoperto che l'utilizzo del server di collegamento è più lento della creazione di due connessioni db separate e del pooling dei dati insieme. I miei risultati migliori sono arrivati ??quando ho avviato due query con sincronizzazione e poi ho combinato i dati come se fossero stati restituiti da una query utilizzando un collegamento db. Tuttavia, ciò porta a problemi di manutenzione e mi ha spinto a rimpiangere questo approccio quando avevo bisogno di modificare i join SQL do nei database.

È stato utile?

Soluzione

Mi occupo dello sviluppo di applicazioni aziendali da un paio d'anni e questo mi ha fatto pensare che il livello intermedio (servizi Web nel tuo caso) abbia sempre senso e la connessione diretta al DB da un'interfaccia utente è sempre un NO per me. Non penso che tu abbia preso una decisione sbagliata. A lungo termine avere un livello intermedio ha molto senso. Si noti inoltre che il servizio Web creato può essere utilizzato da diverse applicazioni.

Altri suggerimenti

Non conosco i tuoi requisiti di prestazione ma un servizio web wcf è veloce. Non vedo nulla di male nell'avere un livello intermedio (il tuo servizio web) per l'accesso al database. È anche molto sicuro.

Penso che se hai configurato il server Oracle come server collegato nel tuo server SQL non hai bisogno di driver Oracle separati. Puoi semplicemente utilizzare il tuo server SQL come origine dati.

Prova a creare stored procedure per ottenere risultati più rapidi. Se si utilizza SQL Management Studio è possibile controllare il piano di esecuzione per ottimizzare le procedure memorizzate (configurare gli indici).

Non credo che i servizi Web siano necessari in questo scenario.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top