我有一个问题:当传感器的类型不同时,如何最好地存储产生的传感器数据。
一点背景:
我有两个不同的感觉单位。
一个单元(比如A单元)内置了感应器(温度、湿度等),并以固定的顺序产生一个CSV字符串12,其中所有的12个值对我都有用。
另一个单元(单元B类型)是一个单元,您可以插入探针和能量监控夹等,在所有情况下,它都会产生一个CSV字符串13,但是如果您只有两个连接的东西,那么您只能从13个CSV值中的两个得到有用的信息。我们有两种不同的配置单位,我们将使用。
所有的传感器都有一个ID (在CSV字符串中给出),我将通过web (ASP.NET)将传感器按ID链接到数据库(SQL 2016)中的一个房间。
我将进行的查询类型是“a室目前的温度是多少”,我还需要查询诸如“给我所有平均湿度较高的房间”之类的趋势。
我的问题
考虑到目前我将有大约250个传感器,每隔10秒左右通过一个web API发布,我目前有两种不同类型的CSV字符串(将来可能会更多),在一种情况下,CSV字符串将在CSV字符串的不同部分中包含有用的信息,您会推荐什么样的合适的表结构来支持这一点?理想的情况是在SQL server中(可能是2016年对JSON的支持?)因为Server是我更熟悉的东西,但是如果这是一个错误的选择,当然,我对您的想法持开放态度。
我试图避免一个表‘每种传感器类型’,因为这似乎是混乱的,这也会增加增加不同的传感器类型在未来没有新的表格等。
我确实考虑过让我的API独立到我的web应用程序,把我的传感器放到它上,让API存储CSV 'as‘is’is‘,以及一个“传感器类型”ID。然后我想我可以用一个存储过程将它分批处理(某种服务),然后将它插入到我的主数据库中,因为我认为这样会减少API的开销。
数据库结构
一幢楼有许多房间,一个房间有许多感应器。传感器有一种类型。我将在映射表中记录房间和传感器in之间的映射。
传感器类型解释
A型传感器具有以下信息:
传感器B有两种不同的配置,在这两种情况下都会张贴相同的CSV字符串,不同的值将在其中使用,但我想存储:
配置1(管道温度)
配置2(电力监控)
所有传感器都有相同的共同数据:
我想一种解决方案是让一个房间有多个“传感器类型A”和许多传感器类型b的配置1,而许多传感器类型b在配置2中,每种传感器类型都有自己的数据表,但是我认为最好能在传感器表中为所有传感器提供一个表,并从一个类型表中给它们一个类型,因为如果/当添加更多的传感器时,这将更加灵活。这种方法的缺点是我如何链接到这些不同的传感器数据类型/形状。
谢谢
发布于 2017-10-24 22:40:09
您的基本选项是discussed in this question,但是使用这个示例很有趣。
好吧,让我们一步一步地走。
一幢建筑物有许多房间
所以,我们知道我们有两张桌子:
Building和
Room
--fk to Building房间里有很多感应器。
Sensor
--fk to Room(或者,如果传感器可能监视多个房间的事件)
Sensor
Room_Sensor
--fk to Room
--fk to Sensor传感器有一种类型。
Sensor
--type id of some sort (manufacturer?)A型传感器具有以下信息:
..。这就是它变得有趣的地方。因为,虽然Type A生成此信息,但这不是Type A的状态,而是room的状态。
这是很重要的部分:数据库是状态的存储库(这里有一系列的状态,假设我们有时间戳)。
还有一个额外的问题--如果传感器被移动,或者房间被细分(添加“两个或更多以前没有的房间”),会发生什么?所以让我们回溯一下:
Room
--fk to building
Sensor
--type id of some sort, manufacturer info?
Room_Sensor
--pk
--fk to room
--fk to sensor
--createdAt timestamp请注意,Room_Sensor可能有多个相同的(Room, Sensor)关系的副本,随着时间的推移而改变(也许一个传感器在走廊上移动了一个星期或什么的)。
那么,测量的数据呢?实际上,这里有几种不同的“东西”:
Environment
--fk to Room_Sensor
--occurredAt timestamp
--temperatureInCelsius
--humidityInBar (or whatever other unit)
--PIR (particulate? please label your units)(我假设Type B的索引项表示对不同事物的相同度量,这应该是多个行,这意味着要为外键添加一个表。如果它们是对同一事物的不同测量--流入温度和流出温度,比方说--它更简单)
Pipe
Pipe_Temperature
--fk to pipe
--fk to Room_Sensor
--occurredAt timestamp
--temperatureInCelsius和
Electrical_Drop
Electrical_Drop_Draw
--fk to Electrical_Drop
--fk to Room_Sensor
--occurredAt timestamp
--consumptionInWatts...yeah,这大概就是我要说的。有了这种结构,传感器的实际物理类型就无关紧要了--我们只关心它提供给我们的信息类型。将来,Type B可能增加了测量室温的新功能;如果是的话,数据库可能保持不变,行可以添加到现有的表中。
请注意,这样做需要您有一个API或加载某种类型的程序,但您很可能需要其中之一,不管如何。
https://stackoverflow.com/questions/46919569
复制相似问题