潘金莲改变了历史吗-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进行分析。找出事件之间的关联关系。