汇总时间表的基本方法是什么?

我在JS中有一个功能,它可以将时间轴聚合为按一定的时间间隔观看网站上的视频。

例如,有3位访客观看了一个视频:

  1. 第一位观众观看了整个视频,例如时间轴为[[0,10]](视频时长为10秒)
  2. 第2位观众观看了一半的视频,例如时间轴是[[0,5]]
  3. 第3位观众观看影片时(例如观看片段[2-7] 2次),例如时间轴是[[0,7],[2,10]]

结果,我得到了以下汇总的时间表以及访问者人数:

[ 
  [ [ -Infinity,0 ],[ [ 0,2 ],3 ],[ [ 2,5 ],4 ],// e.g. fragment watched 4 times
  [ [ 5,7 ],[ [ 7,10 ],[ [ 10,Infinity ],0 ] 
]

JS实现:https://pastebin.com/KcEtHjLe

因此,我通过以下方式将这些数据存储在SQL数据库(AWS Redshift)中:

|--------------|-----------|-----------|-----------|---------------------|
|   visitorId  |  visitId  |  country  |    ...    |       timeline      |
|--------------|-----------|-----------|-----------|---------------------|
|       1      |     1     |    US     |    ...    |      [[0,10]]      |
|--------------|-----------|-----------|-----------|---------------------|
|       2      |     2     |    RU     |    ...    |       [[0,5]]      |
|--------------|-----------|-----------|-----------|---------------------|
|       3      |     3     |    DE     |    ...    |  [[0,10]]  |
|--------------|-----------|-----------|-----------|---------------------|

AWS Redshift不支持用户定义的聚合功能。然后,我创建了一个存储过程,该过程将获取所有行,然后调用我的UDF(Python)函数来合并聚合结果。

有几个问题:

  1. 对用户定义的Python函数的1000次调用耗时约2分钟(即使UDF是1行函数,也会返回一个字符串)
  2. 我将最终聚合结果的字符串长度限制为64K。
  3. 我不确定这是否是汇总大量数据的最佳选择。

我想知道是否有人可以推荐正确的方法。也许我可以使用Yandex ClickHouse代替AWS Redshift?还是其他?

xuan_lw 回答:汇总时间表的基本方法是什么?

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/3136228.html

大家都在问