如何查询名称存储在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
和一个得到数值超出该表?
如果您使用正常的关系数据库,一个获取sensor_table_name,另一个获取表中的值,恐怕您需要执行两个查询。
这听起来像是一个更好的解决方案,比动态生成SQL语句的名称与传感器匹配的名称将使用table partitioning。你可以通过传感器名称进行分区,这样可以正常工作。但是如果您不打算每年保留数十亿次的读数(没有对其进行总结),那么您可能希望按日期范围进行分区,以使最终的数据清除更容易。
这可能比执行生成SQL语句更好,并且应该更容易管理。
如果对传感器表名称使用约定,则不必执行查询即可找出要查询某个传感器的表。例如,如果您的传感器ID是Wolverine967,并且您对这些表名称的约定是Sensor_ +传感器ID,那么您会立即知道您可以查询表Sensor_Wolverine967。
看看[这个问题](http://stackoverflow.com/questions/5772699/postgresql-dynamic-table-access)。它应该涵盖你的情况。 –
您是否对PostgreSQL进行了测试,因为它是“开箱即用”的,或者您调整了服务器;分区表;使用适合于超大型数据库(VLDB)的硬件,包括快速磁盘和额外的表空间;考虑将SSD用于某些索引或较小的表格;等等? –
开箱即用;不幸的是不能改变硬件。你认为PostgreSQL能以一种有用的方式处理例如600亿个表项吗? – AME