我有一个 Windows IoT 应用程序,它从某个数据源捕获数据并将其存储在持久存储中。这是我的技术栈
- Windows 10 物联网核心版
- UWP 后台应用程序 (C#)
- SQLite
- 通用 Windows 平台 3.19.3 的 SQLite
- SQLite.NET-PCL NuGet https://github.com/oysteinkrog/SQLite.Net-PCL
我正在使用 Raspberry Pi 3 来测试这个解决方案。为了存储数据,我决定使用 SQLite。以下是表的架构
public class tblDataLog
{
[PrimaryKey]
[AutoIncrement]
public int RecordId { get; set; }
public int? Param1 { get; set; }
public int? Param2 { get; set; }
public double? Param2 { get; set; }
public double? Param4 { get; set; }
public double? Param5 { get; set; }
public int? Param6 { get; set; }
public int? Param7 { get; set; }
public double? Param7 { get; set; }
public double? Param8 { get; set; }
public double? Param9 { get; set; }
public double? Param10 { get; set; }
public double? Param11 { get; set; }
[Indexed]
public DateTime RecordedOn { get; set; }
}
为了测试,我在这个表中存储了 200 万行,并且没有执行插入操作。以下是我获取过去 6 小时数据的代码
var commandstr = $"select * from tblDataLog Where RecordedOn >= " + DateTime.Now.AddHours(-6) + " AND RecordedOn <= " + DateTime.Now;
var cmd = Connection.CreateCommand(commandstr);
var sensorDataQuery = cmd.ExecuteQuery<tblDataLog>(); //This line takes around 90 seconds on average to complete
问题在于,对于仅 6 小时的数据(大约 216000 行,数据速率为 10Hz),获取记录需要大约 90 秒,这太慢了。最后,我需要将数据转换为 CSV 并提供文件下载,我尝试将文件存储为平面 csv 文件,与 SQLite 方法相比,它的速度呈指数级增长,就像上述情况一样,它只需要 5 秒一般。
我想知道我有哪些选项可以优化 SQLite 性能(如果有的话)?这是一个非常简单的查询,我怀疑是因为 SD 卡存储,我使用的是 10 类存储卡,CSV 也在同一张卡上以合理的速度工作。
在这种情况下,任何建议都会受到高度赞赏。