З 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хоча. Як я можу поділитись екземплярами між потоками без режиму спільного кешу?