Database 时间序列的SQLite数据库结构

Database 时间序列的SQLite数据库结构,database,sqlite,time-series,structure,series,Database,Sqlite,Time Series,Structure,Series,我的VB.NET应用程序生成要存储在SQLite数据库中的模拟数据。数据由数百个变量组成,这些变量的值最多为50k个时间步(发生/测量)。变量的数量是可变的。时间步长可以从10到50k不等 到目前为止,我只有一张桌子。第一列包含时间戳(主键),下面包含每个变量的变量值(列名=变量名)。行中填充了每个时间步的时间戳和变量值: timestamp | var1 | var2 | var3 | ... -----------------------------------------

我的VB.NET应用程序生成要存储在SQLite数据库中的模拟数据。数据由数百个变量组成,这些变量的值最多为50k个时间步(发生/测量)。变量的数量是可变的。时间步长可以从10到50k不等

到目前为止,我只有一张桌子。第一列包含时间戳(主键),下面包含每个变量的变量值(列名=变量名)。行中填充了每个时间步的时间戳和变量值:

timestamp | var1    | var2    | var3    | ...
----------------------------------------------  
1         | var1(1) | var2(1) | var3(1) | ...  
2         | var1(2) | var2(2) | var3(2) | ...  
3         | var1(3) | var2(3) | var3(3) | ...  
...       | ...     | ...     | ...     | ...  
我使用:

CREATE TABLE variables(timestamp INTEGER PRIMARY KEY, var1 REAL, var2 REAL, ...);
这很有效。我使用数据库保存模拟数据,以备以后评估。我需要绘制选定的时间序列,并将特定时间跨度的一些变量的值复制到Excel(计算总和、最大值等)

我读过《不要添加太多列》(我可能有500多个变量/列)。关于性能,采用不同的结构是否更好?例如,一个表有四列:
ID(主键)
时间戳
变量名
变量值

ID | timestamp | varName | varValue
------------------------------------  
1  | 1         | var1    | var1(1)  
2  | 2         | var1    | var1(2)  
...| ...       | ...     | ...  
50 | 50        | var1    | var1(50)  
51 | 1         | var2    | var2(1)  
52 | 2         | var2    | var2(2)  
...| ...       | ...     | ...  
在本例中,我将有50k个时间步长*500个变量=2500万行,但列数是固定的。还有更好的办法吗


如果我插入了非升序
时间戳
顺序的行,那么性能(对于读取查询)会发生什么变化?

还有一个中间选项。时间戳、指示器、值1-n。e、 g.指标1-10和50值列。用于区分集合的inidcator。另一种方法是用一列保存所有值,例如CSV(逗号分隔值)。如果您想讨论结构,请显示相关表的
。模式
,或者更好,
.dump
定制玩具数据库。@MikeT CSV类值表示多个信息以后可能会成为问题。我认为CSV类表示对于许多读写查询来说并不容易@Yunnosch:我不熟悉SQlite和数据库。我不熟悉.schema和.dump。你能详细说明一下吗?我认为上面的表格显示了我现在的想法和改变它的想法。。今天,我尝试使用第二种方法。事实证明,它的性能不如我的第一种方法,因为我必须在表中插入更多的行。使用SQLite时,可以使用SQLite命令行工具访问数据库文件(至少如果您可以在PC上获取该文件)。这允许直接使用SQL语法测试查询。它还允许使用某些非SQL命令。其中包括
.dump
,它将输出一些适合从头创建数据库的SQL语法行。这使得大约90%的MCVE非常有用。还有一个中间选项。时间戳、指示器、值1-n。e、 g.指标1-10和50值列。用于区分集合的inidcator。另一种方法是用一列保存所有值,例如CSV(逗号分隔值)。如果您想讨论结构,请显示相关表的
。模式
,或者更好,
.dump
定制玩具数据库。@MikeT CSV类值表示多个信息以后可能会成为问题。我认为CSV类表示对于许多读写查询来说并不容易@Yunnosch:我不熟悉SQlite和数据库。我不熟悉.schema和.dump。你能详细说明一下吗?我认为上面的表格显示了我现在的想法和改变它的想法。。今天,我尝试使用第二种方法。事实证明,它的性能不如我的第一种方法,因为我必须在表中插入更多的行。使用SQLite时,可以使用SQLite命令行工具访问数据库文件(至少如果您可以在PC上获取该文件)。这允许直接使用SQL语法测试查询。它还允许使用某些非SQL命令。其中包括
.dump
,它将输出一些适合从头创建数据库的SQL语法行。这使得大约90%的MCVE相当有用。