远传水表数据平台高并发访问应用研究

2018-02-24 13:55张大鹏
电脑知识与技术 2018年34期
关键词:数据库优化

张大鹏

摘要:随着市场需求的增加,对供水行业中远传水表数据平台的高并发访问承受能力也有着越来越高的要求。该文针对基于Oracle数据库搭建的远传水表数据平台,从系统架构、网络设备配置、软件设计、数据库设计、优化和业务管理几个方面进行了探索研究,以期得到合理的解决方案。

关键词:Oracle;数据库;高并发;优化;远传水表

中图分类号:TP311        文献标识码:A        文章编号:1009-3044(2018)34-0009-03

1引言

合肥供水集团有限公司近期实施两万块远传水表自动抄表系统,远传水表数据平台是该系统的组成部分,承担着水表数据的采集、管理和应用的功能,面向底层发布采集指令或定时接收数据集中器的写入请求进行数据存储,面向上层提高数据加工、查询、统计、传输的服务。在当前两万块水表的应用场景和通用软硬件配备下,远传水表数据平台的常规搭建,不会存在数据并发写入引起的系统不可忍受的迟缓——甚至宕机的问题。

但是,随着应用业务的成熟,按照规划后期会有十万、百万数量的智能水表接入,几十万或近百万条的抄表数据需要同时写入数据库,那么远传水表数据平台就要考虑解决高并发访问带来的问题,需要提高抄表数据记录采集的TPS。

市场上专业的大公司有解决高并发访问问题的专业产品,同时可以为用户定制开发,当然他们的IT解决方案中包括高大上的硬件和软件,价格之昂贵一般公司難以承受。另外,淘宝网站、12306票务系统采用了在通用解决方案的基础上,进行自主开发和研究,也成功地解决了高并发访问的问题。

2高并发访问解决方案

随着合肥供水集团远传水表的大量使用,抄表方式正在由手持抄表向远程全自动抄表转变,一套由远传水表、数据集中器、GPRS通信网络、远传抄表数据平台组成的自动抄表系统正在实施,远传水表数据平台控制数据集中器,进行指令交互和水表数据采集,目前从集团公司六个抄表站下辖的区域内选定了共两万块水表接受系统管理。为了适应水表的快速扩充和接入系统实施自动抄表的要求,设计的数据平台要在高并发访问层面上具有前瞻性,在三到五年内面临水表业务扩充的情况,在已有软硬件环境下能够接受高并发访问的压力。

在远传水表数据平台项目后续的实施过程中,结合合肥供水集团远传水表的分布、抄表站点的分布、抄收业务规则等实际情况,可以从系统架构、网络设备配置、软件设计、数据库设计和业务管理方面进行合理的统筹安排,有针对性地采取措施来应对高并发抄表数据写入和响应的问题。

2.1划分系统层级

远传水表数据平台在集团总公司部署一级平台,每个抄表站分别部署二级平台,一级平台设置为系统主站,每个二级平台设置为从站。从站系统负责本辖区下的远传水表的抄表、核对、计量、分析、校验的工作,然后把经过审核确认的数据集中上传给集团公司的主站,主站系统负责数据的集中和应用。

通过划分层级实现了抄表任务的分解,避免了主站的同一时间段内的高并发访问。

2.2软件设计

2.2.1开发框架

当前,软件开发的技术框架林林总总百花齐放,那边厢唯IT巨头马首是瞻,这边厢在高举去IOE的大旗,把庞大的互联网+帝国打造得独步世界无人能敌。那么我们是向左还是向右?放眼看来,巨头的重量级产品解决方案的效果自然毋庸置疑,反其道而行之的轻量级架构方案也是一骑绝尘风生水起,但是我相信,无论是两种路线下的哪种方案,都是在充分考虑了自己的实际情况,组合了每个路线中的合适产品构建了一个完美有效专有体系。因此,只要是经过充分论证选型合适,就可以避免很多问题。

调研一些远传数据采集系统发现,大多使用Java语言开发,后台数据库有Mysql、Oracle等。结合我们公司的技术人员情况和水表厂家可能的支持,推荐使用Java开发语言和Oracle11g数据库组合的方案。有很多Java的框架方案可以选择,为进一步论证提供基础,这里抛砖引玉提供两个:

(1)Java+Struts+Spring+Hibernate+Oracle

(2)Java+Struts+Spring+Mybaits+Oracle

2.2.2分时采集

远传水表数据平台在不进行多层级平台划分的情况下,只设置集团公司一个数据中心,通过软件逻辑设计也可以对高并发访问进行分解。我们可以对多个抄表站的数据采集工作在时间上进行统筹规划,安排每个抄表站在自己专用时间段内采集数据。

当然,平台分层和采集分时两个方案可以结合使用,远传水表数据平台即进行主、从分级,也在从站进行数据采集的时候,按自己抄表站下辖的不同片区进行分时间段采集数据。

2.3数据库设计

2.3.1访问优化

远传水表数据平台采用oracle 11g数据库,如果只使用一个数据库,在数据采集的时候,同时有查询统计的业务发起,那么采集来的数据不一定写进去,查询统计也迟迟不见结果出来。可以采取在两个库上(主、从库)读、写分离的模式,主库负责写数据、读数据,从库负责读数据,解决读写操作争抢资源造成性能下降的问题。

数据库的读写分离方案,首先要实现主、从库的数据同步,可以采用Oracle自有的组件功能,如Oracle 11g的Active Data Guard。出于稳定性、处理能力等考虑也可以选择商业化的产品,国外的有Quest公司的SharePlex,国内的有DSG公司的RealSync,还有Oracle自有的GoldenGate,都可以选择使用。每次有写库操作,同步更新cache,每次读取先读cache再读DB。

其次,在程序开发中,要制定和实现数据访问策略,写数据操作指向主库,读数据操作指向从库。

猜你喜欢
数据库优化
超限高层建筑结构设计与优化思考
一道优化题的几何解法