情况如下:
我有数十万个传感器(简称100,000)。每个传感器以(timestamp, value)
的形式产生定期或不定时的值。步长可以小于1秒,因此在一年的过程中,对于特定传感器可以有数百万(timestamp, value)
对,形成每个传感器的时间序列。对于这样的传感器时间序列,用户可以请求时间段(from, to)
的值。
将所有值存储在一个表中(sensor_id, timestamp, value)
将在表中填充每月数十亿的值/行。这压倒了传统的开源数据库系统(MySQL,PostgreSQL)。
我正在考虑为每个传感器时间序列(timestamp, value)
创建一个表,并在我的传感器表(sensor_id, sensor_name, sensor_table_name)
中引用它。因此将有100,000个表,每个表有数百万行。
我是否可以直接使用传感器中的sensor_table_name
列直接获取值,还是必须执行两个查询,一个用于获取sensor_table_name
,另一个用于获取该表中的值?
答案 0 :(得分:3)
如果您使用传感器表名称的约定,则不必执行查询只是为了找出要查询某个传感器的表。
例如,如果您的传感器ID是Wolverine967,并且您对这些表的名称的约定是Sensor_ +传感器ID,那么您立即就可以知道可以查询表Sensor_Wolverine967。
答案 1 :(得分:2)
对于您而言,与动态生成名称与传感器匹配的SQL语句将使用table partitioning相比,这听起来更好。您可以按传感器名称进行分区,这样可以正常工作;但是如果你不打算永远保持每年数十亿的读数(没有总结它们),那么你可能希望按日期范围进行分区,以便最终清除数据。
这可能比动态生成SQL语句更好,并且应该更容易管理。
答案 2 :(得分:0)
如果您使用普通的关系数据库,我担心您需要执行两个查询,一个用于获取sensor_table_name,另一个用于从该表中获取值。