我有一组从传感器获得的指标。读取频率约为半秒。我正在考虑使用Apache Cassandra来保存这些传感器数据。以下是单个传感器的一个此类数据的样子:
"sensor": {
"123": {
"externalID": "XXXXX",
"isEnabled": false,
"persistence": {
"isEnabled": true,
"excludedCommands": []
},
"readCommands": {
"BGAGasLevel": "BGAGasLevel.V",
"CommAliveAsset": "HBD001.STATE.M",
"CommAliveVPP": "HBD002.STATE.M",
"MEM.CACHE": "SRV001.MEM.CACHE.V",
"BLOCK.OUT": "SRV001.BLOCK.OUT.V",
"setpointFeedback": "CHP1.ActivePower.SetpointFeedback.V",
"MEM.FREE": "SRV001.MEM.FREE.V",
"Error": "CHP1.OutOfService.M",
"Warning": "CHP1.Warning.M",
"SWAP.IN": "SRV001.SWAP.IN.V",
"OperatingHours": "CHP1.OperatingHours.V",
"LAVG5": "SRV001.LAVG5.V",
"VPPAlive": "VPPAlive.C",
"SYS.CS": "SRV001.SYS.CS.V",
"TSODSOAvailability": "CHP1.TSODSOAvailability.M",
"LAVG1": "SRV001.LAVG1.V",
"activePower": "CHP1.ActivePower.CurrentValue.V",
"CPU.WAIT": "SRV001.CPU.WAIT.V",
"RemoteControlEnabled": "CHP1.RemoteControlEnabled.M",
"InOperation": "CHP1.InOperation.M",
"CPU.USER": "SRV001.CPU.USER.V",
"MEM.SWAPPED": "SRV001.MEM.SWAPPED.V",
"BGAAlive": "BGAAlive.M",
"SYS.INT": "SRV001.SYS.INT.V",
"EnergyCounter": "CHP1.EnergyCounter.V",
"CPU.SYS": "SRV001.CPU.SYS.V",
"BGAGasFlameOn": "BGAGasFlameOn.M",
"CPU.IDLE": "SRV001.CPU.IDLE.V",
"MEM.BUFFER": "SRV001.MEM.BUFFER.V",
"BLOCKED": "SRV001.PROCS.BLOCKED.V",
"BLOCK.IN": "SRV001.BLOCK.IN.V",
"OutOfService": "CHP1.OutOfService.M",
"SetpointIsValid": "CHP1.SetpointIsValid.C",
"LAVG15": "SRV001.LAVG15.V",
"SWAP.OUT": "SRV001.SWAP.OUT.V"
},
"writeCommands": {
"setpoint": "CHP1.ActivePower.Setpoint.S",
"SetpointIsValid": "CHP1.SetpointIsValid.C"
}
}
}
我最终将拥有数百万个这样的传感器,其传感器由其ID识别,在上述情况下为123。每个传感器都有不同的命令集,我可以读写。
所以这是我的问题:
Cassandra是否适合此用例?我一直在探索InfluxDB,OpenTSDB,他们有这个标签的概念,似乎很合适,但我首先想看看Cassandra是否适合。
我需要开箱即用的HA,因为我会非常频繁地阅读这些数据。用Cassandra做HA的经济效果如何?
如何使用Cassandra进行水平缩放?这对读/写性能有何影响?
如何持久存储JSON数据?我的意思是如果我将这些传感器数据分批作为JSON获得,我会将JSON这样保存到Cassandra。