2012-04-28 10 views
2

Mongoに新しく、analyticsクエストに参加し、スキーマに関する質問があります。MongoDB Analyticsスキーマ

私は4つのテーブルを持っているSQLサーバから来ている...着陸テーブルで

stats_landing_table 
------------------- 
id 
post_id 
visit_date 
country 
browser 
impressions 

stats_geo_table 
--------------- 
id 
post_id 
date 
country 
country_count 

stats_browser_table 
------------------- 
id 
post_id 
date 
browser 
browser_count 

stats_impressions_table 
----------------------- 
id 
post_id 
date 
impression_count 

は - ちょうど挿入し、ノーアップデート - 私はちょうどそこに毎回すべてのデータを投げます。そこに私は他のテーブルを見て、適切な更新または挿入を行い、その後エントリfronの着陸テーブルを削除するトリガーを持っています。

したがって、全体または特定のtimerangeに基づいて、ポストの各属性(国、ブラウザ、インプレッションなど)に関するレポートを表示して戻す機能を備えた、FASTの挿入/更新が必要です。

Mongoでは、別のドキュメントを埋め込む必要があるのか​​、それとも別のドキュメントを使用するのかは、まったく異なるものです。私が埋め込んでいれば、私はブラウザテーブルのようなものをどのように更新するのか把握しようとしていますが、同時に国をチェックしてインプレッションを更新しています。それは、私はそれぞれのことについて別々のアップデートが必要なように聞こえます(フィンランドのfirefoxですが、このvistorはドイツのfirefoxを使用しています。もう1つの選択肢は別のドキュメントを作成することですが、それは同じ問題です。コレクションごとに更新する必要があります。これは、ネットワークトラフィックとSQLサーバーの1回の呼び出しの関係です。

このように、パフォーマンスの更新/挿入を迅速に行うことができるように、レポートを作成できるようにするにはどうすればよいですか。

+0

nosqlチュートリアルを見て、埋め込まれ正規化されたドキュメント(テーブル)を参照してください。 – hpavc

答えて

3

私がこの状況を理解しているところから、3つのテーブルは、ブラウザや国の場合のday、post_id、および指定された指標のユニークな組み合わせが集計されるサマリーテーブルです。

今日はそのままにして、それを多かれ少なかれキューとして使用するため、挿入テーブルをすべてスキップします。

MongoDBでは、書き込みはすべてメモリに書き込まれるため、非常に高速です。それは非同期に行うこともできます(火をつけてスタイルを忘れる)。

一意の日付とpost_idごとに新しい文書を作成します。ブラウザには2つの配列があり、キーは国コードまたはブラウザであり、値はカウントです。ドキュメントには、インプレッション数のフィールドもあります。

1回の訪問で1つのドキュメントが更新され、クエリが簡単になります。

この更新では、アトミック演算子 "$ inc"を使用してカウントを原子的に増やし、更新を行うためにデータを取り込む必要はありません。転送するデータ量はごくわずかです。

それは質問に答えますか?

+0

それは実際に私がやったことはかなりです。 – QuaffAPint

関連する問題