У меня есть приложение, которое считывает данные на карту и записывает их в базу данных sqlite. Приложение выполняет много других функций и является асинхронным (использует boost asio), за исключением записи в db part. Вот пример псевдокода:
struct records;
std::map<int, records> list;
void read() {
// Dump(read) X records into list
// If record id doesn't exist, add it. dirty = true
// If it exists, update all other fields. dirty = true if any fields changed.
}
void writeDB() {
sqlite3_prepare_v2();
for(const auto& record : list) { // iterate map
if(!record.dirty())
continue;
sqlite3_bind(); // bind record fields
sqlite3_step(); // execute sql
sqlite3_reset(); // reset
}
sqlite3_finalize();
}
main() {
while(1) {
read();
writeDB();
}
}
Мой первоначальный план состоял в том, чтобы создать новый поток внутри цикла for, который будет записывать каждую запись в базу данных параллельно. Есть две проблемы.
1) Может потребоваться реализация блокировки базы данных.
2) sqlite bind(), step() and reset()
работает с тем же оператором. Итак, записи должны быть записаны последовательно.
Я использую C ++ 17. Есть предложения по асинхронным вызовам базы данных? Спасибо за помощь!