У меня есть приложение Windows IoT, которое собирает данные из некоторого источника данных и сохраняет их в постоянном хранилище. Вот мой стек технологий
- Базовая версия Windows 10 Интернета вещей
- Фоновое приложение UWP (C#)
- SQLite
- SQLite для универсальной платформы Windows 3.19.3
- 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; }
}
Для тестирования я сохранил 2 миллиона строк в этой таблице, и вставка не выполняется. Ниже приведен мой код для получения данных за последние 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
Проблема в том, что всего за шесть часов данных (примерно 216000 строк, скорость передачи данных 10 Гц) получение записей занимает около 90 секунд, что слишком медленно. В конце мне нужно преобразовать данные в CSV и предоставить загрузку файла, я попытался сохранить файл в виде плоского файла csv, который экспоненциально быстр по сравнению с подходом SQLite, как в приведенном выше случае, это занимает всего 5 секунд в среднем.
Я хочу знать, какие варианты у меня есть для оптимизации производительности SQLite (если есть)? Это очень простой запрос, я сомневаюсь, что это связано с хранилищем на SD-карте, я использую карту памяти класса 10, и CSV также работает на той же карте с разумной скоростью.
Любое предложение высоко ценится в этом контексте.