Search:

Search all manuals
Search this manual
Manual
Couchbase Server マニュアル 2.0
Community Wiki and Resources
Couchbase Server 2.0をダウンロード
Couchbase 開発者ガイド 2.0
クライアントライブラリ
Couchbase Server フォーラム
Additional Resources
Community Wiki
Community Forums
Couchbase SDKs
Parent Section
D ビューのトラブルシューティング(技術的背景)
Chapter Sections
Chapters

D.3. クエリ応答でのデータ欠落や間違い(ユーザ問題)

たとえば、_statsのreduce関数を使用したビューを定義します。ビューをクエリすると、結果が毎回空になってしまうような例として:

shell> curl -s 'http://localhost:9500/default/_design/dev_test3/_view/view1?full_set=true'
{"rows":[
]
}

数分または数時間にわたりこのクエリを何度も繰り返しても、常に空の結果セットが返却されるような場合です。

stale=falseでビューを照会しようとすると、次のようになります:

shell> curl -s 'http://localhost:9500/default/_design/dev_test3/_view/view1?full_set=true&stale=false'
{"rows":[
],
"errors":[
{"from":"local","reason":"Builtin _stats function
 requires map values to be numbers"},
{"from":"http://192.168.1.80:9502/_view_merge/?stale=false","reason":"Builtin _stats function requires map values to be
 numbers"},
{"from":"http://192.168.1.80:9501/_view_merge/?stale=false","reason":"Builtin _stats function requires map values to be
 numbers"},
{"from":"http://192.168.1.80:9503/_view_merge/?stale=false","reason":"Builtin _stats function requires map values to be
 numbers"}
]
}

その後、デザインドキュメントを見て、値が数値ではないので動作していないことを確認します。

{
   "views":
   {
       "view1": {
           "map": "function(doc, meta) { emit(meta.id, meta.id); }",
           "reduce": "_stats"
       }
   }
}

1つの重要な問題は、stale=falseを使用したクエリを実行するときは、エラーを確認できますが、stale=update_after(デフォルト)またはstale=okを使用したクエリを実行するときは、確認できないのはなぜかということです。その答えは簡単です:

  1. stale=falseは、インデックスの更新/構築のトリガーを意味し、更新/構築が完了するまで待ち、その後ビューの結果のストリーミングを開始します。この例では、インデックスのビルド/更新が失敗するので、クライアントはエラーを取得し、なぜ失敗したのかを失敗したすべてのノードから読み取ることができます。

  2. stale=update_afterは、すぐにインデックスの内容のストリーミングを開始し、その後(インデックスがすでに最新のものでない場合)インデックの更新をトリガとすること意味し、クエリ応答には、stale=falseシナリオで発生するようなインデックスエラーを示しません。この特定の例では、エラーは初期インデックスの構築時に発生しているので、ビューのクエリがシステムに到着したときにインデックスが空になっていて、空の結果セットがかえって来ています。

  3. stale=okは、インデックスの更新をトリガとしないという点を除き、(2)と非常によく似ています。

最後に、ユーザのMap/Reduce関数に関連するインデックス構築/更新でのエラーは、ノードごとのmapreduce_errors.#と一致するファイル名の専用のログファイルで確認できます。 たとえば、ノード1の*mapreduce_errors.1ファイルでは次のエラーを出力しています:

[mapreduce_errors:error,2012-08-20T16:18:36.250,n_0@192.168.1.80:<0.2096.1>] Bucket `default`, main group `_design/dev_test3`,
 error executing reduce
function for view `view1'
   reason:                Builtin _stats function requires map values to be
numbers