Cursoring and Batching
CData Virtuality Server は、1つのソースからの結果であるか、多数のソースからの結果であるかに関係なく、また結果に対してどのような処理(JOIN、UNION など)が実行されたかに関係なく、すべての結果をカーソルします。
CData Virtuality Server は結果をバッチ処理します。バッチは単にレコードの集合です。バッチ内の行数は、バッファ・システム・プロパティProcessor Batch Size (クエリ・エンジン内) およびConnector Batch Size (コネクタで作成) によって決定されます。
クライアントアプリケーションはバッチやバッチサイズについて直接知ることはありません。しかし、フェッチサイズに関係なく、最初のバッチは常にプロアクティブに同期クライアントに返されます。その後のバッチは、データに対するクライアントの要求に基づいて返されます。FETCHはクライアントとコネクタの両方のレベルで利用されます。
Buffer Management
バッファ・マネージャは、クエリ・エンジンで使用されるすべての結果セットのメモリを管理します。これには、コネクションファクトリから読み込まれた結果セット、設定中に一時的に使用される結果セット、User用に準備された結果セットが含まれます。各結果セットは、バッファマネージャ内でタプルソースとして参照されます。
バッファマネージャからバッチを取得する場合、バイト単位のバッチサイズが推定され、最大制限に対して割り当てられます。
Memory Management
バッファマネージャには、メモリマネージャとディスクマネージャの2つのストレージマネージャがあります。バッファ・マネージャはすべてのバッチの状態を維持し、いつバッチをメモリからディスクに移動しなければならないかを決定します。
Disk Management
各タプルソースはディスク上に専用のファイル(IDで命名)を持っています。このファイルは、タプル・ソースの少なくとも1つのバッチがディスクにスワップされる必要がある場合にのみ作成されます。ファイルはランダムアクセスです。コネクタ・バッチ・サイズとプロセッサ・バッチ・サイズのプロパティは、バッチ内に存在できる行数を定義し、ストレージ・マネージャに格納されるときのバッチの粒度を定義します。バッチは常にストレージマネージャー全体から読み書きされます。
ディスク・ストレージ・マネージャーは、ファイル・ハンドルの不足を防ぐために、OPENファイルの最大数に上限を設けています。バッファリングが多い場合、ファイルハンドルが使用可能になるまでに待ち時間が発生する可能性があります(デフォルトの最大オープンファイル数は64です)。
Cleanup
タプル・ソースが不要になると、バッファ・マネージャから削除されます。バッファ・マネージャは、メモリ・ストレージ・マネージャとディスク・ストレージ・マネージャの両方からこれを削除します。ディスクストレージマネージャがファイルを削除します。さらに、すべてのタプル・ソースは「グループ名」(通常はクライアントのセッションID)でタグ付けされます。クライアントのセッションが終了すると(接続を閉じる、サーバーがクライアントのシャットダウンを検出する、または管理者が終了する)、セッションのすべてのタプル・ソースを削除するための呼び出しがバッファ・マネージャーに送られます。
さらに、Queryエンジンがシャットダウンされると、バッファ・マネージャがシャットダウンされ、ディスク・ストレージ・マネージャからすべてのStateが削除され、すべてのファイルがクローズされます。クエリ・エンジンが停止している場合、バッファ・ディレクトリ内のファイルはクエリ・エンジンの再起動時には使用されず、バッファ・ファイルがクリーンアップされないシステム・クラッシュが原因である可能性があるため、削除しても問題ありません。