4

情况如下:

我有成千上万个传感器(比如说 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,一个是从该表中获取值?

4

3 回答 3

3

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

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

于 2012-08-23T13:51:03.070 回答
2

这听起来比动态生成名称与传感器匹配的 SQL 语句更好的解决方案是使用表分区。您可以按传感器名称进行分区,这样可以正常工作;但是,如果您不打算永远保留每年数十亿的读数(不汇总它们),那么您可能希望按日期范围进行分区,以使最终的数据清除更容易。

这可能会比动态生成 SQL 语句执行得更好,并且应该更易于管理。

于 2012-08-23T11:51:34.477 回答
0

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

于 2012-08-23T09:53:09.993 回答