数据聚合和交易明细查询分析

前端之家收集整理的这篇文章主要介绍了数据聚合和交易明细查询分析前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

需求

医院、供货商、监管单位通过交易明细查询功能查询出指定时间段内历史 交易清单。

监管单位,查询目的是为了监督。
医院、供货商查询目的,查询与自己相关交易信息。

1.2 分析

1.2.1 多表查询

查询表:yycgdmx(采购单明细表)

关联查询表: useryy(内链接)、yycgd(内链接)、usergys(内链接)、ypxx(内链接)、入库信息表(【因为入库的采购单信息少于采购单表信息所以数据不完整,(并不是所有的采购单都入库了)所以使用】外链接)、退货信息(外链接)、结算 信息(外链接)

select 

yycgdmx.*,yycgdrk.rkl,yycgdrk.rkje,yythdmx.thl,yythdmx.thje,yyjsdmx.jsl,yyjsdmx.jsje
 from (
select 
   useryy.mc useryymc,yycgd.bm yycgdbm,yycgd.id yycgdid,usergys.mc usergysmc,yycgdmx.ypxxid,ypxx.*,yycgdmx.cgl,yycgdmx.cgje

  from yycgdmx2014 yycgdmx,yycgd2014 yycgd,useryy,usergys,ypxx
 where yycgdmx.yycgdid = yycgd.id
   and yycgd.useryyid = useryy.id
   and yycgdmx.usergysid = usergys.id
   and yycgdmx.ypxxid = ypxx.id
   )yycgdmx

   --外链接入库信息
   left join yycgdrk2014 yycgdrk on yycgdrk.yycgdid = yycgdmx.yycgdid and yycgdrk.ypxxid = yycgdmx.ypxxid
   --外链接退货信息
   left join yythdmx2014 yythdmx on yythdmx.yycgdid = yycgdmx.yycgdid and yythdmx.ypxxid = yycgdmx.ypxxid

   --外链接结算信息
   left join yyjsdmx2014 yyjsdmx on yyjsdmx.yycgdid = yycgdmx.yycgdid and yyjsdmx.ypxxid = yycgdmx.ypxxid

分析数据量:
采购明细表:上千万
入库信息:上千万
退货信息: 少
结算信息:上千万

三张大数据量的表关联查询,如果作统计,在三张表关联的基础上实现,速度慢,。

设想:如果将四张表的数据全部放在一张表,单表查询速度提高很大。

1.2.2 数据聚合意义

数据聚合的意义:
案例:
统计网站页面的访问量。
统计每一年每一个页面访问量。

实现方法
数据采集:
完成原始数据(统计的来源数据)采集。
用户点击页面时,需要记录用户点击信息(用户客户端ip、访问时间、访问页面的地址)
用户客户端ip:统计用户来源于哪个地区
访问时间:统计出网站访问时段(比如哪些时间段访问量大)
访问页面的地址:统计用户的喜好,哪些页面用户访问多。

如果对原始数据直接进行统计,速度很慢,因为原始数据量很大,所以说要对原始进行数据分析,分析后进行数据聚合。
数据聚合结果:
按分钟聚合:
将原始数据按分钟聚合后存储到单独的分钟聚合表:
聚合时执行一次小范围的统计
时间(年、月、日、时、分)、XXX页面、访问量(这一分钟的访问总量)
时间(年、月、日、时、分)、XXX页面、访问量(这一分钟的访问总量)
按小时聚合:
将原始数据按小时聚合后存储到单独的小时聚合表:
从分钟聚合表中执行一次小范围的统计
时间(年、月、日、时)、XXX页面、访问量(这一小时的访问总量)
时间(年、月、日、时)、XXX页面、访问量(这一小时的访问总量)
….
按天聚合:
近年聚合:

通常情况下,单独开发统计系统,后台开始定时任务进行专门数据采集、数据分析、数据聚合。

1.2.3 本系统数据聚合方法

目标:将采购单明细信息、入库信息、退货信息、结算 信息聚合到一张表中,提高查询统计的速度。

设想:在采购单明细表中添加入库信息、退货信息。。。。字段?
这种方法不合理,将统计分析业务功能和采购业务功能使用一张表存储信息,耦合性较强,可扩展性较差。

采用方案:
新创建一张交易明细表YYBUSINESS+4位年份:
记录采购明细、入 库信息、退货信息、结算 信息。
唯一约束:采购单id和药品id

聚合方法如下:


1.2.4 使用触发器进行数据同步

如果原始表和目标表在一个数据库中,建议使用触发器进行数据同步:
原始表插入时向目标表插入
原始表修改时更新目标表记录
原始表删除删除目标表记录

注意:如果触发器仅仅数据同步,建议使用触发器,如果触发器中有业务逻辑,不建议使用触发器。
:new:在触发器中的一个关键字,表示新记录。
在insert和update触发器中使用。

在delete触发器中:old,:old表示旧数据。

猜你在找的设计模式相关文章