избегая голодания читателя sqlite - PullRequest
0 голосов
/ 19 февраля 2020

У меня есть два процесса с общей базой данных sqlite, каждый из которых имеет собственное подключение к базе данных. один процесс выполняет запись в базу данных с высокой скоростью, а один процесс выполняет чтение из базы данных. Меня интересует, как избежать проблемы «голодания читателя», так как писатель обращается к базе данных с высокой скоростью, блокируя таким образом базу данных для читателя.

Я использую sqlite3_busy_timeout, поэтому читатель ожидает, если база данных заблокирована, но из описания sqlite3_busy_timeout я понимаю, что обработчик занятости просто несколько раз спит с повторными попытками. если писатель хочет заблокировать базу данных в то время, ни одна из повторных попыток не будет выполнена.

sqlite file locking documentation описывает противоположную проблему: «голодание писателя» и меры по уменьшению в версии sqlite 3. но я не смог найти ссылку на противоположную проблему «голодание читателя». Есть ли лучшие практики, чтобы избежать такой проблемы?

1 Ответ

1 голос
/ 19 февраля 2020

Переведите базу данных в режим WAL .

WAL обеспечивает больше параллелизма, так как читатели не блокируют писателей, а писатель не блокирует читателей. Чтение и запись могут продолжаться одновременно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...