我有一个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 )";
这是存储此类数据的首选方式吗?
编辑:我想运行一个测试,在那里收集数据并在几天内连续保存到数据库中。然后我想通过查找每个样本列表中的某些模式,最小/最大值等来处理数据。
答案 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值。