我们正在探索使用 Bigquery 来存储和分析数以亿计的代表用户会话的日志条目。源原始日志条目包含“连接”日志类型和“断开”日志类型。
我们可以选择在将日志提取到 bigquery 之前对其进行处理,以便每个会话有一个条目,其中包含会话开始 TIMESTAMP 和“持续时间”值,或者单独插入每个日志条目并在分析阶段计算会话时间. 让我们想象一下我们的表模式是这样的:
sessionStartTime: TIMESTAMP,
clientId: STRING,
duration: INTEGER
或者(在我们为每个会话存储两个日志条目的情况下:一个连接和一个断开连接):
time: TIMESTAMP,
type: INTEGER, //enum, 0 for connect, 1 for disconnect
clientId: STRING
我们的问题是我们找不到使用 bigquery 获取并发用户的方法:理想情况下,我们将能够编写一个查询,通过时间戳“桶”(假设每分钟)对会话表进行分区,并执行一个查询,该查询将为我们提供每个并发用户分钟在一定的时间范围内。
考虑与日志条目相关的并发的简单方法是,在任何时候使用函数 f(t) = x0 + connected(t) - disconnects(t) 计算它们,其中 x0 是初始并发用户数(在时间 t0),并且 t 是“时间戳”桶(在此示例中以分钟为单位)。
有人可以推荐一种方法吗?
谢谢!