説明

表形式データストリームプロトコルの行におけるヌル列の圧縮

ヌル列を有する行の効率的な伝送を可能にすることにより、表形式データストリーム(TDS)プロトコルを向上させるシステムおよび方法。識別コンポーネントは、送信される列を受信側(例えばクライアント)に示すために、行の先頭の位置に置くことができるビットマップを利用する。従って、ヌルでない列とヌルである列の区別することによって、ヌルでない列の送信が追随して、伝送資源を効果的に利用することができる。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、クライアントとサーバシステムとの間の要求および応答の転送のために利用されるメッセージ指向のアプリケーションレベルプロトコルである、表形式データストリーム(Tabular Data Stream:TDS)プロトコルに関する。
【背景技術】
【0002】
コンピュータ技術(例えば、マイクロプロセッサ速度、記憶容量、データ転送帯域幅、ソフトウェア機能性など)における進歩は、様々な産業において増大するコンピュータの利用に一般に寄与している。その結果、コンピュータシステムの構成は劇的に変化している。あらゆるユーザが自分の業務を持ち込むような、単一の大型コンピュータによる大型コンピュータセンターの概念は、時代遅れである。同様に、DBMS(Data Base Management System:データベース管理システム)は、集中型メインフレーム環境から、非集中または分散環境にずいぶん前に推移している。例えば、1つ以上のPC「クライアント」システムは、ネットワークを介して、1つ以上のサーバベースのデータベースシステム(構造化照会言語−SQLデータベースサーバ)に接続することができる。コンピュータネットワークの既知の例は、コンピュータが地理的に相互に接近している(例えば同じ建物における)LAN(Local−Area Network)や、コンピュータが遠く離れており電話回線または電波によって接続されるWAN(Wide−Area Network)を含む。
【0003】
多くの場合、ネットワークは、ネットワーク上のコンピュータを「クライアント」または「サーバ」として分類するように、「クライアント/サーバ」ネットワークとして構成される。サーバは、ストレージ(例えばディスクドライブ)、プリンタ、モデムまたは同種のものなどのような共有資源の管理専用の有力なコンピュータまたはプロセスである。サーバは、サーバタスクを除いて事実上他のタスクを実行しないという意味で、多くの場合専用である。例えば、データベースサーバは、様々なクライアントからのデータベース照会(query)を処理するようにデータベース情報を管理する。クライアントサーバのアーキテクチャのクライアント部分は、典型的には、動作を実行するためにサーバに依存するPCまたはワークステーションを含む。典型的には、クライアントは、特定のデータベース情報を返すような、いくつかの動作を実行するためにサーバに依存する「クライアントアプリケーション」を稼働する。当該ネットワークを通して、様々な要求・応答プロトコルは、所定の一連のルールに従って情報を移送する。
【0004】
そのような要求・応答プロトコルの1つは、クライアントとサーバシステムとの間の要求および応答の転送のために利用されるメッセージ指向のアプリケーションレベルプロトコルである、表形式データストリーム(Tabular Data Stream:TDS)プロトコルである。TDSは、文字列型(char)、可変長文字列型(vchar)、バイナリ型(blob)、日付時間型、タイムスタンプ型、ベンダ固有データ型および同種のものなどのような、従来のSQLデータ型のためのネイティブサポートを含むことができる。TDSを利用するシステムにおいて、サーバ(例えばデータベース)と永続的な接続を確立することは、クライアント(例えばユーザまたはアプリケーションプログラム)にとって典型的である。適切にサポートされたトランスポート/セッションレベルプロトコルを介して接続の成功したハンドシェークおよび確立に際して、完了応答がサーバからクライアントに伝わった後、完了メッセージがクライアントからサーバに転送される。
【発明の概要】
【発明が解決しようとする課題】
【0005】
本発明の目的とするところは、サーバからクライアントへの照会結果(query result)の伝送の間のビット数を削減するために、ヌル列を指定する識別コンポーネントを介して、行の効率的な伝送を可能にすることによりTDSプロトコルを向上させることにある。
【課題を解決するための手段】
【0006】
下記では、本明細書のいくつかの態様の基本的な理解を提供するために、本明細書の簡易化された発明の概要を提示する。この発明の概要は、本明細書の他方面にわたる概要ではない。本明細書の主要または重要な構成要素を識別しないし、本明細書の範囲を規定するものでもない。その唯一の目的は、後で提示する「発明を実施するための形態」への前置きとして、簡易化された形態で本明細書のいくつかの概念を提示することにある。
【0007】
本発明は、サーバからクライアントへの照会結果(query result)の伝送の間のビット数を削減するために、ヌル列を指定する識別コンポーネントを介して、行の効率的な伝送を可能にすることによりTDSプロトコルを向上させるものである。当該識別コンポーネントは、送信される列を受信側(例えば、クライアント)に示すために、行の先頭の位置に置くことができるビットマップを利用する。従って、ヌルでない列とヌルである列を区別し、続いてヌルでない列を送信することによって、伝送資源を効果的に利用することができる。
【0008】
関連する態様において、識別コンポーネントは、列がヌルであるか否かを示すために、各列のビットを含むヘッダ部分を利用することができる。当該ヘッダ部分は、サーバから最初に送信することができ、データの行が続く伝送される列の数を示すことができる。そのため、前もって送信される行を最初に検査することによって、関連するビットマップが計算される。このビットマップはヌル列を識別し、従って、当該ヌル列を伝送しないことによって、スペースを節約することができ、効率を改善できる。
【0009】
さらなる方法によれば、要求を、最初にサーバに送信することができる。次に、サーバは、結果セットを実現し、かつデータの列などのようなデータのレイアウトを指定する要求(例えば、表と表の間の結合、関連する動作、および同種のもの)を処理する。典型的には、サーバからクライアントに送信される結果は、その中に列および行をいくつでも含むことができる。当該結果セットは異なるアイテム間の結合の結果であり、表に格納することができる。次に、表と関連する行は、表と関連する行毎に(on a row−by−row basis)ビットマップを計算するために最初に検査することができる。次に、結果セットのためのメタデータ(どのような列が来るかを指定する)が、クライアントに最初に送信され、続いて結果セットと関係するデータの行が送信される。
【0010】
さらに、情報は、列に関して実際の列およびメタデータを示す応答として、最初にネットワーク層に伝送することができる。従って、結果セットの伝送の前に、クライアントには、転送される列の数(例えば、行の中の列の数)が通知される。従って、当該メタデータを最初に送信することにより、クライアントは、受信される列の数について認識するようになる。関連する態様において、ヌルを許可する列が所定の閾値を超える場合、本発明によるヌルの圧縮が利用される。
【0011】
前述及び関連する目的を達成するために、本発明は、以下に説明する特徴を含む。以下の説明および添付の図面は、本発明のある例示の態様を詳細に説明する。しかしながら、これらの態様は、本発明の原理が利用され得る様々な方法のうちのごくわずかのもののみを示すものである。図面と共に検討すれば、本発明の他の態様、利点、新規の特徴は、以下の本発明の詳細な説明から明らかになるであろう。
【図面の簡単な説明】
【0012】
【図1】本発明の一態様による照会(query)に対する結果セットの効率的な伝送を可能にする例示的な表形式データストリーム(Tabular Data Stream:TDS)プロトコルを示す図である。
【図2】本発明のTDSプロトコルの一部として識別コンポーネントを示す図である。
【図3】本明細書の一態様によるビット圧縮の例を示す図である。
【図4】本発明の一態様による圧縮した方式において照会結果を送信する方法を示す図である。
【図5】ヌル圧縮トークンでデータを伝送する方法を示す図である。
【図6】クライアントサーバがデータを効率的に伝送することを可能にする識別コンポーネントの一部として例示的なバッファヘッダ配列を示す図である。
【図7】本発明の一態様による識別コンポーネントに関連する人工知能(AI)コンポーネントを示す図である。
【図8】本発明の一態様による拡張TDSプロトコルを実装する例示的なシステムを示す図である。
【図9】本発明の様々な態様を実施するための例示的な環境を示す図である。
【図10】本発明の一態様による、ヌルでない転送列のために利用することができるサンプルコンピューティング環境の概略ブロック図である。
【発明を実施するための形態】
【0013】
本発明の様々な態様を、添付の図面を参照して説明する。同様の参照番号は同様のまたは対応する構成要素を全体にわたって示す。しかしながら、参照番号に関連する図面および詳細な説明が、開示された特定の形態に本発明を限定するようには意図されないことは理解されるべきである。むしろ、本発明の趣旨および範囲内の変更、等価物および代替手段をすべて包含することを意図している。
【0014】
図1は、本発明の一態様による拡張TDS(Tabular Data Stream)プロトコル120を利用するシステム100のブロック図である。サーバ140による照会結果の伝送の前に、クライアント130には、転送される列の数(例えば、行の中の列の数)が通知される。従って、そのようなメタデータを最初に送信することにより、クライアント130は、受信する列の数を認識するようになる。さらに、ヌルでない列とヌルである列を識別し、続いてヌルでない列を送信することにより、伝送資源を効果的に利用することができる。拡張TDSプロトコル120は、識別コンポーネント135を介して、ヌル列を有する行のそのような効率的な伝送を可能にする。識別コンポーネント135は、ヌル列を指定して、サーバ140からクライアント130に照会結果を伝送する間のビット数を削減する。本明細書では、サーバからクライアントへの通信という文脈において主にヌル圧縮について説明するが、クライアントからサーバなどの逆の通信も、本発明の範囲内にあることは十分に理解されよう。
【0015】
システム100は、複合モデルに基づいたデータベース構造とすることができるデータストレージシステム110に関連する。アイテム、サブアイテム、プロパティおよび関連は、複合型のインスタンスとして、データストレージシステム内の情報の表示を可能にするように定義される。例えば、データストレージシステム110は、リッチオブジェクト(rich object)、永続オブジェクト(persisted object)およびオブジェクト間のリンクを作成し管理するための一連の基本構成要素を利用することができる。アイテムは、データストレージシステム110内で一貫性の最も小さなユニットとして定義することができ、独立して保護され、連続化され(serialized)、同期化され、コピーされ、バックアップ/リストアされることができる。当該アイテムは、型のインスタンスを含むことができ、データストレージシステム110内のすべてのアイテムは、アイテムの単一のグローバルな範囲(extent)に格納することができる。さらに、データストレージシステム110は、少なくとも1つのアイテムおよび/またはコンテナ構造に基づくことができ、アイテムとしてファイル内に埋め込むリッチメタデータを明らかにする(expose)ストレージプラットフォームとして作用することができる。データストレージシステム110は、上述した機能をサポートするデータベース(図示せず)を含むことができ、任意の適切な特性および/または属性を実装することができる。さらに、データストレージシステム110は、コンテナ階層構造を利用することができる。コンテナとは、少なくとも1つの他のアイテムを含むことができるアイテムである。このような包含概念(Containment Concept)は、関連するクラスの内部のコンテナIDプロパティを介して実施することができ、記憶装置(store)は、物理的かつ組織的で管理しやすいユニットの形態であるコンテナでもありえる。さらに、当該記憶装置は、階層構造内にコンテナのツリーのためのルートコンテナを表現する。図1に示すように、拡張TDS120は、識別コンポーネント135を利用し、ヌルでない列とヌルである列を区別し、続いて、ヌルでない列を送信する。従って、伝送資源を効果的に利用することができる。
【0016】
図2は、本発明の一態様によるTDSプロトコル222の一部として特定の識別コンポーネント220を図示している。識別コンポーネント220は、送信される列を受信側(例えば、クライアント221)に示すために、行204、206および208(1からn、ここでnは整数である)の先頭に位置に置くことができるビットマップを利用する。識別コンポーネント220は、ヌルビット圧縮トークン(Null Bit Compression token)(NBCRow)を利用することができる。当該ヌルビットマップ圧縮は、各列がヌルであるかまたはヌルでないかを指定するために単一ビットを用いることにより、さらに行204、206、208からヌル列値をすべて取り除くことにより実施される。行204、206、208からヌル列値(ヌルインスタンス当たり8バイトまでありうる)を取り除くことは、本発明の一態様による圧縮をもたらす。当該ヌルビットマップは、以下に詳細に記述されるような列メタデータ(例えば、COLMETADATAのTDSトークン)内に定義された各列の1ビットを含む。列メタデータとは、列に関連するメタデータである。例えば、ヌルビットマップにおいて、1のビット値は、列がヌルであるため行の中に存在していないことを示す。同様に、典型的には、0のビット値は、列がヌルではなく、従って行204、206、208の中に存在することを示すことができる。さらに、当該ヌルビットマップは、典型的には、8ビットの最も近い倍数に丸めることができ、ヌルビットマップの最終バイトにおいてヌルビットマップの端部に残りの予約ビット1〜7が存在することができる。例えば、TDSプロトコル222は、次のものを実装することができる。
【0017】
トークンストリームコメント(Token Stream Comment)
トークン値は、0xD2/210である。
【0018】
トークンストリーム特定ルール(Token Stream Specific Rules)
TokenType:=BYTE;
NullBitmapBitCount:=結果セット内の列の数;
NullBitmapByteCount:=(NullBitmapBitCount+7)/8;
NullBitmap:=NullBitmapByteCount×BYTE;
ColumnData:=単一の非ヌル列値のためのデータのバイト;
AllColumnData:={ColumnData};
NBCROW:=TokenType、NullBitmap、AllColumnData
【0019】
ヌル圧縮した行および通常の行は、同一の結果セットにおいて混合することができる。ColumnDataは、データの各非ヌル列のために一度繰り返すことができる。バイトの節約がない場合、例えば、結果セットにヌル値を許可するカラムがない場合または結果セット内の特定の行にヌル値がない場合は、サーバ223はNBCROWトークンを送信しないようにすることができる。さらに、NBCROWトークンおよびROWトークンは、同一の結果セットにおいて混合することができる。
【0020】
例えば、特定の列がヌルであるか否かを判断する場合、列がCOLMETADATAトークンのColumnDataセクション内に現われるときに、0から65534までのゼロベース方式のインデックスを用いて、左から右に配列されたすべての列を検討する。そのため、ヌルビットマップは、以下のバイトおよびビットレイアウトにおけるゼロビットを用いて、列がヌルであることを示す。
【0021】
【表1】

