本发明涉及城市供水计费领域,尤其涉及用于供水的水量和水费的分布式计算方法及系统。
背景技术:
随着城市规模扩大和供水户表改造的进行,供水公司下辖用户从十年前的十多万发展到现在百万级的规模。
传统的水量水费计算采用传统的应用程序计算结合关系型数据库存储的方式处理,传统账务计算方式(单程序多线程按照账户逐一获取数据、计算并得到结果),因为结构单一,算法简单导致水量、水费计算的实时性不够,如:传统计算架构和算法以不能在所需时间(每小时一次)内完成对所有用户水量水费计算,不能配合智能水表实时自动开关阀等新的供水业务需求,已不能符合当前供水、用水结算的需求。
技术实现要素:
本发明提供了一种用于供水的水量和水费的分布式计算方法及系统,用以解决传统账务计算方式不能符合当前供水、用水结算的实时性需求的技术问题。
为解决上述技术问题,本发明提出的技术方案为:
一种用于供水的水量和水费的分布式计算方法,包括以下步骤:
建立分布式的内存数据库集群;
根据待计算的用水业务数据对应的用户户数,确定计算模块的数量;
将关系型数据库中的用水业务数据根据用户编号提取分配到内存数据库集群中的不同数据集合中;当用户编号对应的业务数据准备完毕后,对分布式消息队列中对应的用户编号添加数据准备完成标识;
两个以上的计算模块从消息队列获取带有数据准备完成标识的用户编号,并根据用户编号从对应的不同数据集合中提取用水业务数据,根据水费计算规则进行计算,并将计算结果写入分布式内存数据库集群中,对分布式消息队列中对应的用户编号添加完成计算标识;
从分布式消息队列中获取带有完成计算标识的用户编号,根据用户编号从分布式内存数据库集群中获取对应用户编号的计算结果以及下一步处理措施并将其写回关系型数据库。
优选地,用水业务数据包括:水表抄表读数、抄表时间、用户信息、阶梯水价、用水类型、用户减免和账务信息中的一种或者任意几种的组合。
优选地,计算结果包括:水费、水量和账户余额;下一步处理措施包括:通知短信和阀控指令。
优选地,两个以上的计算模块,还将计算结果异常的用户编号,形成日志写入分布式内存数据库集群中,并形成报警信息写入分布式消息队列中。
优选地,将计算结果异常的用户编号形成报警信息写入分布式消息队列中时,若分布式消息队列也产生异常,将写入本地文本文件。
优选地,当各业务系统的用水业务数据在发生增加、删除和更改时,将增加、删除和更改后的用水业务数据实时或者按周期推送并同步到分布式内存数据库集群中,以更新对应的用水业务数据。
优选地,内存数据库集群设置于三个以上的服务器中,三个以上的服务器网络互连。
优选地,计算模块设置于服务器中。
本发明还提供一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法的步骤。
本发明具有以下有益效果:
本发明的用于供水的水量和水费的分布式计算方法及系统,采用分布式架构,依靠内存读写速度远高于硬盘以及分布式部署叠加多台服务器计算力的优势,可以极大提高账务计算速度。采用本发明,50万块智能水表的账务计算时间从目前的70多分钟缩短到10分钟,极大缩短了账务计算时间,同时减少了对实体数据库的压力、减少对服务器处理其他供水业务系统的影响。
除了上面所描述的目的、特征和优点之外,本发明还有其它的目的、特征和优点。下面将参照附图,对本发明作进一步详细的说明。
附图说明
构成本申请的一部分的附图用来提供对本发明的进一步理解,本发明的示意性实施例及其说明用于解释本发明,并不构成对本发明的不当限定。在附图中:
图1是本发明优选实施例的用于供水的水量和水费的分布式计算方法的流程示意图。
具体实施方式
以下结合附图对本发明的实施例进行详细说明,但是本发明可以由权利要求限定和覆盖的多种不同方式实施。
参见图1,本发明的用于供水的水量和水费的分布式计算方法,包括以下步骤:
s1:建立分布式的内存数据库集群。实施时,内存数据库集群设置于三个以上的服务器中,三个以上的服务器网络互连。例如:运行于x86服务器,服务器数量大于等于3,分布式部署应对服务器崩溃时采取投票机制选举产生主机数,可以是同一机房内的局域网互连的服务器也可以是光纤互联的异地机房中的不同服务器。
s2:根据待计算的用水业务数据对应的用户户数,确定计算模块的数量。例如:在一个服务器上部署1至n个互不干涉的计算程序用于计算。
s3:将关系型数据库中的用水业务数据根据用户编号提取分配到内存数据库集群中的不同数据集合中;当用户编号对应的业务数据准备完毕后,对分布式消息队列中对应的用户编号添加数据准备完成标识。可以通过在当用户编号下的业务数据准备完毕之后,发送开始计算的标识消息到分布式消息队列当中,进而将分布式消息队列中对应的用户编号添加数据准备完成标识。实施时,用水业务数据通常包括:水表抄表读数、抄表时间、用户信息、阶梯水价、用水类型、用户减免和账务信息中的一种或者任意几种的组合。当各业务系统的用水业务数据在发生增加、删除和更改时,将增加、删除和更改后的用水业务数据实时或者按周期推送并同步到分布式内存数据库集群中,以更新对应的用水业务数据。以此保证数据的实时性,并进一步减少数据准备所需时间。
s4:两个以上的计算模块从消息队列获取带有数据准备完成标识的用户编号,并根据用户编号从对应的不同数据集合中提取用水业务数据,根据水费计算规则进行计算,并将计算结果写入分布式内存数据库集群中,对分布式消息队列中对应的用户编号添加完成计算标识。实施时,计算结果通常包括:水费、水量和账户余额;下一步处理措施包括:通知短信和阀控指令(欠费情况)。
s5:从分布式消息队列中获取带有完成计算标识的用户编号,根据用户编号从分布式内存数据库集群中获取对应用户编号的计算结果以及下一步处理措施并将其写回关系型数据库。便于下一步使用。
在上述过程中,当发生异常时,两个以上的计算模块,还将计算结果异常(如水费、水量数值异常)的用户编号,形成日志写入分布式内存数据库集群中,并形成报警信息写入分布式消息队列中,若分布式消息队列也产生异常,将报警信息写入本地文本文件。
本发明实施例还提供一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述任一方法实施例的步骤。
采用本发明的用于供水的水量和水费的分布式计算方法进行测试,50万块智能水表的账务计算时间从目前的70多分钟缩短到10分钟,极大缩短了账务计算时间,同时减少了对实体数据库的压力、减少对服务器处理其他供水业务系统的影响。
综上可知,本发明通过采用分布式架构,依靠内存读写速度远高于硬盘以及分布式部署叠加多台服务器计算力的优势可以极大提高账务计算速度。
以上所述仅为本发明的优选实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
1.一种用于供水的水量和水费的分布式计算方法,其特征在于,包括以下步骤:
建立分布式的内存数据库集群;
根据待计算的用水业务数据对应的用户户数,确定计算模块的数量;
将关系型数据库中的用水业务数据根据用户编号提取分配到所述内存数据库集群中的不同数据集合中;当用户编号对应的业务数据准备完毕后,对分布式消息队列中对应的用户编号添加数据准备完成标识;
两个以上的计算模块从消息队列获取带有数据准备完成标识的用户编号,并根据用户编号从对应的不同数据集合中提取用水业务数据,根据水费计算规则进行计算,并将计算结果写入分布式内存数据库集群中,对分布式消息队列中对应的用户编号添加完成计算标识;
从分布式消息队列中获取带有完成计算标识的用户编号,根据用户编号从分布式内存数据库集群中获取对应用户编号的计算结果以及下一步处理措施并将其写回关系型数据库。
2.根据权利要求1所述的用于供水的水量和水费的分布式计算方法,其特征在于,所述用水业务数据包括:水表抄表读数、抄表时间、用户信息、阶梯水价、用水类型、用户减免和账务信息中的一种或者任意几种的组合。
3.根据权利要求1所述的用于供水的水量和水费的分布式计算方法,其特征在于,所述计算结果包括:水费、水量和账户余额;所述下一步处理措施包括:通知短信和阀控指令。
4.根据权利要求1至3中任一项所述的用于供水的水量和水费的分布式计算方法,其特征在于,所述两个以上的计算模块,还将计算结果异常的用户编号,形成日志写入分布式内存数据库集群中,并形成报警信息写入分布式消息队列中。
5.根据权利要求4所述的用于供水的水量和水费的分布式计算方法,其特征在于,所述将计算结果异常的用户编号形成报警信息写入分布式消息队列中时,若分布式消息队列也产生异常,将所述写入本地文本文件。
6.根据权利要求1至3中任一项所述的用于供水的水量和水费的分布式计算方法,其特征在于,当各业务系统的用水业务数据在发生增加、删除和更改时,将所述增加、删除和更改后的用水业务数据实时或者按周期推送并同步到分布式内存数据库集群中,以更新对应的用水业务数据。
7.根据权利要求1至3中任一项所述的用于供水的水量和水费的分布式计算方法,其特征在于,所述内存数据库集群设置于三个以上的服务器中,所述三个以上的服务器网络互连。
8.根据权利要求7所述的用于供水的水量和水费的分布式计算方法,其特征在于,所述计算模块设置于服务器中。
9.一种计算机系统,包括存储器、处理器以及存储在存储器上并可在处理器上运行的计算机程序,其特征在于,所述处理器执行所述计算机程序时实现上述权利要求1至8任一所述方法的步骤。
技术总结