Прежде всего, я знаю, что SQLite, вероятно, не самая подходящая СУБД для высоких требований параллелизма, но использование СУБД клиент / сервер для меня не вариант, по крайней мере, сейчас.
Приложение, которое я кодирую, вероятно, будет генерировать довольно много запросов и обновлений из разных потоков. Они не будут действительно тяжелыми или сложными обновлениями, вероятно, небольшими и быстрыми для большинства из них, но действительно непредсказуемо параллельными, поскольку они зависят от информации, поступающей от клиентов в сети. Насколько я знаю, SQLite в настоящее время может поддерживать много одновременных операций чтения, но только обновление за раз. Когда он пишет, ему необходимо получить эксклюзивную блокировку и вернуть исключение, если написано что-то еще.
Чтобы решить эту проблему, я подумал, что должен поставить в очередь (и, следовательно, сериализовать) операции обновления и одновременно читать из БД. Этого должно быть достаточно для меня. Но я не знаю, как на самом деле я не знаю, как это сделать, поскольку я использовал драйвер Zentus JDBC, которого, кажется, недостаточно для того, что я пытаюсь сделать.
Это мой вопрос, как вы думаете, я должен это сделать? Какая обертка подходит для этого?
Заранее спасибо! :)
UPDATE:
О параллелизме SQLite, на их веб-странице говорится:
(...) безопасно перемещать ручку соединения
через потоки до тех пор, пока
соединение не содержит fcntl ()
замки. Вы можете смело предположить, что нет
блокировки удерживаются, если нет транзакции
в ожидании, и все заявления имеют
был завершен.
И
Несколько процессов могут иметь одинаковые
База данных открыта одновременно.
Несколько процессов могут делать
ВЫБЕРИТЕ одновременно. Но только один
Процесс может вносить изменения в
база данных в любой момент времени,
однако.
(...)
Когда SQLite пытается получить доступ к файлу
который заблокирован другим процессом,
поведение по умолчанию - возврат
SQLITE_BUSY.
Надеюсь, это поможет:).