LOBはチャンクの順序として表現されるため、LOB APIを使用して排他的にアクセスする必要があります。KVStore.getXXX
メソッドのファミリでLOBキーを使用すると、KVS実装に内部的でアプリケーションからは直接使用できない値を受け取ります。
LOB APIは、KVLargeObject
インタフェースで宣言されています。これはKVStore
のスーパーインタフェースであるため、通常の方法でKVStore
ハンドルを作成してから、それを使用してLOBメソッドへアクセスします。
LOBメソッドは次のとおりです。
KVLargeObject.deleteLOB()
ストアからLOBを削除します。
KVLargeObject.getLOB()
ストアからLOBを取得します。
KVLargeObject.putLOB()
KVLargeObject.putLOBIfAbsent()
KVLargeObject.putLOBIfPresent()
ストアにLOBを書き込みます。
LOBの読取りと挿入に使用するメソッドは、原子的ではありません。原子性の要件を解除することにより、ストア全体にチャンクを分散できます。LOBに対する操作はアプリケーションで調整します。LOB実装では、LOBの同時変更を最大限に検出するようにし、同時実行性の競合を検知するとConcurrentModificationException
をスローしますが、このような競合がすべて検知されることを保証していません。この例外が発生した場合の安全な措置は、例外を引き起こしたアプリケーション・レベルの調整の問題を修正してから、LOBを削除して新しい値で置き換えることです。
LOB変更操作で障害が発生すると、不全LOBが作成されます。不全LOBのLOB値は中間状態であり、アプリケーションによる読取りはできません。不全LOBでのgetLOB()
の試行は、PartialLOBException
となります。不完全なputLOB()
操作の結果である不全LOBは、操作の再試行によって修復できます。または、削除して、その場所に新しいキー/値を作成できます。不完全な削除操作の結果である不全LOBの場合、削除の再試行を行う必要があります。各LOBメソッドに関連するドキュメントでは、不全LOBにおいて呼び出された場合のそれらの動作について、さらに詳細に説明されています。