Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在sqlite3中使用标识符存储时间序列数据的最佳方法_Sql_Sqlite_Datetime_Where Clause_Query Performance - Fatal编程技术网

在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)”,这会有帮助吗?在这种情况下,主键根本不重要?