
シングルレコードバッファリングでは、テーブルの個々のレコードはシングルレコードテーブルバッファ
TABLP で管理されます。原理とバッファアクセス
テーブル名は、ディレクトリ内でアルファベット順にソートされます。テーブルのエントリ自体も、データ領域の該当フレームの中にソートされた状態で保管されます。
バッファアクセスがあると、まず最初にバイナリ検索によってテーブルディレクトリ内のエントリが、次に該当するフレーム、その次にフレーム内の検索対象のレコードが検索されます。
ソート順序に従って新しいデータが挿入されると、データ領域でフレームがオーバーフローすることがあります。このようなオーバーフローフレームは、分割して管理構造を更新しなければなりません。これがシングルレコードテーブルバッファがジェネリック
/ フルテーブルバッファよりも若干効率的な理由です。シングルレコードテーブルバッファでは、データレコードはフレーム構造を再編成中に順番に追加する必要があります。これに対してジェネリック / フルバッファでは、テーブルのデータすべてがデータベースによってソートされた状態で 1 ステップで転送されます。非存在レコードの管理
シングルレコードのバッファには、テーブル内に存在しないレコードについての情報も格納されます。データベース上にないキーを使ってアクセスを試みると、この情報がバッファに格納されます。
この処理は、バッファ内に格納されている各レコードに追加されるフラグを用いて行なわれます。このフラグは、このレコードがテーブルに存在するかしないかを指定します。存在しないレコードにアクセスしようとすると、対応するキーとともにバッファに空のレコードが格納され、非存在レコードのフラグ値に設定されます。このレコードに再びアクセスしようとすると、システムはバッファ内を検索しこのレコードがデータベースに存在しないことを認識します。
テーブル内の非存在レコードに繰り返しアクセスしようとする場合も、シングルレコードバッファリングを推奨します。
置換
シングルレコードバッファリング対象のテーブルでは、レコードを読み込んでバッファに格納するときに、スペース上の理由から、他のレコードをバッファから削除する必要がある場合があります。この場合、最近のアクセスがもっとも少なかったレコードが、バッファから削除されます。
グローバルな同期化
分散システムでは、ローカルバッファで行なわれる変更を同期化してバッファデータの整合性を保持する必要があります。同期化の基本的な手順については、
ローカルバッファの同期化を参照してください。シングルレコードバッファのローカル同期化とグローバル同期化に対し、各種
ABAP コマンドは以下のように機能します。WHERE
条件 (UPDATE dbtab WHERE ... 、 DELETE FROM dbtab WHERE ...) を使って変更が加えられるときは、同期化のときにローカルサーバ ( コマンドが実行されたサーバ ) のバッファ内だけでなく他のすべてのサーバでもテーブル全体が無効になります。WHERE
条件 (UPDATE dbtab 、 INSERT dbtab 、および DELETE dbtab) を使用しない変更では、ローカルサーバのバッファ内で該当するレコードが変更され、同期化が行われる時にレコードは他のすべてのサーバのバッファから削除されます。このため
WHERE 条件を用いての変更は、 WHERE 条件を用いない場合よりもはるかに大きな負荷がバッファ管理にかかることになります。