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

标签 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}
]

我在界面中显示每个用户的组,但我还想显示与每个组匹配的记录(访问者)的数量。

可以看出,网站访问者可以根据他们的行为动态地包含/排除在用户组中。

我考虑过使用物化 View 来保存所有组的映射和匹配项的计数,每 30 秒更新一次。然而,我担心这会非常低效。

有没有更好的方法?

谢谢

最佳答案

这实际上取决于涉及的记录数量,以及每 30 秒重新生成实体化 View 对您的系统的影响有多大。即,如果物化 View 在 5 秒左右重新生成,则问题不大。如果在用尽处理器和磁盘时需要 20 秒,那么这是一个非常糟糕的主意。

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

关于sql - 自定义用户提供的过滤器,显示每个匹配项的数量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37840660/

相关文章:

sql - Visual Studio 2013 SQL Server 数据库项目构建失败

mysql - 语法错误: missing `closing parenthesis` MySQL

mysql - SQL 逻辑不等于

sql - 如何将结果集转换为数组?

PHP - 执行我的 sql 查询时出现问题

mysql - sql如何将两个表中的三个查询合并为一个查询

sql - 仅当列值与其他列不同时才选择

postgresql - 两个 DELETE 查询如何在 Postgres 中死锁?

ruby-on-rails - 当我从未使用过 mongodb 时,Rails App 尝试使用 mongodb

javascript - 类型错误 : Invalid connection Details (PG-Promise)