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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云原生数据库 PolarDB 分布式版,标准版 2核8GB
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
简介:

标签

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


背景

潘金莲改变了历史吗?

pic

网上的段子

潘金莲撑开窗户,撑窗户滴棍子掉下去了,于是西门庆看到了,于是他们相遇了。如果潘金莲同学当时没有开窗,那么她就不会遇到西门庆。   
  
如果没有遇到西门庆,那么她就不会被迫出轨,那样武松哥哥就不会怒发冲冠为红颜,这样他就不会奔上梁山。   
  
武松就不会奔上梁上,不会奔上梁山之后,哪怕水泊梁山107将依旧轰轰烈烈,但是宋江和方腊的战役,方腊也不会被武松单臂擒住。   
  
只要武松治不了方腊,枭雄方腊就能取得大宋的江山。   
  
只要方腊取得了大宋的江山,就不会有靖康耻,不会有偏安一隅,不会有金兵入关。   
  
金兵不入关,就不会有后来的大清朝。   
  
没有大清朝,当然也不会有后来的闭关锁国,没有慈禧太后。   
  
没有慈禧太后,没有闭关锁国,自然也不会有八国联军侵略中国啊,不会有神马鸦片战争啊。   
  
没有这些杀千刀的战争和不平等条约,中国说不定凭借五千年的文化首先就发展资本主义了。   
  
发展了资本主义,发展到今天,说不定中国早就超过了美国、小日本神马的,赶超了几百年了。已经是最发达的最强悍的国家了。   
  
所以,谁穿越一下告诉潘金莲,你有事没事开神马窗户啊!!!   

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

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

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

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

模拟现实

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

create table event(  
id serial8 primary key,   -- 自增序列,用于区分事件的先后顺序  
class text,   -- 事件类型  
info text,    -- 事件描述  
crt_time timestamp        -- 事件发生的时间  
);  

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(  
sql text,   -- 查询要分析的目标事件对应的ID  
v_class text,   -- 目标事件的类别  
v_n int8,   -- 要查看多少个接下来发生的事件  
v_limit int  -- 分析几次事件,如果要输出所有的,那么可以输入一个较大值。  
) returns setof event as $$  
declare  
  v_id int8;  
begin  
  for v_id in execute sql loop  
    return query select * from event where id>=v_id order by id limit v_n+1;  
    v_limit := v_limit - 1;  
    if v_limit<=0 then  
      return;  
    end if;  
  end loop;  
end;  
$$ language plpgsql strict;  

查询举例

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

postgres=# select * from f('select id from event where class=$$1$$', '1', 2, 10);  
  id   | class | info |          crt_time            
-------+-------+------+----------------------------  
  1592 | 1     | test | 2017-03-31 15:07:23.77348  
  1593 | 3032  | test | 2017-03-31 15:07:23.773483  
  1594 | 3409  | test | 2017-03-31 15:07:23.773486  
  2784 | 1     | test | 2017-03-31 15:07:23.777265  
  2785 | 2819  | test | 2017-03-31 15:07:23.777268  
  2786 | 87    | test | 2017-03-31 15:07:23.777271  
 12176 | 1     | test | 2017-03-31 15:07:23.807489  
 12177 | 2586  | test | 2017-03-31 15:07:23.807491  
 12178 | 4101  | test | 2017-03-31 15:07:23.807494  
 19398 | 1     | test | 2017-03-31 15:07:23.83072  
 19399 | 1179  | test | 2017-03-31 15:07:23.830723  
 19400 | 4237  | test | 2017-03-31 15:07:23.830726  
 19571 | 1     | test | 2017-03-31 15:07:23.831296  
 19572 | 4368  | test | 2017-03-31 15:07:23.831299  
 19573 | 2313  | test | 2017-03-31 15:07:23.831302  
 24708 | 1     | test | 2017-03-31 15:07:23.847794  
 24709 | 1327  | test | 2017-03-31 15:07:23.847797  
 24710 | 4584  | test | 2017-03-31 15:07:23.847799  
 29756 | 1     | test | 2017-03-31 15:07:23.864234  
 29757 | 4386  | test | 2017-03-31 15:07:23.864237  
 29758 | 3044  | test | 2017-03-31 15:07:23.864239  
 30224 | 1     | test | 2017-03-31 15:07:23.865765  
 30225 | 4704  | test | 2017-03-31 15:07:23.865768  
 30226 | 332   | test | 2017-03-31 15:07:23.865771  
 32004 | 1     | test | 2017-03-31 15:07:23.871554  
 32005 | 219   | test | 2017-03-31 15:07:23.871557  
 32006 | 3548  | test | 2017-03-31 15:07:23.871559  
 36472 | 1     | test | 2017-03-31 15:07:23.886097  
 36473 | 640   | test | 2017-03-31 15:07:23.8861  
 36474 | 1139  | test | 2017-03-31 15:07:23.886103  
(30 rows)  

