私は主にデータを取得するためのビューで作業するアプリケーションに取り組んでいます。
私がやろうとしているのは、ドキュメントを保存し、リダイレクトして、保存されたドキュメントが利用可能かどうかを確認することです(これは、ドキュメントキーではなく別の値を探しているため、ビューを介して行われます)。
私は何を使用していますか?
Debian Wheezy 上の PHP(5.4.21)、Couchbase(2.1.1)、および Couchbase(1.1) 用の PHP SDK。
それで、何が起こっているのですか?
API 関数を使用してドキュメントを保存し、少なくとも を含むAPI 関数をset($id, $document)
使用してビューの更新をトリガーし、新しく追加されたドキュメントをチェックする/または単に表示したい別のページにリダイレクトします。
しかし、新しく追加されたドキュメントが常に表示されるとは限らないか、存在するかどうかの私のチェックに常に合格するとは限りません。view($designDocument, $viewName, $options)
$options
'stale'=>false
私がより詳細に使用しているコードに従ってください:
public function store(AbstractDocument $document)
{
$result = $this->bucket->storeDocument($document->getId(),
json_encode($document));
$this->afterSave();
return $result;
}
public function storeDocument($id, $document)
{
if (!is_string($document)) {
$document = json_encode($document);
}
$res = $this->couchbase->set($id, $document);
return $res;
}
public function afterSave()
{
$this->bucket->triggerViewIndexing(
$this->getDesignDocumentName(),
Config::KEY_COUCHBASE_VIEW_USER_USERLIST
);
}
public function triggerViewIndexing($designDocument, $viewName)
{
$options = ['limit' => 1, 'stale' => false];
$res = $this->couchbase->view($designDocument, $viewName, $options);
}
コードに示されているように、stale パラメーターを false に設定して、インデックスが確実に更新されるようにします。
しかし、それは機能していないようです。
この質問を書く前に、Couchbase フォーラムのスレッド、Stackoverflow への投稿、Couchbase の PHP SDK のドキュメント、および Couchbase の一般的なドキュメントを調べました。そのため、 staleがどのように機能するか、どのような制限
がある
かを理解していると思います。
ドキュメントがメモリ内になく、ディスクに書き込まれている (または既に書き込まれている) 場合にのみ、stale が機能するという私の仮定が間違っている場合は、お気軽に修正してください。
私がやろうとしていることがうまくいかないので、私はさまざまなことを試しました.
たとえば、 のデフォルトの動作が である場合stale
、update_after
インデックスの更新を 2 回トリガーすることで問題が解決すると考えました。
まあ、そうではありませんでした。
その他特筆すべき点は、
$this->couchbase->keyDurability($id,$res);
$this->couchbase->observe($id, $res);
で文書を保存した直後にset
、別々に、必死になって組み合わせて使用しました。トリックもしなかった。
ここで間違っているのは、PHP SDK が何らかの形でstale=false
パラメーターを通過しておらず、 keyDurabilityが想定どおりに機能していないということです。新しく作成されたドキュメントをチェックするときにも渡すのでstale=false
、もちろん両方 (トリガーとチェック) が同じバケットとビューで機能します。
または、気付かないうちに何かひどく間違ったことをしています。
何が起こっているのか理解できないので、誰かが私を正しい方向に向けて、できれば何がうまくいかないのか説明してくれたらうれしいです. keyDurability
私の理解によれば、stale
少なくともすべてがうまくいくはずです。