我有一个应用程序,用户可以实时跟踪他们的网站访问者。用户可以创建组,它基本上是一个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秒更新一次。我担心这会非常低效。
有更好的方法吗?
由于
答案 0 :(得分:0)
这实际上取决于所涉及的记录数量,以及对系统的影响,它将每30秒重新生成一次物化视图。即如果物化视图在5秒左右再生,那就不是问题了。如果最大化处理器和磁盘需要20秒,那么这是一个非常糟糕的主意。
另一种方法是在表中实现触发器(或所有相关表中的触发器)以在适当的情况下增加/减少计数器,并在Groups表中触发,以便在添加新记录或条件时计算当前值改变了。