З FAQ про SQLite я знав, що:
Кілька процесів можуть одночасно відкривати одну і ту ж базу даних.
SELECT
Одночасно можна робити кілька процесів . Однак лише один процес може вносити зміни в базу даних в будь-який момент часу.
Отже, наскільки я розумію , я можу: 1) Читання БД з декількох потоків ( SELECT
) 2) Читання дб з декількох потоків ( SELECT
) і запис з однієї нитки ( CREATE
, INSERT
, DELETE
)
Але я читав про " Записування вперед" журналу, що забезпечує більше одночасності, оскільки читачі не блокують авторів, а автор не блокує читачів . Читання та письма можуть тривати одночасно.
Нарешті, я повністю заплутався, коли знайшов його , коли вказано:
Ось інші причини отримання помилки SQLITE_LOCKED:
- Спроба
CREATE
абоDROP
таблиця або індекс, покиSELECT
виписка ще очікує.- Спроба записати в таблицю, коли a
SELECT
активний у цій самій таблиці.- Намагаючись зробити два
SELECT
в одній таблиці одночасно в багатопотоковому додатку, якщо sqlite не встановлений для цього.- fcntl (3, виклик F_SETLK у файлі DB виявляється невдалим. Наприклад, це може бути викликано проблемою блокування NFS. Одним з рішень для цієї проблеми є відміняти БД та скопіювати його назад, щоб він мав нове значення Inode
Отже, я хотів би уточнити для себе, чи варто уникати блокування? Чи можу я читати і писати одночасно з двох різних тем? Дякую.
isolation_level=None
хоча. Як я можу поділитись екземплярами між потоками без режиму спільного кешу?