我有一个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 )";
这是存储此类数据的首选方式吗?
编辑:我想运行一个测试,在几天内连续收集数据并保存到数据库中。然后,我想通过在每个样本列表中查找特定模式、最小/最大值等来处理数据。
发布于 2018-05-28 19:29:49
我会创建一个类似这样的表,在这个表中,您可以在一个BLOB-entry中存储测量中的所有样本:
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;
发布于 2018-05-28 17:17:02
你应该提前知道你想对你的数据运行什么样的查询。在保存记录之前找到这些相关值,并放入单独的字段中。否则,将blob字段中的数组保存为二进制。
如果找到其他查询,则必须通过选择所需的值来重新处理BLOB值。
https://stackoverflow.com/questions/50562182
复制相似问题