【0022】
従って、第1のバイトは、ゼロ番目の列を示すバイト内の最下位(あるいは右端の)ビット、および7番目の列を示すバイト内の最上位(あるいは左端の)ビットと共に、列0〜7についてのフラグを含むであろう。列インデックス8は、最下位ビットとして第2のバイトなどにあるであろう。一般に、ヌルビットマップのビットが設定される場合、列はヌルであり、行の中で列のヌルトークン値は続くことができない。ヌルビットマップのビットがクリアである場合、列はヌルではなく、行の中で列の値は続く。
【0023】
図3は、本発明の一態様による識別コンポーネント320の特定の態様を例示している。識別コンポーネント320は、配列310内でヌルが使用するスペースを低減して、より圧縮した配列330(例えば、データ型に依存するヌルインスタンス当たり1〜8バイト)を作成することができる。配列310は、行においてヌル列インスタンス当たり8バイトまでを用いることができる。例えば、1000ヌルvarchar(最大)列を有する結果セットは、当該ヌルを表現するために1行当たり8000バイトを用いることができる。識別コンポーネント320は、TDS行配列330において圧縮される実質的に多数のヌルを有する結果セットにより、全体的性能およびネットワーク帯域幅を改善することができる。
【0024】
さらに、本発明のTDS行フォーマット330において、ヌルビットマップ圧縮ヌル値は、行の内部で典型的には送信されない。より正確に言えば、NBCRowへの次のビットを識別するトークン315は、例えば、(1列当たり1ビットを用いて)どの列がヌルであるか、および/またはどの列がヌルでないかを示すために、行の先頭で利用することができる。さらに、非ヌル列値は、ROWトークンにおけるのと同一の方式において送信することができる。
【0025】
図4は、本発明の一態様による、効率的な伝送のためのデータ圧縮の関連する方法400を図示している。例示的な方法が様々なイベントおよび/または動作の一連のブロック表現として本明細書に図示され、記述されるが、本発明は当該ブロックの図示する順序に限定されない。例えば、本発明によるいくつかの動作またはイベントが、本明細書に図示された順序とは別に、他の動作またはイベントと異なる順序および/または同時に発生してもよい。さらに、すべての図示するブロック(イベントまたは動作)は、本発明による方法を実施するように要求されるとは必ずしも限らない。さらに、本発明による典型的な方法および他の方法が、本明細書に図示し、記述した方法と共同することはもちろん、図示や記述がされていない他のシステムおよび装置と共同して実施されてもよいことは十分に理解されるであろう。410において、クライアントは、例えば、ネットワーク上のログオンデータストリームの送信を介して、サーバとの接続を開始する(例えば、ハンドシェークの開始)。クライアントからサーバへの当該通信は、複数のコマンドを含むことができ、サーバからの応答は、複数の結果セットを戻すことができる。開始された当該通信において、セッション要素、プレゼンテーション要素および応用サービス要素は、420においてTDSにより供給される。次に430において、サーバは、クライアントによる接続要求に肯定応答することができる。
【0026】
続いて440において、照会に関連した結果セットは、ヌル圧縮形式において送信することができる。ヌルビットマップ圧縮は、各列がヌルであるかヌルでないかを指定するために、単一ビットを用いることにより、および行からヌル列値をすべて取り除くことにより実施することができる。行からヌル列値(1つのヌルインスタンス当たり8バイトまでありうる)を取り除くことは、本発明の一態様による圧縮を提供する。
【0027】
図5は、本発明の一態様による、ヌル列により行を効率的に伝送するためにTDSを向上させる特定の方法500を図示している。初めに510において、どの列が到着するか、およびどれがヌル値を含むことができるかを明らかにする結果セットのためのメタデータを指定することができる。例えば、メタデータは、どの列がヌルを許可するかを示すことができる。その後、当該情報は、列に関して実際の列およびメタデータを示す応答として、ネットワーク層に伝送することができる。従って、伝送結果を設定する前に、クライアントには、520において、転送される列の数(例えば行の中の列の数)が通知される。530において、ヌル列の数が所定の閾値を超えているか判定がなされる。超えていなければ、本方法は動作535に進み、データはヌル圧縮なしで伝送することができる。超えていれば、本方法500は動作540に進み、ヌルでない列とヌルである列を区別し、続けてヌルでない列を送信することにより、伝送資源を効果的に利用することができる。
【0028】
図6は、サーバからクライアントへの照会結果の伝送の間にビット数を削減するために、ヌル列を指定する識別コンポーネント610の一部として、例示的なバッファヘッダ配列600を図示している。クライアントからサーバへのコールは、サーバに1つ以上のパラメータを送信することができ、所定のヘッダ部分は、値パラメータ、列、データ型、行、バイナリフォーマットおよび関連するバッファの型を定義することができる。
【0029】
典型的には、バッファ600は同時に書き込まれたか、または読み取られたユニットであり、「パケット」としてモデル化することができ、メッセージは、1つ以上のバッファから成ることができる。バッファは、メッセージを含むバッファデータ604が続くことができるバッファヘッダ602を含むことができる。さらに、各新規のメッセージは、新規のバッファにおいてスタートすることができる。
【0030】
一般に、クライアントとサーバの両方は、データで満ちたバッファを読み取ることを試みて、さらに多くの(あるいはさらに少ない)データがどのように通信内に存在するかを観察するためにヘッダを抽出(pick out)することができる。下層にあるネットワークインタフェースが、読み取りにおいて指定されたバイトがすべて読み取られるまでブロックすることを要求する場合、クライアントはヘッダを読み取り、どのくらいさらに多く読み取るべきかを決定することができる。例えば、ログイン時において、クライアントは、より小さな「パケット」へ大きなメッセージを分割するために利用されるサイズを識別することができる、要求される「パケット」サイズを指定することができる。さらに、表全体を通過するための、クライアントとサーバとの間を通過するメッセージは、典型的には、「トークンストリーム」または「トークンレスストリーム」のいずれかである2つの型のうちの1つを含むことができる。トークンストリームは、1つ以上の「トークン」から成り、その各々にいくつかのトークン固有データが伴う。「トークン」は、トークンに続くデータを記述するために利用される単一のバイト識別子(例えば、トークンデータ型、トークンデータ長などを含む)を表現する。その中のデータのより詳細な記述を要求することができるメッセージがトークンストリームとして送信される一方、トークンレスストリームは、典型的には、シンプルなメッセージに対して用いられる。
【0031】
バッファヘッダは、列がヌルであるか否かを示すために、各列のビットを含むヘッダ部分に関連づけることができる。当該ヘッダ部分は、サーバから最初に送信することができ、データの行が続く、伝送される列の数を示すことができる。そのため、前もって、送信される行を最初に検査することにより、ヌルのビットマップを伝送しないことでスペースを節約することができる。関連するビットマップは、行について計算される。
【0032】
1つの特定の例において、従来のシステムは、次のように16の整数のヌルを許可する値(交互の非ヌルおよびヌル)の行を送信することができる。
Dl 04 00 00 00 01 00 04 00 00 00 01 00 04 00 00 00 01 00 04 00 00 00 01 00 04 00 00 00 01 00 04 00 00 00 01 00 04 00 00 00 01 00 04 00 00 00 01 00
ここで、00値は、整数値に対するヌルトークンを示すことができ、「04 00 00 00 01」は、1の単一の整数値を示す(04は長さインジケータであり、「00 00 00 01」は値である)。
【0033】
本発明の実施によって、ヌル行圧縮により、当該行は次のように送信することができる。
D2 AA AA 04 00 00 00 01 04 00 00 00 01 04 00 00 00 01 04 00 00 00 01 04 00 00 00 01 04 00 00 00 01 04 00 00 00 01 04 00 00 00 01 [0041]
ここで、「AA AA」は、ビットマップの型においてビット−>10101010 10101010を表わす。16のヌル整数トークンを有する行は、「D2 FF FF」のように送信することができることに注意されたい。
【0034】
図7は、本発明の一態様による、行毎にヌル列のビットマップを、いつ、どこで、どのように計算するかの推測および/または判定を容易にするために利用することができる人工知能(AI)コンポーネント730を図示している。本明細書で用いられるように、用語「推測(inference)」は、イベントおよび/またはデータを介して取り込まれるような1連の観察からシステム、環境および/またはユーザについて状態を推論する、または推測するプロセスを一般に表す。推測は、特定の文脈または動作を識別するために利用することができ、もしくは、例えば、状態に関する確率分布を生成することができる。推測は、確率論的な、すなわち、データとイベントの考察に基づいた対象の状態に関する確率分布の計算が可能である。推測は、1連のイベントおよび/またはデータからより高いレベルのイベントを構成するために利用される技術を引用することもできる。当該推測は、観察された1連のイベントおよび/または保存された1連のイベントデータから、イベントが時間的に近接して相互に関連するか否か、及び、イベントとデータが1つまたはいくつかのイベントおよびデータソースから生ずるか否かという、新規のイベントまたは動作の構造をもたらす。
【0035】
AIコンポーネント730は、本明細書で説明する発明の様々な態様を容易にすることに関連して、上述したような様々な適切なAIベースの機構のいずれかを利用することができる。例えば、効率的にデータを送信することについて、ヌルビット圧縮トークンがどのようにして作成されるべきかを明示的にまたは暗黙に学習するプロセスは、自動分類システムおよびプロセスを介して容易にできる。分類は、ユーザが自動的に実行されることを望む動作を予知または推測するための確率論および/または統計に基づいた解析(例えば、解析ユーティリティおよびコストを計算に入れて)を利用することができる。例えば、SVM(Support Vector Machine:サポートベクターマシン)分類器を利用することができる。ベイジアン・ネットワーク、デシジョンツリー、および異なるパターンの独立性を与える確率論の分類モデルを含む、他の分類アプローチを利用することができる。本明細書で用いられる分類は、プライオリティのモデルを展開するために利用される統計的回帰(statistical regression)も包括する。
【0036】
本明細書から容易に理解されるように、本発明は、分類器が1つの質問に返すために答える所定の基準に従って自動的に判定するために使用されるように、暗黙に訓練される(例えば、ユーザ動作を観察することを介して、外部の情報を得る)と同様に、明示的に訓練される(例えば、一般的な訓練データを介して)分類器を利用することができる。例えば、十分に理解されるSVMに関して、SVMは、分類器コンストラクタおよび特徴選択モジュール内の学習または訓練のフェーズを介して構成される。分類器は、入力がクラス、すなわち、f(x)=confdence(class)に属するという信頼度(confidence)に対して、入力属性ベクトル、x=(x1,x2,x3,x4,xn)をマップする関数である。
【0037】
図8は、サーバ850からクライアント820に照会結果を伝送する間にビット数を削減するために、ヌル列を指定することを可能にする拡張TDSプロトコル833を実施するシステムを図示している。クライアント820上で稼働するものは、クライアントプロセス、例えば、ウェブブラウザ810である。同様に、サーバ850上で稼働するものは、対応するサーバプロセス、例えば、ウェブサーバ860である。さらに、ウェブブラウザ810内に組み込まれるものは、スクリプトまたはアプリケーション830が可能であり、クライアントコンピュータ820のランタイム環境840内で稼働し、本発明の様々な態様に従って、フォーマットされたデータパッケットをパッケージおよびアンパッケージするプロキシ815が存在可能である。サーバ850と通信するものは、データベース(図示せず)へのアクセスを管理するデータベース管理システム(DBMS)880である。DBMS880およびデータベース(図示せず)は、サーバ自体の中に配置することができ、またはリモートデータベースサーバ(図示せず)に遠隔で配置することができる。ウェブサーバ860上で稼働するものは、DBMS880へのアクセスを提供するデータベースインタフェースAPI(Applications Programming Interface)870である。クライアントコンピュータ820およびサーバコンピュータ850は、ネットワーク890を介して互いに通信することができる。クライアントプロセス、例えば、ウェブブラウザ810がデータベースにデータを要求する場合、スクリプトまたはアプリケーション830は、サーバコンピュータ850へネットワーク(例えば、インターネット)890を介して送信される照会(それはサーバプロセス、例えば、ウェブサーバ860によって解釈される)を発行する。上述したように、サーバ850へのクライアントの要求は、複数のコマンドを含むことができ、サーバ850からの応答は、複数の結果セットを返すことができる。当該通信において、セッション、プレゼンテーションおよびアプリケーションサービス要素は、TDSによって提供される。TDSは、典型的には特定のトランスポートプロバイダを必要としないため、複数のトランスポートプロトコルおよびネットワーク890を介して実施することができる。
【0038】
当該拡張TDSプロトコル833は、サーバからクライアントに照会結果を伝送する間にビット数を削減するために、ヌル列を指定する識別コンポーネントを利用することができる。識別コンポーネントは、送信される列を受信側(例えば、クライアント)に示すために、行の先頭の位置に置くことができるビットマップを利用する。従って、ヌルでない列とヌルである列の区別し、続いて、ヌルでない列の送信をすることにより、伝送資源を効果的に利用することができる。
【0039】
返されるクライアントコマンドに対する応答は、自己記述的でレコード指向(oriented)でありえる(例えば、データストリームは、返される行の名称、型およびオプションを記述することができる)。クライアント側820において、データは、ログインレコード、すなわち、サーバ側850が受け取ることができる言語である構造化照会言語(Structured Query Language:SQL)コマンド、その関連するバイナリデータ(例えば、一括コピーコマンドのためのデータ)が後続するSQLコマンド、または注意信号である。接続が望まれる場合、クライアント820は、サーバにログインデータストリームを送信することができる。たとえクライアント820がサーバ850に対して2つ以上の接続をすることができたとしも、各接続パスは、別々に同一の方式において確立することができる。
【0040】
サーバ850がクライアント820からログインレコードを受信すると、接続要求を受理するか、または拒否するかのいずれかがクライアントに通知される。同様に、SQLコマンドまたはSQLコマンドのバッチを送信するために、SQLコマンド(例えば、ユニコードフォーマットによって表現される)を、バッファのデータセクションにコピーし、SQLサーバ側820に対して送信することができる。SQLバッチは、2つ以上バッファにまたがってもよい。さらに、様々なODBC(Open Data Base Connectivity:オープン・データベース・コネクティビティ)ルーチンは、クライアントメッセージバッファにSQLコマンドを配置することができ、もしくはサーバにメッセージバッファを送信することができる。
【0041】
さらに、バイナリデータを有するSQLコマンドのために、一括挿入(insert bulk)オペレーションは、バイナリデータが後続するSQLコマンド(例えば、ユニコードフォーマットにおける)の場合を表現することができる。最初に、一括挿入コマンドは、通常の方法でサーバ850に送信することができ、肯定応答をサーバ850から受信すると、クライアント820は、フォーマットされたバイナリデータをサーバ850に送信することができる。このような機能は、本発明の1つの例示的な態様に従って、ODBCに含まれたルーチンによって提供することができる。さらに、クライアント820は、サーバ850に対して、最初に一括挿入SQLステートメントを送信することができる。当該一括挿入SQLステートメントには、未加工のデータを記述するCOLMETADATAトークンが続き、さらにバイナリデータの複数の行が続く。例えば、データは、ストレージエンジン行フォーマットではフォーマットされず、COLMETADATAトークンによって記述されたフォーマットでフォーマットされる。ストリームは、データがサーバ850へ送信されるというよりは、むしろサーバ850から選ばれていた場合と同じである。
【0042】
「例示的である(exemplary)」という用語は、具体例、事例または例証として取り扱うことを意味するために、本明細書で用いられる。「例示的である」と本明細書に記述されたいかなる態様または設計は、他の態様または設計に対して好適または有利であるように、必ずしも解釈することができない。同様に、具体例は、もっぱら明瞭さと理解の目的のために本明細書で提供され、任意の方式において本発明またはその部分を限定することが目的ではない。無数の付加的または代替の具体例を提示することができたかもしれないが、簡潔さの目的のために省略されたことは十分に理解されよう。
【0043】
本出願において用いられるように、用語「コンポーネント」、「システム」、「エンジン」は、コンピュータ関連エンティティ(ハードウェア、ハードウェアとソフトウェアの組み合わせ、ソフトウェア、または実行中のソフトウェアのいずれか)を表すように意図している。例えば、コンポーネントは、プロセッサ上で稼働するプロセス、プロセッサ、オブジェクト、実行可能ファイル、実行スレッド、プログラム、および/またはコンピュータでありえるが、限定的ではない。例として、サーバ上で稼働するアプリケーションとサーバはいずれも、コンポーネントでありえる。1つ以上のコンポーネントは、プロセスおよび/または実行スレッド内に存在することができ、コンポーネントは、1台のコンピュータに配置することができ、および/または、2台以上のコンピュータ間で分散することができる。
【0044】
さらに、本発明のすべてまたは一部は、開示された発明を実施するコンピュータを制御するソフトウェア、ファームウェア、ハードウェアまたはその任意の組み合わせを形成するために標準規格プログラミングおよび/またはエンジニアリング技術を用いて、システム、方法、装置、または製品として実施することができる。例えば、コンピュータ可読媒体は、磁気ストレージデバイス(例えば、ハードディスク、フロッピー(登録商標)ディスク、磁気ストリップ…)、光ディスク(例えば、CD(Compact Disk)、DVD(Digital Versatile Disk…)、スマートカード、およびフラッシュメモリデバイス(例えば、カード、スティック、キードライブ…)を含むことができるが、限定的ではない。さらに、電子メールを送受信するために、またはインターネットもしくはローカルエリアネットワーク(LAN)などのような、ネットワークにアクセスするために用いられるようなコンピュータ可読電子データを伝えるために、搬送波を利用することができることは、十分に理解されよう。もちろん、当業者は、本発明の内容の範囲または趣旨から逸脱せずに、多くの変更をこの構成に対してできることは認識するであろう。
【0045】
開示された発明の主題の様々な態様のための文脈を呈するために、以下の説明並びに図9および図10は、開示された発明の主題の様々な態様が実施できる好適な環境の簡潔な概要を提供する。本発明の主題が、1台のコンピュータおよび/または複数のコンピュータ上で稼働するコンピュータプログラムのコンピュータ実行可能命令の一般的な文脈において上述されているが、当業者は、本発明が他のプログラムモジュールと組み合わせて実施されてもよいことを認識するだろう。一般に、プログラムモジュールは、特定のタスクを実行し、および/または特定の抽象データ型を実施するルーチン、プログラム、コンポーネント、データ構造などを含む。さらに、当業者は、パーソナルコンピュータ、携帯型のコンピューティングデバイス(例えば、PDA(Personal Digital Assistant)、電話、腕時計…)、マイクロプロセッサベースもしくはプログラム可能な民生用または産業用電子機器だけでなく、シングルプロセッサまたはマルチプロセッサコンピュータシステム、ミニコンピューティングデバイス、メインフレームコンピュータなどを含む他のコンピュータシステム構成によって、本発明の方法を実践することができることを十分に理解するだろう。図示する態様も、通信ネットワークを介してリンクされるリモート処理デバイスによってタスクが実行される分散コンピューティング環境内で実践されてもよい。しかしながら、本発明の全部ではないがいくつかの態様は、スタンドアロンのコンピュータ上で実践することができる。分散コンピューティング環境において、プログラムモジュールは、ローカルとリモートのメモリストレージデバイスの両方に配置してもよい。
【0046】
図9に関連して、コンピュータ912を含む本発明の様々な態様を実行する例示的な環境910を記述する。コンピュータ912は、処理装置914、システムメモリ916、およびシステムバス918を含む。システムバス918は、処理装置914に、限定はしないがシステムメモリ916を含むシステムコンポーネントを結合する。処理装置914は、様々な利用可能なプロセッサのいずれかでよい。デュアルマイクロプロセッサおよび他の多重プロセッサアーキテクチャも、処理装置914として利用することができる。
【0047】
システムバス918は、いくつかのタイプのバス構造のいずれかとすることができる。そのバス構造は、限定はしないが、11ビットのバス、ISA(Industrial Standard Architecture)、MSA(Micro−Channel Architecture)、EISA(Extended ISA)、IDE(Intelligent Drive Electronics)、VLB(VESA Local Bus)、 PCI(Peripheral Component Interconnect)、USB(Universal Serial Bus)、AGP(Advanced Graphics Port)、PCMCIA(Personal Computer Memory Card International Association bus)、およびSCSI(Small Computer Systems Interface)を含む利用可能なバス構成の任意の種類を用いたメモリバスまたはメモリコントローラ、周辺バスまたは外部バス、および/またはローカルバスを含む。
【0048】
システムメモリ916は、揮発性メモリ920および不揮発性メモリ922を含む。起動中などにコンピュータ912内のエレメント間で情報を転送するための基本ルーチンを含む基本入出力システム(BIOS)は、不揮発性メモリ922内に格納される。限定ではなく例として、不揮発性メモリ922は、ROM(Read Only Memory)、PROM(Programmable ROM)、EPROM(Electrically Programmable ROM)、EEPROM(Electrically Erasable ROM)、またはフラッシュメモリを含むことができる。揮発性メモリ920は、外部キャッシュメモリとして作用するRAM(Random Access Memory)を含む。限定ではなく例として、RAMは、SRAM(Synchronous RAM)、DRAM(Dynamic RAM)、SDRAM(Synchronous DRAM)、DDR SDRAM(Double Data Rate SDRAM)、ESDRAM(Enhanced SDRAM)、SLDRAM(Synchlink DRAM)、およびDRRAM(Direct Rambus RAM)などのような多くの形態において利用可能である。
【0049】
コンピュータ912は、リムーバブル/非リムーバブル、揮発性/不揮発性のコンピュータストレージ媒体も含む。図9は、ディスクストレージ924を図示しており、当該ディスクストレージ924は、磁気ディスクドライブ、フロッピーディスクドライブ、テープドライブ、Jazドライブ、Zipドライブ、LS−60ドライブ、フラッシュメモリカード、またはメモリースティックのようなデバイスを含むが、限定するものではない。さらに、ディスクストレージ924は、別々に、または、CD−ROM(Compact Disk ROM)デバイス、CD−R(CD Recordable)ドライブ、CD−RW(CD Rewritable)ドライブ、またはDVD−ROM(Digital Versatile Disk ROM)ドライブなどの光ディスクドライブを含む他のストレージ媒体と組み合わせて、ストレージ媒体を含むことができるが、これらに限定されない。システムバス918へのディスクストレージデバイス924の接続を容易にするために、リムーバブルまたは非リムーバブルなインタフェースは、典型的にはインタフェース926などが用いられる。
【0050】
図9が、ユーザと、好適な操作環境910内に記述される基本的なコンピュータ資源との間の媒介として作用するソフトウェアを記述していることは、十分に理解されるだろう。当該ソフトウェアは、オペレーティングシステム928を含む。ディスクストレージ924上に格納することができるオペレーティングシステム928は、コンピュータシステム912のリソースを制御し、割り当てるように動作する。システムアプリケーション930は、システムメモリ916内またはディスクストレージ924上のいずれかに格納されたプログラムモジュール932およびプログラムデータ934を介して、オペレーティングシステム928によりリソースの管理を活用する。様々なオペレーティングシステムまたはオペレーティングシステムの組み合わせで、本明細書に記述された様々なコンポーネントを実施することができることは、十分に理解されよう。
【0051】
ユーザは、入力デバイス936を介してコンピュータ912へコマンドまたは情報を入力する。入力デバイス936は、マウスなどのポインティングデバイス、トラックボール、スタイラス、タッチパッド、キーボード、マイクロホン、ジョイスティック、ゲームパッド、衛星放送アンテナ、スキャナ、テレビジョンチューナカード、ディジタルカメラ、デジタルビデオカメラ、ウェブカメラなどを含むが、これらには限定されない。これらおよび他の入力デバイスは、インタフェースポート938を介してシステムバス918を通じて処理装置914に接続する。インタフェースポート938は、例えば、シリアルポート、パラレルポート、ゲームポート、およびUSB(Universal Serial Bus)を含む。出力デバイス940は、入力デバイス936と同一タイプのポートのいくつかを用いる。したがって、例えば、USBポートは、コンピュータ912に入力を提供し、コンピュータ912から出力デバイス940へ情報を出力するために用いられてもよい。出力アダプタ942は、専用のアダプタを要求する他の出力デバイス940のうちの、モニタ、スピーカ、およびプリンタと同様ないくつかの出力デバイス940があることを示すために提供されている。出力アダプタ942は、限定ではなく例として、出力デバイス940とシステムバス918との間の接続手段を提供するビデオカードおよびサウンドカードを含む。他のデバイスおよび/またはデバイスのシステムが、リモートコンピュータ944などの入出力機能の双方を提供することには注目されたい。
【0052】
コンピュータ912は、リモートコンピュータ944ような、1つ以上のリモートコンピュータへの論理的接続を用いて、ネットワーク化された環境内で作動することができる。リモートコンピュータ944は、パーソナルコンピュータ、サーバ、ルータ、ネットワークPC、ワークステーション、マイクロプロセッサベースの機器、ピアデバイスまたは他の共通ネットワークノードおよびその他同種のものとすることができ、典型的にはコンピュータ912に関連して記述した多くのまたはすべての構成要素を含む。簡潔さの目的のために、メモリストレージデバイス946のみがリモートコンピュータ944で図示されている。リモートコンピュータ944は、ネットワークインタフェース948を介してコンピュータ912に論理的に接続され、通信接続950を介して物理的に接続される。ネットワークインタフェース948は、LAN(Local−Area Network)およびWAN(Wide−Area Network)などの通信ネットワークを包含する。LAN技術は、FDDI(Fiber Distributed Data Interface:ファイバ分配データインタフェース)、CDDI(Copper Distributed Data Interface:銅分散データインタフェース)、イーサネット/IEEE 802.3、トークンリング/IEEE 802.5などを含む。WAN技術は、2地点間接続リンク、ISDN(Integrated Services Digital Network)およびその変形物のような回線交換ネットワーク、パケット交換ネットワーク、およびDSL(Digital Subscriber Line)を含むが、限定するものではない。
【0053】
通信接続950は、バス918にネットワークインタフェース948を接続するために利用されるハードウェア/ソフトウェアを表す。通信接続950は、コンピュータ912の内部に例示の明瞭さのために示されているが、コンピュータ912外部でも可能である。ネットワークインタフェース948への接続に対して必要なハードウェア/ソフトウェアは、例示的な目的で、通常の電話回線モデム、ケーブルモデムおよびDSLモデム、ISDNアダプタ、およびイーサネットカードを含むモデムなどの、内部技術、外部技術を含む。
【0054】
図10は、本発明の拡張型TDSの実施のために利用できるサンプルコンピューティング環境1000の概略ブロック図である。システム1000は、1つ以上のクライアント1010を含む。クライアント1010は、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)とすることができる。システム1000は、さらに1つ以上のサーバ1030を含む。サーバ1030も、ハードウェアおよび/またはソフトウェア(例えば、スレッド、プロセス、コンピューティングデバイス)とすることができる。例えば、サーバ1030は、本明細書に記述されるコンポーネントの利用により変換を実行するためにスレッドを収容することができる。クライアント1010とサーバ1030との間の可能な1つの通信は、2つ以上のコンピュータプロセス間で伝送されるのに適応したデータパケットの形態をしていてもよい。システム1000は、クライアント1010とサーバ1030との間の通信を容易にするために利用できる通信フレームワーク1050を含む。クライアント1010は、クライアント1010に対してローカルな情報を格納するために利用することができる1つ以上のクライアントデータ記憶装置1060に動作可能に接続される。同様に、サーバ1030は、サーバ1030に対してローカルな情報を格納するために利用することができる1つ以上のサーバデータ記憶装置1040に動作可能に接続される。
【0055】
以上に記述されたものは、様々な例示的な態様を含む。これらの態様を記述するためにコンポーネントまたは方法の考えられるすべての組み合わせを記述することは不可能であり、当業者は、さらに多くの組み合わせや置換が可能であるということを認識されるであろう。従って、本明細書に記述された態様は、添付の特許請求の範囲に係る発明の趣旨および範囲内にある、変更、修正および変形物をすべて包含することを意図している。
【0056】
さらに、用語「含む(includes)」が「発明を実施するための形態」または「請求項」のいずれかにおいて用いられる範囲について、当該用語は、請求項において移行語(transitional word)として利用される場合に「備える(comprising)」が解釈されるように、用語「備える(comprising)」と同様の形で包括的であることを意図する。

