Известны ли проблемы с использованием sqlite и блокировкой файлов на разных платформах? - PullRequest
4 голосов
/ 20 апреля 2009

Я использую sqlite для индексации проприетарного файла, и база данных будет доступна из нескольких потоков (с разными дескрипторами sqlite) для чтения и записи.

Я знаю, что sqlite блокирует файл, чтобы обеспечить параллелизм для читателей / писателей, и зависит от API файла OS для блокировки.

Это нормально для windows и linux, но для соляриса и hpux я менее уверен в том, как там работает рекомендательная блокировка.

Кто-нибудь знает, как хорошо работает sqlite в отношении параллелизма на этих платформах?

1 Ответ

4 голосов
/ 21 апреля 2009

По моему опыту (хотя он основан на несколько устаревших версиях SQLite, то есть 3.0.x - 3.2.x), вы не хотите полагаться на реализацию блокировки SQLite по умолчанию, когда есть какая-то конкуренция (даже если это просто несколько потоков в том же процессе).

Основная проблема заключается в том, что SQLite просто спит некоторое время, а затем пытается снова, если файл был заблокирован (до истечения времени ожидания занятого ожидания) - это может привести к ошибкам "базы данных заблокированы" в приложении. Обходное решение, которое я реализовал, заключалось в использовании собственной блокировки (с использованием мьютекса в многопоточном процессе) в дополнение к собственной блокировке SQLite.

...