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

问题描述:

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

我有几十个传感器(可以说是100,000)。每个传感器以(timestamp, value)的形式定期或不定期地产生定时值。步长可能小于1秒,因此在一年的过程中,对于特定传感器可能会有数百万个(timestamp, value)对,从而形成每个传感器的时间序列。用户可以针对这种时间序列的传感器请求时间段(from, to)的值。

在一个表(sensor_id, timestamp, value)将填补表数十亿每月值/行存储所有的值。这盖过传统的开源数据库系统(MySQL和PostgreSQL)。

我想到的创建每个传感器的时间序列(timestamp, value)和参考表,在我的传感器表(sensor_id, sensor_name, sensor_table_name)。所以会有每个一些百万行10万台。

我可以获取直接在我的传感器直接使用sensor_table_name列中的值或做我必须做两个查询,一个得到sensor_table_name和一个得到数值超出该表?

+1

看看[这个问题](http://stackoverflow.com/questions/5772699/postgresql-dynamic-table-access)。它应该涵盖你的情况。 –

+1

您是否对PostgreSQL进行了测试,因为它是“开箱即用”的,或者您调整了服务器;分区表;使用适合于超大型数据库(VLDB)的硬件,包括快速磁盘和额外的表空间;考虑将SSD用于某些索引或较小的表格;等等? –

+0

开箱即用;不幸的是不能改变硬件。你认为PostgreSQL能以一种有用的方式处理例如600亿个表项吗? – AME

如果您使用正常的关系数据库,一个获取sensor_table_name,另一个获取表中的值,恐怕您需要执行两个查询。

这听起来像是一个更好的解决方案,比动态生成SQL语句的名称与传感器匹配的名称将使用table partitioning。你可以通过传感器名称进行分区,这样可以正常工作。但是如果您不打算每年保留数十亿次的读数(没有对其进行总结),那么您可能希望按日期范围进行分区,以使最终的数据清除更容易。

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

+0

我有大约100.000个传感器(更多来,有些去动态)。该分区的创建似乎有很多工作并且容易出错。但我不确定。 – AME

+0

几乎可以肯定,所有传感器中的一个(可能是按日期分区)表中的数据要比100,000个或更多的数据表要好。性能不会超过许多表。 – kgrittn

+0

我猜约束排除不会根据传感器ID扩展到100,000个分区进行分区,这就是为什么您建议按日期分区? –

如果对传感器表名称使用约定,则不必执行查询即可找出要查询某个传感器的表。例如,如果您的传感器ID是Wolverine967,并且您对这些表名称的约定是Sensor_ +传感器ID,那么您会立即知道您可以查询表Sensor_Wolverine967。