Известны ли проблемы с использованием sqlite и блокировкой файлов на разных платформах?
Я использую sqlite для индексации проприетарного файла, и база данных будет доступна из нескольких потоков (используя разные дескрипторы sqlite) для чтения и записи.
Я знаю, что sqlite блокирует файл, чтобы обеспечить параллелизм для читателей / писателей, и зависит от API файла OS для блокировки.
Это нормально для windows и linux, но для соляриса и hpux я менее уверен в том, как там работает консультативная блокировка.
Кто-нибудь знает, насколько хорошо работает sqlite в отношении параллелизма на этих платформах?
1 ответ
По моему опыту (хотя он основан на несколько устаревших версиях SQLite, то есть 3.0.x - 3.2.x), вы не хотите полагаться на реализацию блокировки SQLite по умолчанию, когда есть какая-то конкуренция (даже если это просто несколько потоков в одном процесс).
Основная проблема заключается в том, что SQLite просто спит некоторое время, а затем пытается снова, если файл был заблокирован (до истечения времени ожидания занятого времени) - это может привести к ошибкам "базы данных заблокированы" в приложении. Обходной путь, который я реализовал, состоял в том, чтобы использовать мою собственную блокировку (используя мьютекс в многопоточном процессе) в дополнение к собственной блокировке SQLite.