气象自动观测集成平台数据库设计
2018-11-26阙艳红吴冬丽李文雅朱东红单大龙郭丽李炎朋
阙艳红 吴冬丽 李文雅 朱东红 单大龙 郭丽 李炎朋
摘要:气象自动观测集成平台数据库需要兼容多种观测业务的数据,针对该观测要素数据种类繁多、类型多样、结构复杂、数据量大的问题,以及数据库架构需要兼具可用性高、并发量大、扩展性强的特点,分析了几种常用的数据库高可用高并发架构方案,提出了一种适用于平台数据库的分布式部署、垂直分区和水平分区相结合的架构方案,并根据需求分析按照规范化的自下而上逐步细化的设计方法进行了数据库表的设计,实现了平台数据库高可用、高并发、可扩展的目标。
关键词:数据库;高可用;高并发;可扩展
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)24-0004-03
Abstract:The meteorological automatic observation integration platform database needs to be compatible with data from a variety of observing services, and there are many kinds of observation element data, various types, complex structures, and large data volumes. And the database architecture needs to have the characteristics of high availability, large concurrent volume, and strong scalability. This paper analyzes several commonly used database high-availability and high-concurrency architecture solutions, and proposes an architecture solution that combines distributed deployment, vertical partitioning, and horizontal partitioning for the platform database. According to the requirement analysis, the database tables are designed in accordance with the standardized bottom-up design method, and the platform database is highly available, highly concurrent, and extensible. Several commonly-used database high-availability and high-concurrency architectures are analyzed. The solution proposes an architecture solution that combines distributed deployment, vertical partitioning, and horizontal partitioning for the platform database.
Key words:Data Base; High availability; High concurrency; Scalable
1 引言
氣象自动观测集成平台是为了解决不同厂家、不同设备协议适配,观测要素多元化、业务定制化的问题而开发的一套平台软件。该平台利用统一设计的RESTful API数据接口,实现在软件逻辑层面上的观测业务可定制,通过敏捷开发方式,构建通信模块类库,统一数据交换格式,解决不同设备与平台接口的协议适配。实现专业气象领域同级观测业务集约化运行的目标。
气象自动观测集成平台收集多种观测业务的所有观测要素数据,种类繁多、结构复杂,且数据量大,因此,数据库的逻辑结构设计可靠安全与否,关系到平台能否稳定运行的重要环节。本文重点介绍了该平台数据库的需求分析、设计思路及设计方法,分析了几种常用的数据库高可用高并发方案,按照规范化的方法进行数据库设计,满足平台需求的同时对数据库性能进行了优化提升[1]。
2 需求分析
气象自动观测集成平台是一个涉及流动数据种类多样,数目众多的系统。不同的观测业务所观测的要素不同,涉及的各种状态数据也不同。观测设备采集要素数据上传至数据收集系统,接收到数据进行初加工后,发送至消息中间件,数据处理入库系统从消息中间件中读取消息,解析处理入库,用户通过浏览器或手机客户端,浏览数据或发送指令。具体数据流程如图1所示。
针对中心数据库,具体功能需求分析如下:
(1) 对接入的监测站点管理。包括监测站点添加,查询,删除,修改。以及对监测站点的参数信息设置等操作。
(2) 对所有观测业务涉及的设备信息的管理。
(3) 对不同观测业务涉及的观测要素管理。包括观测业务对应观测要素的添加,查询,删除,修改。以及观测业务所包含的接口及命令的管理。
(4) 对各种观测要素数据的管理。包括来自不同观测业务的不同观测要素数据的添加、删除等操作。
(5) 对各种状态数据的管理。包括各种观测业务所包含的各种状态信息的添加、删除、查询、修改。
(6) 对注册用户的档案管理。包括用户信息的查询、添加等。以及用户操作日志的添加、查询等。
(7) 对用户角色权限的管理。包括用户角色的权限添加、删除等。
(8) 对用户及管理员所有操作的日志记录。
性能需求分析如下:
(1) 高可用。当数据存储主服务器发生宕机时,可在短时间内业务恢复正常数据存取。
(2) 高并发。数据库存储服务器支持5000以上的站点每分钟存储数据,支持200以上的用户并发读取数据,并在5秒内做出响应。
(3) 可扩展。表结构可扩展:当观测业务增加或观测要素增加时,能够在不改变原有数据库表结构的同时,兼容新的业务或新的观测要素存取;库结构可扩展:当原有的数据库已不能满足性能需求时,可进行库拆分或表拆分。
2 方案设计
2.1 数据库表设计
在之前的业务软件数据库设计中,一个观测业务对应一个数据库,且数据库间表大量重复,既不方便数据库扩展,也不利于数据应用。因此在该平台的设计中,应尽量减少重复,方便应用且易于扩展,提高服务效率。依据平台适用环境兼容性的特点,采用ORACLE数据库作为本平台的数据库管理系统。根据需求分析,本平台采用自下而上逐步细化的设计方式[2],将现实中的用户、站点、设备、观测数据、状态信息等具体实物抽象为概念模型,生成E-R图(如图2所示),通过将概念模型调整优化形成逻辑结构模型,最終形成表结构设计模型[3]。针对本平台的数据库表兼具扩展性的结构特点,设计思路是分别建立观测业务(表1)和观测要素字典表(表2),观测业务字典表包含所有该平台可以接入的业务,当增加新的观测业务时,在该字典表添加新的业务属性。观测要素字典表包含所有业务观测的要素名称。例如风向,风速,地温,气温,气湿等,如表3所示。每一种观测要素单独建表,另外建立观测业务与观测要素之间的关联关系表,且保证该映射关系的唯一性。当平台增加观测业务时,只需从各个观测要素数据表中选取观测要素属性进行组合写入关联表中(表4),关联表中每一条记录表示某种观测业务下拥有的观测要素信息(存储时的字段名)和观测要素的存储位置信息(字段隶属的表名),关联关系以JSON字符串形式存储在数据表中。该数据表设计思路既能满足业务和要素的可扩展性,又能实现观测业务间的松耦合。
另外,该数据库各观测要素表的设计避免了外键关联,使得表之间相对独立,使得后续的分库分表变得简单,为数据库分区提供基础。
2.2 数据库性能设计
根据平台性能要求,高可用性是指服务的连续性,首先保证数据不丢失,其次确保不停机,使Oracle数据库一直维持在正常的运行状态,避免停机给客户带来损失。高并发性是指提高多用户访问数据库时的响应速度。因此高可用和高并发的最终目的是避免单点服务和提高资源响应效率。目前一般企业常用的方法主要有负载均衡(RAC)、分布式部署、垂直分区和水平分区。
负载均衡(RAC)是一种属于双机互备并行模式的高可用架构,即两个服务器之间是一种并行运行的关系,当一台机器出现问题,请求会自动转发到另一台机器,没有任何一台机器作为备用机一直不被使用,避免了双机热备模式下的备用机长期不被使用资源浪费的情况。RAC同样也应用于集群中,集群最大的优势在于它的高可用性,通过使用RAC在一定程度上避免因为硬件或软件故障引起的数据丢失和非计划停机,并相对减少或排除计划停机时间。因此,RAC的高可用主要体现两点:一是实现负载均衡,二是故障切换[4]。
分布式部署是指数据库服务器分别部署在不同的机器上,一主多从,主从复制,读写分离。Oracle的主从复制可以采用DataGuard技术,DataGuard是Oracle数据库自带的数据同步功能,基本原理是将日志文件从主数据库传输到备份数据库,然后在备份数据库上读取这些日志文件,从而使备份数据库与主数据库保持同步。读写分离一般是指将业务模式上的分离,用户服务执行写操作时访问主库,执行读操作时访问备份数据库,该模式大多适用于读远大于写的场景[5]。
在主从部署的数据库中,当写操作占据资源50%左右份额的时候,就需要进行数据库垂直分区。最简单的垂直分区方式是将原来的数据库中独立的业务进行分拆,且分拆的部分与其他业务没有关联关系,分拆出的业务表单独建库。另外,将一个大的数据库分成多个小的数据库可提高查询的性能,因为每个数据库分区拥有自己的一小部分数据,实现查询的可扩展性。
水平分区是指将同一个数据库表中的记录通过特定的算法进行分离,分别保存在不同的数据库表中,从而可以部署在不同的数据库服务器上。水平分区不依赖什么特定的技术,完全是逻辑层面的规划,是经验和业务的细分,常用的分区方式有余数分区和映射关系分区。水平分区主要解决数据库数据量大的问题,在数据库单库容量无法满足系统要求时,可采用水平分区[6]。
综上所述,根据平台的实际应用情况,随着观测业务量的增加,数据库单表容量越来越大的特点,采用分布式部署,垂直分区和水平分区相结合的架构设计。
3 数据库优化设计
随着观测业务量和观测要素的累加,数据库资源占用空间越来越大,为了保证业务查询效率的稳定可靠[7],针对本平台数据库从以下几点进行优化:(1)使用Redis缓存。Redis是一个可以提供内存和永久数据存储的键值数据存储系统,也就是在内存中存储的数据备份,由于从内存中读取数据的速度要比从数据库直接读取快得多,所以当数据没有发生本质变化的时候,为避免数据的查询操作直接连接数据库,通过内存中的缓存内容读取数据,降低数据库的读写次数,从而提高查询效率。(2)重点业务表分区。可以将观测业务中的重点数据表分区,表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件),这样查询数据时,不至于每次都扫描整张表,提高了查询效率。(3)数据访问优化。SQL语句的优化首先是尽最大力度降低系统对全表扫描的次数,因此,应建立优化数据库索引,在对写操作无影响的情况下,提升查询的效率。同时,在查询时,应减少影响查询效率的操作,如DISTINCT、UNION等关键字[8]。
4 结论
综上所述,本文首先根据平台需求对数据库的功能需求和性能需求进行了分析,其次对数据库表进行了设计,以及根据性能要求,对高可用高并发方案进行了分析,最后对数据库的优化进行了几点建议。最终设计并实现了气象自动观测集成平台数据库。另外,针对目前使用的ORACLE数据库,也可以在后期考虑向当前流行的开源数据库迁移,充分利用开源数据库可定制化的特点,实现平台应用的灵活多变、自由可扩展,当然这也是下一阶段所研究的目标。
参考文献:
[1] 蔡金芷.个人健康管理系统数据库的设计与实现[J]. 计算机测量与控制, 2017,25(7):222-224.
[2] Control C, Morris S ,Database systems:design,implementation,& management[M]. Cengage Learning,2016.
[3] 包丽颖,孙秀秀,郁亚娟,等.农业面源污染基础信息数据库的设计与实现[J].环境污染与防治,2014,36(2):96-99.
[4] 吴飞. Oracle Rac到开源数据库演进方案的设计[J]. 自动化技术与应用, 2017,36(4):34-38.
[5] 吴尚,王萍,等.使用Oracle Active Data Guard 实现PMS2.0数据库读写分离初探[J], 无线互联科技, 2018.5:43-53.
[6] 陈炎龙,段红玉,等.一种分布式数据库查询优化算法的研究[J]. 科技通报, 2017(2):86-89.
[7] 杨莹.基于Oracle数据库大数据的检索优化分析与设计[J].数码世界,2017(4):31-32.
[8] 陈洪伟.漫谈ORACLE数据库优化设计方案[J],电脑迷,2016(5):51-52.
【通联编辑:王力】