Из 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
хотя. Без режима общего кэша, как я могу делиться экземплярами между потоками?