2013-06-03 12 views
6

私の現在のIDキーは3または4つのセグメントから含まれています何より良い/より速く、複雑なCouchbaseのIDのまたはインラインドキュメントタイプ=「my_document_type」

namespace::my_key::id 
namespace::my_key::my_second_key::id 

ソリューション1. 使用する複雑なID年代やIDで検索することでビューを作成しますすべての文書のための鍵

function (doc, meta) { 

    if(meta.id.indexOf("::my_key::") !== -1){ 
    emit([doc.source_id], [doc.name,doc.title,doc.ui]); 
    } 


} 

ソリューション2. ため

それらを使用して、「タイプ」、「名前空間」 そしてcreatの景色のようなフィールドを追加
function (doc, meta) { 

    if(doc.type=='my_key'){ 
    emit([doc.source_id], [doc.name,doc.title,doc.ui]); 
    } 


} 

私は解決策2を選択した場合、 私は自分のアプリケーションのidの維持する必要があり、おそらく私は解決策のように行います。1.

誰でもIDを命名し、それらからのビューを作成した経験を持っていますか? これらのソリューションのそれぞれでどのような問題が発生しましたか。 または、indexOf()関数はお勧めできませんか?

+1

質問を投稿したり、[couchbase forums](http://www.couchbase.com/forums/)にリンクを張ることもできます。 stackoverflowに登録されていないcouchbase開発者もいます。 – m03geek

+0

@xqterryによると、あなたのアプリケーションがビューなしで必要なものすべてを処理できるならば、最初の解決策だけを使うべきです。 – m03geek

答えて

4

Couchbaseはバックグラウンドでビューインデックスを作成するため、stale=falseパラメータを使用しないと、両方のソリューションのビューからドキュメントを取得する際に同じパフォーマンスが得られます。

最初の解決策では、2つ目の解決策では、metaではなくdocにタイプを書き込むことができるため、おそらく長さが長いキーを2番目の解決策よりも取得できます。 Couchbaseはすべてのメタデータをmemeoryに保持しているので、長いキーを使用すると、より多くのメモリが必要になります。またindexOf==または===よりも遅いので、インデックスの作成に時間がかかります。

私にとっては、2番目の解決策が優れています。

また、emit(doc.source_id, null)を発行し、クライアントライブラリでIncludeDocsを使用することで、ビューのディスク使用率を向上させることができます。サイズが小さくなり、パフォーマンスにほとんど影響しません。

「ベストプラクティス」のためのlinkもあります。それも助けになるかもしれない。

1

私は私の場合(ソーシャルゲームのバックエンドサーバ)では、ソリューション1.

のように使用していますが、キー名は、例えば、保存されたデータ型を示し、「プレーヤー:{ZONE_ID}:{UID}」、 "アプリケーションが必要としていることを知っていて、値のコンテンツからの情報をリフレクションに必要としないため、ドキュメントのtypeフィールドを追加しませんでした。パフォーマンス/スピードについて

、申し訳ありません私はどんな提案を与えることができなかった、私はビューのクエリデータのない要件を持っていない、私が作成したすべてのビューは、開発&バックアップ環境で動作し、データanalysitic &統計の仕事は、他のシステムではありませんで実行されますCouchbaseで。

関連する問題