1

一部のデータ ソースからデータをキャプチャし、永続ストレージに保存する Windows IoT アプリケーションがあります。これが私の技術スタックです

  1. Windows 10 IoT コア
  2. UWP バックグラウンド アプリケーション (C#)
  3. SQLite
  4. ユニバーサル Windows プラットフォーム 3.19.3 用の SQLite
  5. 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も同じカードで適度な速度で動作しています.

この文脈では、どんな提案も高く評価されます。

4

1 に答える 1