私は次のスキーマを持っています:
- クライアントID
- 場所の名前
- 訪問時間
- 購入した // これはリストです
これは非構造化データであるため、MongoDB のようなフラット DB が自然に適合します。MongoDB を使用しています。
このデータには、クライアントの訪問情報がさまざまな場所に保存されます。特定の日の繰り返し訪問数を調べたいとします。繰り返し訪問のロジックは単純です。今日店舗を訪れた人が以前に同じ店舗を訪れていた場合、その人はその店舗のリピート訪問者です。
私は繰り返し訪問者の数を知ることができるロジックを持っています:
クエリ: Select * From Schema order by Location ID ASC , Client ID ASC, 'Time of Visit' ASC
上記のクエリのデータが並べ替えられると、LocationID と Client ID が一致する場合、「訪問時間」の前後の行を比較できます。差が 1 日以上ある場合は、再訪問です。
このデータは非常に大きいため、結合タイプのクエリは非常に非効率的です (MongoDB で可能であったとしても)。
これで、MongoDB に map reduce フレームワークがあることがわかりました。ただし、以前のレコードと現在のレコードを比較し、それに基づいて計算を行った後、map/reduce をトリガーすることは可能ですか?
例 :
- 顧客 A が 1 日目に店舗 B を訪問 // 再訪問なし
- 顧客 A が 1 日目に再び店舗 B を訪問 // まだ再訪問なし
- 顧客 A が 2 日目に店舗 B を訪問 // この顧客 A は 2 日目に再訪問
- 顧客 A が 2 日目に B 店に来店 // 2 日目にはすでに再来店としてカウントされています
顧客 A が 3 日目に店舗 B を訪問 // この顧客は 3 日目に再訪問
顧客 C は 2 日目に店舗 B を訪問します // 顧客 C の最初の訪問であり、再訪問ではありません
- 顧客 C は 2 日目に再び店舗 B を訪問します // 訪問の初日であり、再訪問ではありません
- 顧客 C が 3 日目に店舗 B を訪問 // 3 日目に再訪問
顧客 C が 4 日目に店舗 B を訪問 // 4 日目に再訪問
顧客 D が 5 日目に店舗 B を訪問 // 再訪問ではなく初回訪問
再訪問の最終結果:
- 店舗 B、1 日目: 0 回の再来店
- 店舗 B、2 日目: 2 回の再来店
- 店舗 B、3 日目: 2 回の再来店
- 店舗 B、4 日目: 1 回の再来店
- 店舗 B、5 日目: 0 回の再来店