sqlite: проверка блокировки чтения / записи - PullRequest
3 голосов
/ 11 ноября 2010

У меня есть 2 процесса, которые оба обращаются к базе данных sqlite3. Хотя чтение в sqlite не является проблемой, запись в базу данных может выполнять только один процесс. Согласно FAQ: http://www.sqlite.org/faq.html#q5 sqlite использует блокировки чтения / записи.

Как проверить, заблокирована ли база данных для записи другим процессом, как из python, так и из c ++?

[править] Я имею в виду, что выполнение запроса является опцией, но это требует производительности в зависимости от запроса. Поэтому вопрос также в том, какой тип запроса я использую, чтобы минимизировать этот эффект. Я также хотел бы заблокировать / разблокировать базу данных самостоятельно.

1 Ответ

2 голосов
/ 11 ноября 2010

Когда SQLite пытается получить доступ к заблокированной базе данных, по умолчанию он возвращает SQLITE_BUSY. В документации описаны способы добавления настраиваемой обработки к этому событию: http://www.sqlite.org/faq.html#q5.

Из документации я понимаю, что любая функция, которую вы вызываете и пытается написать в эту заблокированную базу данных, просто возвращает SQLITE_BUSY, и это будет вашим уведомлением о том, что база данных заблокирована.

Если вас беспокоит выполнение записи, которая не будет завершена, вы можете реализовать обратный вызов занятого обработчика (sqlite3_busy_handler) в сочетании с тайм-аутом занятости (sqlite3_busy_timeout), который будет повторять запись через x миллисекунд.

[edit] В http://www.sqlite.org/c3ref/io_methods.html, упоминается структура указателей на функции, одним из которых является xCheckReservedLock (), которая возвращает true, если файл заблокирован. В этой структуре все другие функции, связанные с блокировкой. Я не уверен в доступе к ним извне библиотеки sqlite, но это может стоить исследовать. Я думаю, что вы делаете это через этот интерфейс: http://www.sqlite.org/c3ref/file_control.html

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