Search:

Search all manuals
Search this manual
Manual
Couchbase Server 1.8 マニュアル
Additional Resources
Community Wiki
Community Forums
Couchbase SDKs
Parent Section
11.5 CouchbaseのAPI
Chapter Sections
Chapters

11.5.2. 追加のプロトコルオペレーション

11.5.2.1. TAPプロトコル
11.5.2.2. getl

Couchbaseには、新しい操作を追加し、プロトコルを拡張する方法があります。これにより、新機能を試することができ、その後必要に応じて、開発者はCouchbaseに拡張機能を追加したり、コントリビュータはmemcachedの機能として貢献したりできます。

11.5.2.1. TAPプロトコル

TAPプロトコルは、Couchbase Server上で起こっている「変更」に対するインタフェースを提供します。

11.5.2.2. getl

getl/unl: 一定時間のロック付きでアイテムを取得します。その後、CASの動作、または明示的なロック解除コマンドのいずれかを使用してロックを解除することができます。

注記

注、このドキュメントおよび機能はまだ開発中であり、必ずしもここに表示される内容と一致しない場合があります。

拡張により、Couchbaseは個々のクライアントが一定期間の排他的なアクセスを確保する機能があります。これはまだサポートされていない機能で、あくまで試用としてとらえてください。

getlコマンドはドキュメントIDと有効時間の2つの引数を取ります。有効期限が設定されていない場合、デフォルトの有効期限は15秒です。getlには29秒の最大有効期限があるので、29秒以上の任意の有効期限は自動的に29秒に変更されます。getlの動作を説明する4つのユースケースがあります。これらのユースケースではgetlでロックされているドキュメントに対するset操作がブロックされる例としていますが、同様にdelete、incrなどの操作もまたgetlによってブロックされます。

11.5.2.2.1. getlユースケース

getlの潜在的なユースケースは数多くあります:

  1. タイムアウトで指定された時間の間、文書をロックします

    • クライアントがドキュメントをsetする

    • 15秒のタイムアウトを指定してドキュメントのIDでgetlする

    • クライアントが新しい値でドキュメントをsetしようとする

    • サーバから"EXISTS"の応答が戻ってくる

    • ドキュメントが更新されていないかを検証するために、ドキュメントIDでgetする

    • 15秒待つ

    • クライアントが新しい値でドキュメントをsetする

    • ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする

  2. CASは、タイムアウトする前にドキュメントのロックを解除します

    • クライアントがドキュメントをsetする

    • 15秒のタイムアウトを使用してドキュメントのIDでgetlを実行する

    • 適切なCAS idを使用して、ドキュメントにCASを試みる

    • ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする

    • 新しい値でドキュメントをsetする

    • ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする

  3. getlは、ロックされたドキュメントには実行できません

    • クライアントがドキュメントをsetする

    • 15秒のタイムアウトを指定してドキュメントのIDでgetlする

    • タイムアウトなしでgetlを実行する

    • サーバから"LOCK_ERROR"の応答が戻ってくる

  4. getlのタイムアウト

    • クライアントがドキュメントをsetする

    • 3600秒のタイムアウトを指定してドキュメントのIDでgetlを実行する(Couchbaseは29秒で設定します)

    • 5秒のタイムアウトを指定してドキュメントのIDでgetlする

    • 5秒待つ

    • 新しい値でドキュメントをsetする

    • setは、"EXISTS"で失敗する

    • 24秒待つ

    • 新しい値でドキュメントをsetする

    • setは成功する

    • ドキュメントが更新されているかを検証するために、ドキュメントIDでgetする