Известны ли проблемы с использованием sqlite и блокировки файлов на разных платформах?

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

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

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

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

Ответ 1

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

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