|
不建议在生产库中使用分区表来提高性能
HIS 实际业务非常复杂,在生产库中使用分区表来提高性能,只能是某些业务能得到提高,但代价是其他业务性能更差。比如说门诊处方数据,通常使用时间进行分区, 但是在查找某病人的历史处方时(门诊医生站的主要功能之一),只能按ID号或病人的相关信息进行查询。如果门诊处方数据使用ID号分区,那么药房在按时间 统计处方量,或者按时间区间查询处方的时候,性能仍然极差。
住院系统的数据就更不用说了,数据查询的条件非常复杂,分区表提升的性能有限,大多数时候,建立了分区表,还得使用全表索引,而不能使用分区索引,一些时候反而降低了性能。
从医院的实际业务来看,还是强烈建议把生产库和历史库分开。在生产库上最多保留一年的门诊数据,一到两年的住院数据,甚至可以更少。西南医院的生产库门诊数据只保留3个月,住院数据保留6个月,生产库的规模一直保持在20G左右,性能挺好的。
而且,建立历史库和生产库,对于大规模的数据统计也是非常有利的,院长可以比较一两年的数据变化趋势,甚至更长时间的变化情况,分区表----也就是把历史数据和在线数据都放在一个库上的情况下,是不敢想象的。
HIS对性能的要求非常复杂,实际业务中又不可能控制某些客户端的统计只允许在某个时间内进行,很多时候,单一技术根本不能解决性能问题,必须是一个完整的方案----DBA的价值也就在这里
============================================================
赵兄此言差已,
现在应用系统的设计已经从主机升级为中心变化到以存储为中心的时代.从长远看,数据集中的设计模式比之数据分布的模式更加有利. 且不说历史数据越来越多,越远离实际应用服务器的时候,关心它的机会可能就更少了.历史数据也存在安全\备份,且性能要求不会太低.
现在中端阵列价格不到四/五 十万,每秒io可到数十或百兆以上,对于大型医院来说,这个成本不存在问题
从管理上说,管理一个数据中心的数据比管理多个服务器/存储的模式其实更加便宜 现在,把HIS作为财务为核心,的系统应用,财务数据具有连续性要求,历史也好 当前也好,分成若干机器/存储保存不但增加client 应用设计开发的难度,也难保证迁移的完整性,徒增加工作量而已.
从业务上说,门诊病人费用信息分区存放自然没有争议,至于门诊病人处方引用查询,一般从诊断结果上引用的概率比较大,平时就可以统计归类TOP100/200疾病的处方表,可先找中间表,再去索引实际处方,并且该中间表可随时更新,即使查询不到,也无大碍.
即使查询某病人历史处方,也可按全局病人ID索引,何来性能更差一说?
同样sql语句,分区,可能是分区扫描, 如果不分区,很可能 FTS ,于性能有何益处?建立全局索引,分区不分区的效果相差不会很大.不至于更加差把.
住院系统数据,存在大量中间数据,包括发药申请\医技\化验申请等,按照分区存储,有益无害,性能必定比不分区好,费用明细自不必说,
Oracle 索引的大小与物理IO的量不是线形比例的,与索引级别有关系.
对于大规模数据统计而言,可采用任务分时处理,避开高峰业务时间,由用户建立Scheduler 或job 运行,
比较长期数据,亦有层层汇总的过程,在历史库统中,从最明细的数据中统计,院长等难道就有耐心等待?
个人看法,认为分区不会降低系统性能,并且降低设计管理难度.
历史库/历史表一说,在mssql 中或更早的foxpro 中尚有市场,但在oracle 中,还采用历史库,未免被人贻笑大方. |
|