SQL Gateway: TDS による SQL リンクサーバー連携の優位性



リンクサーバーは Microsoft SQL Server の機能で、SQL Server に格納されたデータと他のリンクされたデータソースを組み合わせたフェデレーションクエリを実行できます。リンクサーバーを作成する際、ODBC へのインターフェースとして OLE DB プロバイダーが一般的に推奨されています。しかし、OLE DB を介した SQL Server の接続にはいくつかの重大な問題があり、パフォーマンスやスケーラビリティの面でユーザーが不満を感じることがよくあります。一般的な問題には以下のようなものがあります。

  • OLE DB プロバイダー経由の ODBC クエリが遅い
    元のクエリに条件やフィルタが含まれていても、ODBC はクエリ対象のすべてのテーブルに対して SELECT * を実行します。
  • OLE DB ODBC 構文がスケールしない
    上記の制限を回避するための OPENQUERY を使用すると、すべてのテーブルに対して複雑なサブセレクトが必要になります。
  • サーバーのインストールとセキュリティ
    OLE DB プロバイダーを使用するには、SQL Server インスタンスと同じプロセス内で ODBC ドライバーを実行する必要があり、通常の SQL Server クエリ負荷に影響を与え、安定性やパフォーマンスに問題が生じる可能性があります。

CData SQL Gateway は、SQL リンクサーバー接続のためのはるかに優れたツールです。SQL Gateway を使用すると、SQL Server が ODBC データソース(同一マシン上でも別のマシン上でも)をリンクされた SQL Server インスタンスのように通信できる TDS リモーティングサービスを作成できます。

この記事では、SQL Gateway の TDS リモーティングサービスを使用してリンクサーバーを作成する方が優れている理由について説明します。ここでは、ローカル SQL Server データベース内のすべての注文を、ODBC ドライバーで公開された特定の Salesforce アカウントに関連付ける JOIN クエリを書く場合を例に解説していきます。

パフォーマンス

OLE DB プロバイダーを使用する場合、シンプルな INNER JOIN を送信できます。しかし、この種のリンクサーバーでは、SQL Server はクエリからカラムフィルタや検索条件を ODBC ドライバーに渡さず、代わりに SELECT * クエリを送信します。SQL Server が ODBC テーブルからすべてのデータを要求するため、フィルタや条件はクライアント側でのみ適用されます。これは、ODBC テーブルに多数の行がある場合、特にパフォーマンスの問題を引き起こす可能性があります。

SELECT LocalOrder.ID, ODBC.Name
FROM CData.dbo.[Order] AS LocalOrder
INNER JOIN [SF_ODBC].[CData].[Salesforce].[Account] AS ODBC
  ON LocalOrder.AccountID = ODBC.ID
WHERE ODBC.Name = 'Company A';

複雑なクエリ

OPENQUERY を使用してサブクエリを ODBC ドライバーに送信し、必要なデータのみを取得する、より複雑な INNER JOIN を送信することもできます。この方法はパフォーマンスが向上しますが、シンプルで馴染みのある SQL 構文から逸脱し、データのニーズが複雑になるにつれて、より複雑なサブセレクトを使用する必要があります。

SELECT LocalOrder.ID, ODBC.Name
FROM CData.dbo.[Order] AS LocalOrder
INNER JOIN (SELECT * FROM OPENQUERY(SF_ODBC, "SELECT ID, Name FROM Account WHERE Name = 'Company A'")) AS ODBC
  ON LocalOrder.AccountID = ODBC.ID;

必要なインストール

OLE DB プロバイダーを使用して作成されたリンクサーバーでは、SQL Server インスタンスをホストしている同じサーバーに ODBC ドライバーをインストールする必要があります。

CData SQL Gateway での TDS リモーティングの使用

OLE DB プロバイダーの使用とは対照的に、TDS リモーティングを使用して ODBC データソースのリンクサーバーを作成すると、SQL Server はリンクサーバーをリンクされた SQL Server インスタンスとして扱います。これにより、パフォーマンスを損なうことなく、ローカルにインストールされた ODBC ドライバーでも別のマシン上の ODBC ドライバーでも、シンプルで馴染みのある JOIN クエリを書くことができます。SQL Server はカラムフィルタと検索条件を ODBC ドライバーに渡すため、クエリのパフォーマンスが向上します。TDS リモーティングを使用して作成されたリンクサーバーにより、SQL Server で必要なデータを素早く簡単に取得できます。

SELECT LocalOrder.ID, Linked.Name
FROM CData.dbo.[Order] AS LocalOrder
INNER JOIN [SALESFORCE].[CData Salesforce Sys].[Salesforce].[Account] AS Linked
  ON LocalOrder.AccountID = Linked.ID
WHERE Linked.Name = 'Company A';

SQL Gateway の TDS リモーティングサービスを使用することで、馴染みのある構文と高いパフォーマンスの両方を実現できます。SQL Gateway は現在、Windows を実行しているマシンで利用可能です。SQL Gateway をダウンロードして、CData ODBC データソースからライブデータに双方向でアクセスするための TDS(および MySQL)リモーティングサービスを作成してみてください。ODBC リモーティングにより、ODBC データソースからのデータを使用する場所と方法について比類のない自由度を得ることができます。

詳細情報

いつもどおり、CData のサポートチームがお手伝いいたします。SQL Gateway や CData ODBC ドライバーとの接続についてご質問がございましたら、お気軽にお問い合わせください。リンクサーバーの構成に関する詳細情報は、以下のリソースをご覧ください。

始める準備はできましたか?

CData SQL Gateway の無料トライアルをダウンロード:

今すぐダウンロード