利用以上结果,我们就可以知道发生了事件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\trigger\recursive replace (group by and order by) REDUCE needed blockes scan》

小结

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

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

相关实践学习
使用PolarDB和ECS搭建门户网站
本场景主要介绍基于PolarDB和ECS实现搭建门户网站。
阿里云数据库产品家族及特性
阿里云智能数据库产品团队一直致力于不断健全产品体系,提升产品性能,打磨产品功能,从而帮助客户实现更加极致的弹性能力、具备更强的扩展能力、并利用云设施进一步降低企业成本。以云原生+分布式为核心技术抓手,打造以自研的在线事务型(OLTP)数据库Polar DB和在线分析型(OLAP)数据库Analytic DB为代表的新一代企业级云原生数据库产品体系, 结合NoSQL数据库、数据库生态工具、云原生智能化数据库管控平台,为阿里巴巴经济体以及各个行业的企业客户和开发者提供从公共云到混合云再到私有云的完整解决方案,提供基于云基础设施进行数据从处理、到存储、再到计算与分析的一体化解决方案。本节课带你了解阿里云数据库产品家族及特性。
目录
相关文章
|
关系型数据库 物联网 PostgreSQL
沉浸式学习PostgreSQL|PolarDB 11: 物联网(IoT)、监控系统、应用日志、用户行为记录等场景 - 时序数据高吞吐存取分析
物联网场景, 通常有大量的传感器(例如水质监控、气象监测、新能源汽车上的大量传感器)不断探测最新数据并上报到数据库. 监控系统, 通常也会有采集程序不断的读取被监控指标(例如CPU、网络数据包转发、磁盘的IOPS和BW占用情况、内存的使用率等等), 同时将监控数据上报到数据库. 应用日志、用户行为日志, 也就有同样的特征, 不断产生并上报到数据库. 以上数据具有时序特征, 对数据库的关键能力要求如下: 数据高速写入 高速按时间区间读取和分析, 目的是发现异常, 分析规律. 尽量节省存储空间
784 1
|
3月前
|
Oracle NoSQL 关系型数据库
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
主流数据库对比:MySQL、PostgreSQL、Oracle和Redis的优缺点分析
644 2
|
人工智能 关系型数据库 Serverless
阿里函数计算FC、文件存储NAS和RDS PostgreSQL的应用体验报告
本次体验的目的,旨在详细介绍如何通过阿里函数计算FC部署ChatGLM6B大语言模型,并借助文件存储NAS和RDS PostgreSQL搭建一个AI知识库问答应用,以实现PDF、TXT、HTML等文件和URL类型资料的轻松读取和处理。
313 62
|
关系型数据库 定位技术 分布式数据库
沉浸式学习PostgreSQL|PolarDB 18: 通过GIS轨迹相似伴随|时态分析|轨迹驻点识别等技术对拐卖、诱骗场景进行侦查
本文主要教大家怎么用好数据库, 而不是怎么运维管理数据库、怎么开发数据库内核.
1330 1
|
7月前
|
存储 JSON 关系型数据库
PostgreSQL Json应用场景介绍和Shared Detoast优化
PostgreSQL Json应用场景介绍和Shared Detoast优化
|
7月前
|
存储 关系型数据库 MySQL
TiDB与MySQL、PostgreSQL等数据库的比较分析
【2月更文挑战第25天】本文将对TiDB、MySQL和PostgreSQL等数据库进行详细的比较分析,探讨它们各自的优势和劣势。TiDB作为一款分布式关系型数据库,在扩展性、并发性能等方面表现突出;MySQL以其易用性和成熟性受到广泛应用;PostgreSQL则在数据完整性、扩展性等方面具有优势。通过对比这些数据库的特点和适用场景,帮助企业更好地选择适合自己业务需求的数据库系统。
1198 4
|
7月前
|
关系型数据库 数据库 PostgreSQL
Docker【应用 03】给Docker部署的PostgreSQL数据库安装PostGIS插件(安装流程及问题说明)
Docker【应用 03】给Docker部署的PostgreSQL数据库安装PostGIS插件(安装流程及问题说明)
452 0
|
7月前
|
关系型数据库 数据库 PostgreSQL
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
PostgreSQL【应用 01】使用Vector插件实现向量相似度查询(Docker部署的PostgreSQL安装pgvector插件说明)和Milvus向量库对比
667 1
|
7月前
|
SQL 关系型数据库 MySQL
PostgreSQL【异常 01】java.io.IOException:Tried to send an out-of-range integer as a 2-byte value 分析+解决
PostgreSQL【异常 01】java.io.IOException:Tried to send an out-of-range integer as a 2-byte value 分析+解决
505 1
|
7月前
|
SQL 关系型数据库 C语言
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
PostgreSQL【应用 03】Docker部署的PostgreSQL扩展SQL之C语言函数(编写、编译、载入)计算向量余弦距离实例分享
106 0

热门文章

最新文章

相关产品

  • 云原生数据库 PolarDB
  • 云数据库 RDS PostgreSQL 版