潘金莲改变了历史吗-PostgreSQL舆情事件分析应用

更多深度文章,请关注云计算频道:https://yq.aliyun.com/cloud

标签

PostgreSQL , 独立事件分析 , 舆情分析 , 舆情事件 , 相关事件 , 行为轨迹 , 独立事件的流水相关性分析 , PostgreSQL服务端编程实践


背景

潘金莲改变了历史吗?

网上的段子

潘金莲撑开窗户,撑窗户滴棍子掉下去了,于是西门庆看到了,于是他们相遇了。如果潘金莲同学当时没有开窗,那么她就不会遇到西门庆。

类似蝴蝶效应,历史是很有趣的事情。

实际上在我们的生活中也有这样的现象或者需求,比如某些业务系统,会记录事件,流水账那样。

然后业务可能想知道某类事件发生后,接下来发生了什么,比如说房价调控措施出台后的事件,是不是有大量资金涌入股票市场?

说道这里,我要把PostgreSQL数据库搬出来,到底怎么实现上述需求呢?

模拟现实

1. 构建事件输入的表结构

create table event(

2. 插入1000万事件记录,其中5000个事件的种类。

insert into event (class, info , crt_time) select (5000*random())::int::text, 'test', clock_timestamp() from generate_series(1,10000000);

3. 针对事件种类,创建索引

create index idx_event_class on event (class);

需求

查询某个事件发生后,若干个接下来发生的事件

使用函数可以轻松实现这个需求

create or replace function f(

查询举例

查询事件类别为1的事件,它后面发生的2个事件,输出10次分析结果。

postgres=# select * from f('select id from event where class=$$1$$', '1', 2, 10);

利用以上结果,我们就可以知道发生了事件1之后,都发生了其他什么事件。

至于你要拿这些结果进行接下来的分析,可以使用类似关键词的热点分析方法,或者使用PostgreSQL提供的MADlib机器学习库,又或者使用plR进行分析。

总之你肯定有方法找出事件之间的关联关系。

非独立事件的相关性分析

因为前面分析的都是独立事件,即本身就没有相关性的,所以需要通过函数的方法来输出结果。

对于非独立事件,比如说用户逛淘宝的点鼠标的行为,在点了某个商品后,又点了哪些其他商品。

对于非独立事件,在结构设计上,就有关联字段,比如USERID,所以我们可以很方便的进行关联。

使用PostgreSQL递归调用,就可以对非独立事件进行轨迹分析。

例子

《PostgreSQL 递归查询CASE - 树型路径分组输出》

《用PostgreSQL找回618秒逝去的青春 - 递归收敛优化》

《distinct xx和count(distinct xx)的变态递归优化方法 - 索引收敛(skip scan)扫描》

《PostgreSQL 使用递归SQL 找出数据库对象之间的依赖关系》

《PostgreSQL 递归死循环案例及解法》

《PostgreSQL 递归查询一例 - 资金累加链》

《PostgreSQL Oracle 兼容性之 - WITH 递归 ( connect by )》

《递归优化CASE - group by & distinct tuning case : use WITH RECURSIVE and min() function》

《递归优化CASE - performance tuning case :use cursor riggerecursive replace (group by and order by) REDUCE needed blockes scan》

小结

PostgreSQL的递归语法、plpgsql编程,可以很好的满足舆情分析中事件前后事件的分析需求。

再利用PostgreSQL的热点词分析,聚类分析或者使用PostgreSQL提供的MADlib机器学习库,又或者使用plR进行分析。找出事件之间的关联关系。

相关推荐