私は現在、CouchDBが私のユースケースに適しているかどうかを判断しようとしています。文書のCouchDBでの複数の結合
最初のセット(のは、企業、それらを呼びましょう)::
{
"_id" : 1,
"name" : "Foo"
}
{
"_id" : 2,
"name" : "Bar"
}
{
"_id" : 3,
"name" : "Baz"
}
文書の第二セット(のは、プロジェクトにそれらを呼びましょう):
{
"_id" : 4,
"name" : "FooProject1",
"company" : 1
}
{
"_id" : 5,
"name" : "FooProject2",
"company" : 1
}
...
{
"_id" : 100,
"name" : "BazProject2",
"company" : 3
}
第三に、私は次のような状況があります一連の文書(インシデントと呼ぶ):
{
"_id" : "300",
"project" : 4,
"description" : "...",
"cost" : 200
}
{
"_id" : "301",
"project" : 4,
"description" : "...",
"cost" : 400
}
{
"_id" : "302",
"project" : 4,
"description" : "...",
"cost" : 500
}
...
したがって、すべての会社複数のインシデントを持つことができます。私がデータをモデル化する理由の1つは、主にSQLのバックグラウンドから来ているため、モデリングが完全に不適切である可能性があるということです。 2番目の理由は、couchdbが提供するREST-APIを使用するだけで、簡単に新しいインシデントを追加したいということです。したがって、インシデントは単一の文書でなければなりません。
しかし、今私は各社の総コストを計算できるようにするための見解を得たいと考えています。 map-reduceとリンクされたドキュメントを使ってビューを簡単に定義することができます。これはプロジェクトごとの合計金額です。しかし、私がプロジェクトレベルにいると、私はそれ以上会社のレベルには達しません。
couchDbを使用するとこれはまったく可能ですか?この種の集計データは、map-reduceの完璧な使用例のように聞こえる。 SQLでは3つのテーブルの結合を行いますが、couchDbのように見えるのは2つのテーブルの結合だけです。
CouchDBで結合を行うことはできません(少なくとも、そうすべきではありません)。リスト関数を使用して隣接行をマージ(照合)できますが、それ以外の場合はパフォーマンスが低下します。 – OrangeDog