3つのデータベース(2つのSQL Serverデータベースと1つのOracleデータベース)と通信する.NET WinformClick-Once-deployedファットクライアントがあります。
最初のSQLServerデータベースであるマスターを呼び出します。マスターデータベースにさらにテーブルと列を追加したかったのですが、それを行う権利は与えられない、交渉できないと言われました。そこで、新しいSQL Serverデータベースを追加することにしました。これを拡張データベースと呼び、マスターに配置したい追加情報を格納します。
拡張データベースをマスターと同じサーバーに配置する権限がなかったため、別のサーバーに拡張データベースを作成し、拡張データベースサーバーからマスターのデータベースサーバーへのデータベースリンクを作成しました。これにより、2つのデータベースにまたがるクエリを実行できました。また、時々接続する3番目のデータベースであるOracleデータベースもありました。
Oracleデータベースに接続するには、エンドユーザーのPCにインストールされていない可能性が高いOracleドライバーをインストールする必要があると考えたため、WinFormクライアントにWebサービスを呼び出させ、Webサービスが結果を返すことにしました。一貫性を保つため、またデータベースアクセス操作は1つの場所から実行する必要があると内臓から言われたため、ファットクライアントがSQL Serverデータベースと通信する必要がある場合、つまりWebサービスを経由する場合も同じアプローチを採用しました。
ファットクライアントでユーザーのPCの接続を開いて直接接続する代わりに、最初にWebサーバーを呼び出してから、Webサーバーにデータベースを呼び出させることで、パフォーマンスが大幅に低下するかどうか疑問に思っています。 SQLServerデータベース。私が参照しているアプリは、これら3つの本番データベースにアクセスする必要があるが、実際に本番環境で実行することは許可されていない非公式のユーティリティであるため、開発Webサーバーと本番データベースの間の通常の高速パイプが疑われます。ここでは適用しないでください。
最高のパフォーマンスを得るには、WinformアプリでSQL Serverデータベースへの直接接続を確立する必要がありますか?トレードオフは何ですか?
追加のドライバーがOracleデータベースに接続する必要があるというのは今日でも本当ですか、それともすべてが.NET Frameworkにあり、必要に応じてOracleデータベースにも直接接続できますか?
また、リンクサーバーの使用は、2つの別々のデータベース接続を作成してデータを一緒にプールするよりも遅いことがわかりました。私の最良の結果は、2つの非同期クエリを開始し、dbリンクを使用して1つのクエリによって返されたかのようにデータを結合したときに得られました。ただし、これはメンテナンスの問題につながり、データベース間でSQL do結合を変更する必要があるときに、このアプローチを後悔することになりました。