3

Mongoは初めてで、分析の探求に取り組み、スキーマの質問があります。

私は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

ランディングテーブルを使用すると、毎回すべてのデータをそこにスローします。更新はなく、挿入するだけです。そこで、他のテーブルを調べて適切な更新または挿入を行い、ランディングテーブルからエントリを削除するトリガーがあります。

そのため、全体または特定の時間範囲に基づいて、投稿の各属性(国、ブラウザー、インプレッションなど)に戻ってレポートを表示する機能を備えた、高速の挿入/更新が必要です。

Mongoでは、別のドキュメントを埋め込むか、持つべきか、それともまったく異なるスキーマを推測するかによって決まります。埋め込む場合は、ブラウザテーブルなどを更新すると同時に、国を確認してインプレッションを更新する方法を見つけようとしています。それぞれに個別の更新が必要なようです(たとえば、このビスタはドイツのFirefoxを使用していますが、これはフィンランドのFirefoxです-私が見たものからの単一のクエリではそれを行うことはできません)。もう1つのオプションは、異なるドキュメントを作成することですが、これは同じ問題です。コレクションごとに更新を行う必要があります。これは、SQLサーバーの単一呼び出しと比較して大量のネットワークトラフィックです。

レポートを許可しながら、パフォーマンスの迅速な更新/挿入を可能にするこのようなものを設計する方法の提案を歓迎します。

4

1 に答える 1

3

この状況について私が理解していることから、3つのテーブルは要約テーブルであり、day、post_id、およびブラウザーまたは国の場合の特定のメトリックの一意の組み合わせが集計されます。

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

MongoDBを使用すると、書き込みはすべてメモリに書き込まれるため、非常に高速です。非同期で実行することもできます(ファイアアンドフォーゲットスタイル)。

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

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

更新では、アトミック演算子「$ inc」を使用してサーバー上でアトミックにカウントをインクリメントするため、更新を行うためにデータをプルする必要はありません。転送するデータはごくわずかです。

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

于 2012-04-30T15:45:13.293 に答える