自定义用户提供的过滤器,显示每个过滤器的匹配数

时间:2016-06-15 16:13:08

标签: sql postgresql

我有一个应用程序,用户可以实时跟踪他们的网站访问者。用户可以创建组,它基本上是一个JSON对象(过滤器)数组,可用于过滤资源(此处为网站访问者)。

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秒更新一次。我担心这会非常低效。

有更好的方法吗?

由于

1 个答案:

答案 0 :(得分:0)

这实际上取决于所涉及的记录数量,以及对系统的影响,它将每30秒重新生成一次物化视图。即如果物化视图在5秒左右再生,那就不是问题了。如果最大化处理器和磁盘需要20秒,那么这是一个非常糟糕的主意。

另一种方法是在表中实现触发器(或所有相关表中的触发器)以在适当的情况下增加/减少计数器,并在Groups表中触发,以便在添加新记录或条件时计算当前值改变了。