Из SQLite FAQ я знаю, что:
Несколько процессов могут одновременно открывать одну и ту же базу данных. Несколько процессов могут выполнять
SELECTодновременно. Однако только один процесс может вносить изменения в базу данных в любой момент времени.
Итак, насколько я понимаю , я могу: 1) Чтение БД из нескольких потоков ( SELECT) 2) Чтение дб из нескольких потоков ( SELECT) и запись из одной нити ( CREATE, INSERT, DELETE)
Но я читал о журналировании записи вперед, которое обеспечивает больше параллелизма, поскольку читатели не блокируют писателей, а писатель не блокирует читателей . Чтение и запись могут происходить одновременно.
Наконец, я совсем запутался, когда нашел его , когда указал:
Вот другие причины для получения ошибки SQLITE_LOCKED:
- Попытка
CREATEилиDROPтаблицы или индекса, покаSELECTоператор еще не завершен.- Попытка записи в таблицу, пока
SELECTактивна эта таблица.- Попытка сделать два
SELECTна одной и той же таблице одновременно в многопоточном приложении, если sqlite не настроен на это.- fcntl (3, сбой вызова F_SETLK для файла DB. Это может быть вызвано, например, проблемой блокировки NFS. Одним из решений этой проблемы является удаление базы данных из базы данных и ее копирование обратно, чтобы у нее было новое значение Inode
Итак, я хотел бы уточнить для себя, стоит ли избегать блокировки? Могу ли я читать и писать одновременно из двух разных тем? Спасибо.
isolation_level=Noneхотя. Без режима общего кэша, как я могу делиться экземплярами между потоками?