2011-06-30 4 views
9

CouchDBのデータベース構造では、意見が欲しいだけでなく、少なくともそれより優れたルールが必要です。 1つの文書に関連するすべてのデータを1つの文書にまとめたり、多くの文書にすべての項目の一部を含める方が良いでしょうか?大量のドキュメントと多数のドキュメント

例を挙げて説明しましょう。私は現在、システムから1分間隔で4つのイベントを記録し、event_1、event_2、event_3、even_4と呼ぶことができます。データは、値に関係なく、4つのイベントのそれぞれに格納されます(すべてが正常であっても、常に値を取得します)。

オプション1:グループのイベント、およびドキュメントに新しいタイムスタンプ/値を追加...

{ 
    event_1: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
}, 
{ 
    event_2: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
}, 
{ 
    event_3: [ 
     { timestamp, value }, 
     { timestamp, value }, 
     { timestamp, value }, 
     ...etc 
    ] 
} 
...etc 

オプション2:である(最新の値で、文書の膨大なリストを保持実際にシステムからどのように配信されるのか)

{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
}, 
{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
}, 
{ 
    timestamp: { 
     { event_1, value }, 
     { event_2, value }, 
     { event_3, value }, 
     { event_4, value } 
    } 
} 
...etc 

私は現在、第二のオプションを使用していますが、ベストプラクティスと考えられるものの人々の意見を見て興味があるだけ...私は方法として、オプション1が良いかもしれないと考え始めていました。私は報告しており、結果はイベントごとにグループ化されています(各イベントの折れ線グラフ)。

答えて

8

のCouchDBは、その文書のすべてのリビジョンを保持しますので、私は間違いなくので、それぞれの新しい値と新しい値とものコピーを保存するオプション1を使用して、巨大なメモリ消費が存在することになる2.

あなたのオプションを好むだろう古いもの。オプション2を使用すると、古い値に触れることなく新しい値だけを保存することができます。

+0

@phlogratos、良い点!私はそれについて実際には考えていませんでした。 – crawf

+2

@phlogratosを明確にするために、CouchDBはコンパクションが実行されるまでドキュメントの古いリビジョンだけを保持します。 –

+6

+1。 CouchDBのコミッター、Chris Andersonは、「CouchDBは、太いリストではなく、太いリストを好む」と述べています。文書をテキストファイルで1行に1つずつ想像してみてください。非常に大きな文書をいくつか持つことは、脂肪リストになります。非常に小さな文書をたくさん持つことは、大きなリストになるでしょう。 – JasonSmith

関連する問題