したがって、BuddyMediaはこれの一部を使用しています。 Gilt Groupeは、Hummingbird でかなりクールなことをしました。 (node.js + MongoDB)。
ソーシャルメディアの分野で大規模なオンライン広告主のために働いたことがあるので、リアルタイムのレポートは本当に苦痛であることを証明できます。 1日に5億回のインプレッションを「ロールアップ」しようとすることはすでに課題ですが、リアルタイムで実行しようとするとうまくいきましたが、いくつかの重大な制限がありました。 (実際には5分遅れたようです:)
率直に言って、このタイプの問題は、私がMongoDBを使い始めた理由の1つです。そして、私だけではありません。人々はあらゆる種類のリアルタイム分析にMongoDBを使用しています:サーバー監視 、集中ログ 、およびダッシュボードレポート。
このタイプのレポートを作成する際の真の鍵は、MongoDBではデータ構造が完全に異なることを理解することです。「集計」クエリを回避するため、クエリと出力グラフが異なります。クライアント側には追加のコーディング作業がいくつかあります。
これが、MongoDBでこれを行うための正しい方向を示す可能性のあるキーです。次のデータ構造を見てください。
{
date: "20110430",
gender: "M",
age: 1, // 1 is probably a bucket
impression_hour: [ 100, 50, ...], // 24 of these
impression_minute: [ 2, 5, 19, 8, ... ], // 1440 of these
clicks_hour: [ 10, 2, ... ],
...
}
ここには明らかにいくつかの調整があり、適切なインデックスがあり、データ+性別+年齢を_id
にマッシュアップしている可能性があります 。しかし、それはMongoDBを使用したクリック分析の基本構造の一種です。インプレッションとクリックを更新するのは本当に簡単です{ $inc : { clicks_hour.0 : 1 } }
。ドキュメント全体をアトミックに更新できます。そして、実際に報告するのはかなり自然なことです。毎時または分レベルのデータポイントを含む配列がすでにあります。
うまくいけば、それはあなたを正しい方向に向けます。