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