2012-03-16 4 views
2

私はcouchdbの関係を翻訳することを読んだことがありますが、多くの人を表すために適切なマップ関数を思いつくことができません。私がしようとしているcouchdb多くの頭痛

{name:"link1", link: true, from: "A", to: "B"} 
{name:"link2", link: true, from: "A", to: "C"} 

{name:"whatever1", from:"A"} 
{name:"whatever2", from:"A"} 
{name:"whatever3", to:"B"} 
{name:"whatever4", to:"C"} 

との関係を定義するドキュメントのいくつかの他のタイプ:

はあなたには、いくつかのドキュメントを(実際のモデル、これは一例ではありません注意してください)持っている想像してみて私に組み合わせのリストを返す正しい関数を思い付く:

{ name: "link1", 
    froms: ["whatever1", "whatever2"], 
    tos: ["whatever3"] 
} 

どのようにそのようなマップを書く、私は私のドキュメントの構造を変更する必要がありますか?ガイドのためにリンクしたいだけで、投稿しないでください。

+0

あなたの問題を理解してください。リンクやwhatervers?あなたが質問を変えたところで... – okurow

答えて

5

一般的には、といっても、多対多は単に在庫CouchDBでは不可能です。あなたは砂糖コーティングなしでまっすぐにしたいと思う誰かのように思えるので、そうです。

関連データの結合はCouchDBの強みではなく、もちろんリレーショナルデータベースの主な強みです。しかし、この事実は、ほとんどの人が「直感的に」彼らのデータを関係的にモデリングするので、少し泥沼になります。

HTTP API、フレキシブルクラスター化、マルチマスター、またはオフライン操作など、CouchDBに支払う必要があるコストは正確です。documents are simple, and unrelated to each otherの同期機能が可能です。

ただし、CouchDBのもう1つの強みは並行性です。だから既にCouchDBの他の機能を楽しんでいて、この一面を乗り越える必要があるなら、単にクライアント側に "参加"するだけかもしれません。

より単純なマップ関数は、すべてのfroms(key:["from", "A"], value:"whatever1")とtos(key:["to","B"], value:"whatever3")を単に出力します。したがって、あなたは?key=["from","A"]でそれを照会し、すべての値のいずれかの値に対してwhaterversのリストを得ることができます。各リンクの文書については

、あなたがチェックするからに値を持っています。オプション?key=["from","A"]

  • ?key=["to","B"]
  • との観点で

    1. ビュー:このように、両方を(一度に一つ、または同時のいずれか、例えばJavaScriptで非常に簡単です)問い合わせます両方の結果が返ってくると、そのリンクに対する回答が得られます。

      は、CouchDB(インデックススキャン)からの効率的な要求を行うため、CouchDBは非常に高速な要求と多数の同時接続をサポートできます。

      これは簡単ですか? Javascriptでは、それほど悪くはありませんが、基本的には簡単ではありません。この質問は根本的にCouchDBの穀物と関係のある穀物との関係で行われています。(私はこのような問題のために霧雨について個人的に興奮しています)

    +1

    返事に感謝しています。ソファはすでに私にたくさんのことをもたらしています。私はそれにもっと力を入れていきたいと思っています。あなたが記述する解決策は、私が実装を強化するものに近いです。しかし、ここでさまざまなブログを読んで、私は本当に私は単一の要求/ビュー/リストですべてを得る可能性の把握していたが。 –

    関連する問題