将数组存储在数据库中

时间:2018-05-28 08:32:45

标签: c# sql sqlite

我有一个2048个双打列表,代表信号中不同样本的幅度。我不断对信号进行重新采样(比如说每秒20次),并希望将数据存储在SQL数据库中。

对信号的一个完整测量看起来像这样:

List<double> sineCurve = new List<double>();

for (int i = 0; i < 2048; ++i)
{
   sineCurve.Add(50 + 50 * Math.Sin(i / Math.PI));
}

存储此数据的最佳方法是什么?最简单的方法似乎是创建一个包含2049列的表,并将每个度量存储为一个新行:

string sql = "create table sample( measurement_id int not null, sample_value1 double, sample_value2 double, ... sample_value1 double2048 )"; 

这是存储此类数据的首选方式吗?

编辑:我想运行一个测试,在那里收集数据并在几天内连续保存到数据库中。然后我想通过查找每个样本列表中的某些模式,最小/最大值等来处理数据。

2 个答案:

答案 0 :(得分:2)

我会创建一个这样的表,您可以将测量中的所有样本存储在一个BLOB条目中:

CREATE TABLE measurement (id (primary key) ,  generated_at (timestamp), sample (blob), SequenceNr (integer));

然后,如果你想在给定的时间范围内寻找测量结果,它看起来会像这样:

SELECT m.sample FROM measurement m
WHERE m.generated_at BETWEEN startDate AND endDate
ORDER BY m.SequenceNr;

答案 1 :(得分:1)

您应该事先知道您希望针对您的数据运行什么类型的查询。在保存记录并放入单独的字段之前查找这些相关值。否则将blob字段中的数组保存为二进制文件。

如果您发现其他查询,则必须通过选择所需的值来重新处理blob值。