Создание контрольной точки базы данных SQLITE в режиме WAL после каждой операции вставки / обновления / удаления - PullRequest
0 голосов
/ 08 октября 2018

У меня есть база данных SQLITE внутри моего приложения Xamarin для Android, и я должен иметь возможность читать и писать из нее одновременно из разных потоков и / или процессов.Поэтому я пытаюсь сейчас использовать его в режиме WAL.В основном работает нормально.Ошибки SQLITE_BUSY, с которыми я сталкивался ранее, больше не возникают.

Проблема в том, что я также хотел бы иметь возможность отключить эту базу данных от устройства (т.е. отправить по электронной почте) - предпочтительно в одном файле.

В режиме WAL у меня есть основной файл базы данных x.db3 вместе с x.db3-wal и x.db3-shm, что недостаточно для этой цели.Поэтому идея y заключалась в том, чтобы выполнять pragma checkpoint(passive) после каждой операции вставки, обновления или удаления, поэтому база данных практически всегда будет состоять из одного файла.В моем случае обновления редки, поэтому снижение производительности, вероятно, не проблема.Я понимаю, что на контрольно-пропускном пункте читатели не смогут прочитать данные, и я могу справиться с этим.Но, в любом случае, моя интуиция подсказывает мне, что это неправильный способ использовать протоколирование WAL, и поэтому я спрашиваю.Это «выглядит» как злоупотребление.

Буду признателен за любые идеи о проблемах, с которыми я могу столкнуться при таком подходе.

...