2016-06-15 17 views
1

私はユーザーがリアルタイムでウェブサイト訪問者を追跡できるアプリケーションを持っています。ユーザーは、基本的にリソース(ここではウェブサイトの訪問者)をフィルタリングするために使用できるJSONオブジェクト(フィルタ)の配列であるGroupsを作成できます。グループのカスタムフィルタを提供し、それぞれの一致数を表示します

Group(user_id:id, name:string, filters: JSONB[type, field, value]) 

例:

name: "my group" 
filters: [ 
    {field: "sessions", type: "greater_than", value: 5}, 
    {field: "email", type: "contains", value: "@example.com} 
] 

私は、インタフェース内のユーザーのグループのそれぞれを表示していますが、私はまた、各グループに一致するレコード(訪問者)の量を表示したいと思います。

このように、ウェブサイトの訪問者は、行動に応じてユーザーのグループに動的に追加/除外される可能性があります。

マテリアライズドビューを使用してすべてのグループのマッピングと30秒ごとに更新される一致の数を維持することを考えました。しかし、私はこれが非常にうんざりしてしまうのではないかと心配しています。

良いアプローチがありますか?

おかげ

答えて

0

それは本当に関係レコードの数に依存し、どのくらいあなたのシステムへの影響のそれはマテリアライズド・ビューを再生成されます、30秒ごと。つまり、マテリアライズドビューが5秒以内に再生される場合、大きな問題ではありません。プロセッサやディスクを最大限に活用しているうちに20秒かかると、それは本当に悪い考えです。

代わりに、カウンタを増減するためにテーブル内のトリガー(または関連するすべてのテーブル内のトリガー)を実装し、新しいレコードが追加されるたびに現在の値を計算するためのグループテーブル内のトリガー条件が変更されます。

+0

トリガーアプローチの問題点は、ビジターがタイムスタンプによる明示的なデータ変更を行わずに別のグループに移動できることです。これはちょうど経過時間に基づいているためです – Tarlen

関連する問題