【特許請求の範囲】
【請求項1】
コンピュータによって実施されるシステムであって、
クライアント(130、221、820)とサーバ(140、223、850)との間の要求応答を転送する表形式データストリーム(TDS)プロトコル(120、222、833)と、
前記TDS(120、222、833)の一部としての識別コンポーネント(135、220、320、610)であって、行(204、206、208)に関連するヌル列を指定して、前記サーバ(140、223、850)から前記クライアント(130、221、820)への照会結果の伝送の間にビット数を削減する前記識別コンポーネント(135、220、320、610)と
を含むコンピュータ実行可能コンポーネントを備えることを特徴とするシステム。
【請求項2】
前記TDSプロトコルは、列のためのビットを含み、前記列がヌルであるか否かを示すヘッダ部分をさらに備えることを特徴とする請求項1に記載のシステム。
【請求項3】
前記TDSプロトコルは、表形式に形成されたデータの転送のためのパケットとしてモデル化されたバッファをさらに備えることを特徴とする請求項2に記載のシステム。
【請求項4】
前記ヘッダ部分は、前記サーバから送信される列の数を示すことを特徴とする請求項2に記載のシステム。
【請求項5】
前記行は、所定の閾値を超える断続的なヌル値を許可するカラムを有することを特徴とする請求項4に記載のシステム。
【請求項6】
リレーショナルデータベースに関連したデータベース管理システムをさらに備えることを特徴とする請求項4に記載のシステム。
【請求項7】
前記クライアントは、ウェブブラウザをさらに備えることを特徴とする請求項4に記載のシステム。
【請求項8】
前記ビットは、行毎に計算可能であることを特徴とする請求項2に記載のシステム。
【請求項9】
オープン・データベース・コネクティビティ(ODBC)ルーチンをさらに備え、前記クライアントのメッセージバッファにSQLコマンドを配置することを特徴とする請求項7に記載のシステム。
【請求項10】
前記SQLコマンドは、ユニコードフォーマットであることを特徴とする請求項7に記載のシステム。
【請求項11】
TDSプロトコル(120、222、833)を介してクライアント(130、221、820)からサーバ(140、223、850)にデータを転送するステップと、
照会結果に関連する行(204、206、208)に対してヌル列を指定するためにビットマップを計算するステップと
を含むコンピュータ実行可能な動作を含むことを特徴とするコンピュータ実施方法。
【請求項12】
行毎に、転送されるデータを検査するステップをさらに含むことを特徴とする請求項11に記載の方法。
【請求項13】
行の先頭に前記ビットマップを配置するステップをさらに含むことを特徴とする請求項12に記載の方法。
【請求項14】
ヘッダ部分により行または列またはデータ型またはそれらの組み合わせを定義するステップをさらに含むことを特徴とする請求項11に記載の方法。
【請求項15】
単一のバイト識別子の形態においてトークンを利用するステップをさらに含むことを特徴とする請求項11に記載の方法。
【請求項16】
列を順序づけて記述するステップをさらに含むことを特徴とする請求項15に記載の方法。
【請求項17】
他の列とヌルである列を区別するステップをさらに含むことを特徴とする請求項16に記載の方法。
【請求項18】
分類器を介してヌル列を推測するステップをさらに含むことを特徴とする請求項11に記載の方法。
【請求項19】
ヌル列を伝送しないことにより伝送の間にスペースを節約するステップをさらに含むことを特徴とする請求項11に記載の方法。
【請求項20】
コンピュータによって実施されるシステムであって、
クライアント(130、221、820)とサーバ(140、223、850)との間でデータを交換する手段(120、222、833)と、
交換されたデータ内のヌル列を識別する手段(135、220、320、610)と
を備えることを特徴とするシステム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate


【公表番号】特表2011−505606(P2011−505606A)
【公表日】平成23年2月24日(2011.2.24)
【国際特許分類】
【出願番号】特願2010−531212(P2010−531212)
【出願日】平成20年10月22日(2008.10.22)
【国際出願番号】PCT/US2008/080827
【国際公開番号】WO2009/055496
【国際公開日】平成21年4月30日(2009.4.30)
【公序良俗違反の表示】
(特許庁注:以下のものは登録商標)
1.イーサネット
【出願人】(500046438)マイクロソフト コーポレーション (3,165)
【Fターム(参考)】