Ich habe eine Windows IoT-Anwendung, die Daten von einigen Datenquellen erfasst und auf persistenten Speicher speichert. Hier ist mein Technologie-StackSQLite Leistungsoptimierung auf Windows IoT
- Windows-10 IoT Kern
- UWP Hintergrund Anwendung (C#)
- SQLite
- SQLite für Universal Windows-Plattform 3.19.3
- SQLite.NET-PCL NuGet https://github.com/oysteinkrog/SQLite.Net-PCL
und ich benutze Raspberry Pi 3 zum Testen dieser Lösung. Zum Speichern der Daten habe ich mich für SQLite entschieden. Im Anschluss wird das Schema der Tabelle
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; }
}
Zum Testen habe ich gespeichert 2 Millionen Zeilen in dieser Tabelle und es gibt keine Einfügung durchgeführt wird. Im Anschluss ist mein Code, um die Daten für die letzten 6 Stunden
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
Das Problem ist, zu holen, dass für nur sechs Stunden von Daten (etwa 216.000 Zeilen, Datenrate 10 Hz) es etwa 90 Sekunden unter Aufzeichnungen zu holen, das ist zu langsam. Am Ende muss ich die Daten in CSV konvertieren und eine Datei herunterladen, habe ich versucht, die Datei als eine flache CSV-Datei zu speichern, die im Vergleich zu SQLite exponentiell schnell ist, wie für den obigen Fall dauert es nur 5 Sekunden im Durchschnitt.
Ich möchte wissen, welche Optionen habe ich, um die SQLite-Leistung (falls vorhanden) zu optimieren? Es ist eine sehr einfache Abfrage, ich bezweifle, dass es wegen SD-Karte Speicher ist, verwende ich Klasse 10 Speicherkarte, und CSV arbeitet auch auf der gleichen Karte mit angemessener Geschwindigkeit.
Jeder Vorschlag wird in diesem Zusammenhang sehr geschätzt.