2012-01-14 5 views
7

この質問は、必ずしもCouchbase 2.0プレビューを開発する必要はありませんが、私はそれが新しいCouchbase製品の調査に役立つかもしれないと思います。Couchbaseデータモデリング - ドキュメント指向

私はデータモデリングに関するアドバイスを探しています。 CouchbaseをRealtime Analyticsに使用する可能性を考慮して調査中です。

しかし、実際のデータをどのようにモデル化するのが最適かに関するドキュメントは見つかりません。

私はシナリオを提案し、コミュニティがモデル化する方法についてコミュニティが私を助けたり、いくつかのアイデアについて話し合うことができれば、それは非常に有用でしょうか?これは私たちの製品の代表ではないと私は私たちのために私達のモデリングを解決するために人々を求めていないです質問が議論のためのより多くのものです

は/顧客が特定の日に製品の購入を行うことを前提としています

注意商品には、ID、名前、説明、価格などの情報があり、購入は日付で実行されます。

最初の要件は、2つの日付間のすべての購入をカウントできることです。 1日のうちに100,000回以上の購入がある可能性があります - これはかなり大きなビジネスです)

いずれかの構文が間違っている場合は、私に知らせてください - すべてのアドバイスや援助を歓迎します。

我々はそう(これはおそらく完全に間違った)のようなデータに何かをモデル化した場合:製品と

購入

{ 
    "_id" : "purchase_1", 
    "_rev" : "1-1212afdd126126128ae", 
    "products" : [ 
     "prod_1" : { 
      "name" : "Milk", 
      "desc" : "Semi-skimmed 1ltr", 
      "price" : "0.89" 
     }, 
     "prod_7568" : { 
      "name" : "Crisps", 
      "desc" : "Salt and Vinegar", 
      "price: "0.85" 
     } 
    ] 
    "date" : "2012-01-14 14:24:33" 
} 

{ 
    "_id" : "purchase_2", 
    "_rev" : "1-1212afdd126126128ae", 
    "products" : [ 
     "prod_89001" : { 
      "name" : "Bread", 
      "desc" : "White thick sliced", 
      "price: "1.20" 
     } 
    ] 
    "date" : "2012-01-14 15:35:59" 
} 

だから私たちはそれぞれの購入を見ることができる文書のレイアウトを与えられ、私たちが見ることができますその購入に含まれていた商品 - 2つの日付の間にすべての購入を数えるにはどうすればよいですか?また、日付の降順で2つの日付間のすべての購入のログを確認するにはどうすればよいですか?

これはCouchbaseに適したものですか?

二つの日付と顧客との間の購入の数十万人が...レポートのために、私は誰もが経験していると確信しているの.asを待つことを好きではないがあるかもしれません。

はそれがINCRを使用するのが最善だろう)もしあれば、データのモデリングについてどう思いますか?

これを読んでくださった皆様に感謝します。可能であれば、実世界のモデリング問題の例をさらに提供するために、このことを説明したいと思います。

あなたがキーとして日付フィールドを使用してビューを作成します地図機能を書くことができ、最も簡単な場合にはジェームズ

+0

こんにちはすべて、 CouchbaseのIRCチャンネルに役立つユーザーは「CouchConfの世界ツアーのページの方向に私を指摘しています。 各ビデオのプレゼンテーションと各会議のスライドがあります。 http://www.couchbase.com/couchconf-world-tour 特に、サンフランシスコのものには多くのサポート資料があります。 http://www.couchbase.com/couchconf-sanfrancisco – eggsy84

答えて

6

多少変更された文書のデザインに:あなたは、必要に応じて、日付によって購入をまとめるだろう削減機能を追加することができ

function(doc) { 
    for (var product in doc.products) { 
    emit(doc.date, doc.products[product].price); 
    } 
} 

{ 
    "_id": "purchase_1", 
    "_rev": "2-c09e24efaffd446c6ee8ed6a6e2b4a22", 
    "products": [ 
     { 
      "id": "prod_3", 
      "name": "Bread", 
      "desc": "Whole wheat high fiber", 
      "price": 2.99 
     } 
    ], 
    "date": "2012-01-15 12:34:56" 
} 

{ 
    "_id": "purchase_2", 
    "_rev": "2-3a7f4e4e5907d2163d6684f97c45a715", 
    "products": [ 
     { 
      "id": "prod_1", 
      "name": "Milk", 
      "desc": "Semi-skimmed 1ltr", 
      "price": 0.89 
     }, 
     { 
      "id": "prod_7568", 
      "name": "Crisps", 
      "desc": "Salt and Vinegar", 
      "price": 0.85 
     } 
    ], 
    "date": "2012-01-14 14:24:33" 
} 

あなたのマップ機能は次のようになります。

function(keys, values) { 
    return sum(values); 
} 

次に、startkeyパラメータとendkeyパラメータを使用してビューをクエリできます。

http://localhost:5984/couchbase/_design/Products/_view/total_price_by_date?startkey="2012-01-01"&endkey="2012-01-31"&group=true 

ビューを照会からの出力は次のようになります。

{"rows":[ 
{"key":"2012-01-14 14:24:33","value":4.94}, 
{"key":"2012-01-15 12:34:56","value":2.99} 
]} 

または全体の日付範囲の合計を取得するには、グループパラメータを削除:

{"rows":[ 
{"key":null,"value":7.930000000000001} 
]} 

お役に立てば幸いです。

- ジョン

+1

素晴らしい回答ありがとうございます!これは、couchbaseでデータをモデル化する一般的な方法ですか?例えば。私が知りたいのは、1日にどれだけ多くの製品が販売されたか(合計値ではない)ということです。これは通常、モデル化され、ビューとマップ/リダクションで計算されるか、それを読むには - カウンタ(incr)関数などを使って? – eggsy84

関連する問題