SQLite: читатели не ждут писателей
У меня есть около 200 таблиц в базе данных SQLite с сотнями до миллионов строк. Эти таблицы запрашиваются многими параллельными процессами приложения OLTP.
Каждую таблицу необходимо периодически обновлять полным обновлением - удалите все строки, а затем вставьте разные, все в рамках транзакции. Для самых больших таблиц это занимает почти одну минуту, но такое обновление происходит только несколько раз в день за столом.
Мне нужно убедиться, что читателям не нужно ждать завершения обновления - следует использовать старую версию данных таблицы до завершения транзакции, а затем использовать новую версию. Любое ожидание в случае необходимости должно выражаться в миллисекундах, а не в секундах или минутах.
Можно ли этого достичь, т.е. избежать каких-либо блокировок базы данных или блокировок таблиц, блокирующих считыватели? Я не беспокоюсь о писателях, они могут ждать и сериализоваться.
Это приложение на Python с pysqlite.
1 ответ
Использовать режим WAL:
WAL обеспечивает больше параллелизма, поскольку читатели не блокируют писателей, а писатель не блокирует читателей. Чтение и запись могут продолжаться одновременно.