在sqlite3中使用标识符存储时间序列数据的最佳方法
假设有许多不同的传感器,所有这些传感器在测量数据时都将数据保存在数据库中,每个传感器可以有更多的条目。我正在寻找保存这些数据的最佳方法,以便以后能够以尽可能快的速度完成选择查询。类似于在sqlite3中使用标识符存储时间序列数据的最佳方法,sql,sqlite,datetime,where-clause,query-performance,Sql,Sqlite,Datetime,Where Clause,Query Performance,假设有许多不同的传感器,所有这些传感器在测量数据时都将数据保存在数据库中,每个传感器可以有更多的条目。我正在寻找保存这些数据的最佳方法,以便以后能够以尽可能快的速度完成选择查询。类似于 "CREATE TABLE IF NOT EXISTS DataTable (sensor_id TEXT, measured_value REAL, time_of_measuring REAL)" 基本上可以工作,但我想这不会是很快的选择。我知道主键,但它们可以防止重复,所以我不能把传感
"CREATE TABLE IF NOT EXISTS DataTable (sensor_id TEXT, measured_value REAL, time_of_measuring REAL)"
基本上可以工作,但我想这不会是很快的选择。我知道主键,但它们可以防止重复,所以我不能把传感器id作为主键。我基本上是在寻找类似于这样保存数据的sqlite,但是在一个表中,作为一个度量值是一行:
data = {"sensor1":[x1,x2,x3], "sensor2":[z1,z2,z3]...}
我想像ˇ这样的东西可以为每个传感器插入一个以上的值,但这对选择有帮助吗
"CREATE TABLE IF NOT EXISTS DataTable (sensor_id TEXT NOT NULL, measured_value REAL, time_of_measuring REAL NOT NULL, PRIMARY KEY(sensor_id, time_of_measuring ))"
对于此时间序列数据,相关的主(或唯一)键可能是
(测量时间,传感器id)
。这与您在问题末尾的建议接近,但列的顺序相反
从技术上讲,这可以防止传感器在同一时间点登录两个度量值,这似乎是数据的相关业务规则
说到查询的速度:这在很大程度上取决于查询本身。假设您有如下查询:
select sensor_id, measured_val, time_of_measuring
from data_table
where
sensor_id = ?
and time_of_measuring >= ?
and time_of_measuring < ?
order by sensor_id, time_of_measuring
作为另一个例子,考虑这个<代码> 子句:
where time_of_measuring >= ? and time_of_measuring < ?
对于此时间序列数据,相关的主(或唯一)键可能是
(测量时间,传感器id)
。这与您在问题末尾的建议接近,但列的顺序相反
从技术上讲,这可以防止传感器在同一时间点登录两个度量值,这似乎是数据的相关业务规则
说到查询的速度:这在很大程度上取决于查询本身。假设您有如下查询:
select sensor_id, measured_val, time_of_measuring
from data_table
where
sensor_id = ?
and time_of_measuring >= ?
and time_of_measuring < ?
order by sensor_id, time_of_measuring
作为另一个例子,考虑这个<代码> 子句:
where time_of_measuring >= ? and time_of_measuring < ?
最常见的查询是“where sensor_id=?ORDER BY rowid DESC LIMIT 5”,因此基本上是给定传感器的两个最新值。但是可能有数千个这样的传感器,所以我会把它们都放在一张表中。那么我需要为每个传感器创建一个索引,比如“在数据表(传感器id)上创建索引数据表(传感器id)”,这会有帮助吗?在这种情况下,主键根本不重要?最常见的查询是“where sensor_id=?ORDER BY rowid DESC LIMIT 5”,因此基本上是给定传感器的两个最新值。但是可能有数千个这样的传感器,所以我会把它们都放在一张表中。那么我需要为每个传感器创建一个索引,比如“在数据表(传感器id)上创建索引数据表(传感器id)”,这会有帮助吗?在这种情况下,主键根本不重要?