关于医药采购系统性能优化的设计与实现

来源 :电脑知识与技术 | 被引量 : 0次 | 上传用户:zhaoyuanhappy2008
下载到本地 , 更方便阅读
声明 : 本文档内容版权归属内容提供方 , 如果您对本文有版权争议 , 可与客服联系进行内容授权或下架
论文部分内容阅读
  摘要: 医药采购系统的用户数量很多,每个用户每年采购的药品数量庞大。数据库存储的数据过多会极大的影响系统的性能,查询的速率会降低。为了提升系统的性能,该文从数据聚合、动态建表,按年存储这两个角度进行了设计与实现。从而提升了系统的查询速率、系统的性能得到了优化。
  关键词:数据聚合;动态建表;按年存储
  中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2015)09-0263-02
  医药系统的业务用户有市卫生局、镇卫生院、村卫生室、供货商。涉及到的采购单位是一个市下属的各个村卫生室、社区医院。一个大的市下属的村和社区大概有个3000左右。一个采购单位每月分上中下旬采购药品,每次保守采购100个药品。一年采购量:3000*100*3*12=10800000,一年下来采购量估计在千万级。系统上线后,运行几年后会存储量很大。存储随着年复一年,日复一日,存储量会非常大。 为此我们选用了Oracle数据库,Oracle 是海量存储的数据库,比Mysql要强很多,Mysql最多存储量大概是二百万左右,如果再多就超出它的能力范围。所以,我们使用Oracle海量存储。Oracle海量存储可以存很多,但是,如果存储很多,我们要做一些查询、统计分析,查询的效率很低,系统反应很慢。
  我们可以对表进行一些优化,比如说:加一些索引,我们可以使用Oracle的一些分区表,可以做一些sql语句的优化。但是,这些都是治标不治本的。治本的解决需要待查询的表存储的数据少,我们现在需要对系统进行一个根本的解决。
  1 解决方案的设计与实现
  本文主要从数据聚合、动态建表,按年存储这两个角度对系统的性能进行优化。数据聚合针对系统的统计分析功能模块进行的设计;动态建表、按年存储涉及到系统的核心功能模块--采购单模块,对系统采购单模块相关的表进行存储,全部是按年存储。
  1.1 数据聚合
  1.1.1问题的提出
  采购系统有个功能模块是统计分析。系统有市卫生局、卫生院、卫生室、供货商四个业务用户。市卫生局查询本市所有医院及供货商的交易明细,卫生室查询本地区所有医院与供货商的交易明细,医院查询本医院的交易明细,供货商查询与自己供货相关的交易明细。
  根据用户的需求,统计分析模块中按交易明细的统计效果图2所示:
  从图中我们可以看出明细查询涉及到:采购单明细、入库信息、退货信息、结算信息。采购单明细是必须显示出来,入库信息有则显示没有不显示,退货信息有则显示没有不显示,结算信息有则显示没有不显示。
  1.1.2 一般的解决思路及存在问题
  思路:采用采购单明细表分别和入库表、退货表、结算表左连接查询。
  存在问题:采购单明细一年下来上百万,入库表也是上百万,退货表少,结算表上百万数据大,进行关联查询速度很慢。
  1.1.3 采用数据聚合进行优化
  将采购单明细、入库信息、退货信息、结算信息的数据融合到一张表里,这时去查询速度很快,不用进行关联查询。创建一张表:YYBUSINESS,此表汇集了那几张表所有的字段.
  同步数据时机:
  对于采购单明细数据,采购单审核通过后开始向交易明细表(yybusiness)插入数据。将该采购单下的采购药品信息插入yybusiness表。由于有业务逻辑采购单审核通过,所以采用service层修改代码实现数据同步。
  对于入库信息、退货信息、结算信息这三张表数据采用采用触发器实现数据同步。
  入库表上建立的触发器源代码如下:
  create or replace trigger yycgdrk2014_insert after insert on yycgdrk2014 for each row
  declare begin update Yybusiness2014 t set t.rkl = :new.rkl,t.rkje = :new.rkje,t.ypph = :new.ypph,t.cgzt = :new.cgzt,t.rkdh = :new.rkdh,t.ypyxq = :new.ypyxq,t.rktime = :new.rktime where t.yycgdid = :new.yycgdid and t.ypxxid = :new.ypxxid; end yycgdrk2014_insert;
  这样,本系统将药品的采购信息、入库信息、退货信息、结算信息全部聚合在一张交易明细表中,统计分析时在该表(交易明细表)上进行统计分析。由原来的多表关联改为单表查询,速度提升。
  1.2 动态建表,按年存储
  1.2.1 动态建表
  动态建表是创建定时任务,由定时任务去执行存储过程。由存储过程自动创建所有用到业务表(动态表)及与表相关的触发器、外键、索引、序列。如果让人去创建,显然是不合理,时机也不好把握。
  创建定时任务的三种方法:1)java 程序启动一个定时任务;2)数据库上建立一个定时任务;3)在操作系统上创建一个定时任务。
  本系统采用第三种方法去创建定时任务。创建的定时任务,是到点去执行Oracle.bat文件。Bat文件的内容是连接到数据库,执行sql。Bat文件内容是:
  sqlplus yycg0406/yycg0406_192.168.56.101 @c:\test.sql。test.sql的内容是执行存储过程。具体内容是:call create_tableJob();
  create_tableJob的原代码如下:
  create or replace procedure create_tableJob Authid Current_User as
其他文献
有限元仿真常用于辅助分析预应力钢筒混凝土管断丝检测数据,在建模过程常遇到预应力钢丝螺旋结构网格划分困难,单元数量过多的情况。将预应力钢丝的螺旋结构模型等效成圆环模
针对感应电机无速度传感器矢量控制系统低速时存在估计转速误差较大的问题,提出一种新的转速自适应算法。此算法是对传统转速自适应律进行改进,在此基础上添加与电压误差、定
为研究网联环境下车载设备对驾驶行为的影响,设计了车载终端人机交互界面,搭建了基于驾驶模拟仓的车、车通信环境,并开展模拟驾驶实验,采集了4个场景下车辆运行数据。通过对
中西文化艺术上的交流在历史上曾出现过三次浪潮:魏晋隋唐时期的“梵学东渐”、明末清初的“中学西传”和晚清民国时期的“西学东渐”。从广度和深度上看,明清以后的两次文化艺
运动训练专业是我国体育高等教育体系中的一个系科,其主要任务是培养优秀的教练员人才.……
期刊