一部のデータ ソースからデータをキャプチャし、永続ストレージに保存する Windows IoT アプリケーションがあります。これが私の技術スタックです
- Windows 10 IoT コア
- 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 行、データ レートは 10 Hz) の場合、レコードのフェッチに約 90 秒かかり、遅すぎることです。最後に、データを CSV に変換してファイルのダウンロードを提供する必要があります。ファイルをフラットな csv ファイルとして保存しようとしましたが、これは SQLite アプローチと比較して指数関数的に高速です。上記の場合のように、5 秒しかかかりません。平均して。
SQLite のパフォーマンスを最適化するために必要なオプションを知りたい (ある場合)。それは非常に単純なクエリです.SDカードのストレージが原因ではないかと思います.クラス10のストレージカードを使用しています.CSVも同じカードで適度な速度で動作しています.
この文脈では、どんな提案も高く評価されます。