如何查询名称存储在SQL中另一个表中的表?

时间:2012-08-23 09:51:04

标签: sql postgresql database-schema time-series

情况如下:

我有数十万个传感器(简称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,另一个用于获取该表中的值?

3 个答案:

答案 0 :(得分:3)

如果您使用传感器表名称的约定,则不必执行查询只是为了找出要查询某个传感器的表。

例如,如果您的传感器ID是Wolverine967,并且您对这些表的名称的约定是Sensor_ +传感器ID,那么您立即就可以知道可以查询表Sensor_Wolverine967。

答案 1 :(得分:2)

对于您而言,与动态生成名称与传感器匹配的SQL语句将使用table partitioning相比,这听起来更好。您可以按传感器名称进行分区,这样可以正常工作;但是如果你不打算永远保持每年数十亿的读数(没有总结它们),那么你可能希望按日期范围进行分区,以便最终清除数据。

这可能比动态生成SQL语句更好,并且应该更容易管理。

答案 2 :(得分:0)

如果您使用普通的关系数据库,我担心您需要执行两个查询,一个用于获取sensor_table_name,另一个用于从该表中获取值。