Процесс чтения и записи SQLite
-
22-09-2019 - |
Вопрос
У меня есть два процесса:
- Записывает в две таблицы каждую секунду (ish)
- Периодически считывает данные из указанных таблиц
Я знаю, что с SQLite любая запись блокирует всю базу данных, и поэтому иногда второй процесс может завершиться неудачей с заблокированной базой данных.
Есть ли что-нибудь, что вы можете предложить, что полностью устранило бы необходимость в том, чтобы эти два процесса касались одной и той же базы данных?Например, мог бы я атомарно перенести данные из записываемой базы данных во вторую базу данных, доступную только для чтения?
Спасибо :)
Решение
Вы можете настроить подключение к базе данных во втором процессе так, чтобы оно ожидало определенного времени, когда он обнаружит загруженную базу данных, периодически просыпаясь, чтобы проверить наличие свободной базы данных, прежде чем прекратить работу.
sqlite3_busy_timeout(sqlite3*, int ms);
Другие советы
Могу я предложить ознакомиться с часто задаваемыми вопросами по SQLite безопасность резьбы?
Нити - это зло.Избегайте их.
SQLite является потокобезопасным.Мы идем на эту уступку, поскольку многие пользователи предпочитают игнорировать советы, данные в предыдущем параграфе.Но для обеспечения потокобезопасности SQLite должен быть скомпилирован с макросом препроцессора SQLITE_THREADSAFE, установленным в 1.