目录
需求分析
项目是物联网系统,原本使用MySQL数据库,原本的实时数据和统计数据都在MySQL中,原本的业务功能是将实时数据统计到统计表中。现在改为实时数据存储在Taos数据库,而统计数据存在MySQL数据库,需要从taos统计实时数据然后存入到mysql统计表中,即改造以下sql的业务功能。
<insert id="insertStatisticsData" parameterType="java.lang.String">
INSERT INTO db1.weld_statistics_data(weldDuration, weldModel, gatherNo, welderNo, weldStatus,
machineId, machineNo, machineDeptId, gatherId, gatherDeptId,welderId, welderName, welderDeptId, taskId,
taskName, taskNo, createTime,startTime,endTime,electricity,voltage,wireFeedRate,wireDiameter,wireMaterialsGases,
gasesFlow,walkSpeed)
SELECT COUNT(id) weldDuration,weldModel,gatherNo,welderNo,weldStatus,machineId,machineNo,
machineDeptId,gatherId,gatherDeptId,welderId,welderName,welderDeptId,taskId,taskName,taskNo,SYSDATE(),
'${startTime}','${endTime}',AVG(electricity),AVG(voltage),AVG(wireFeedRate),AVG(wireDiameter),AVG(wireMaterialsGases),
AVG(gasesFlow),walkSpeed
FROM `db2`.${tableName}
WHERE weldTime BETWEEN #{startTime} AND #{endTime}
GROUP BY gatherNo, weldStatus, welderNo
</insert>
难点分析
业务拆分:由于原本是用同一个mysql DBMS,所以不同库(schema)不同表(table)之间做数据读取和插入非常方便,甚至可以一条sql搞定(如上)。现在要在两个不同的DBMS之间进行数据操作,那就得将以上sql拆分,先从taos读取数据,再将统计数据插入mysql。两个业务,两个sql。
语法差异:MySQL group by语法中,select 后的表达式为分组字段+聚合函数+其他字段,TaosDB group by语法中,sele