SQLite: читатели не ждут писателей - PullRequest
0 голосов
/ 03 мая 2018

У меня есть около 200 таблиц в базе данных SQLite с сотнями до миллионов строк. Эти таблицы запрашиваются многими параллельными процессами приложения OLTP.

Каждую таблицу необходимо периодически обновлять полным обновлением - удалите все строки, а затем вставьте разные, все в рамках транзакции. Для больших таблиц это занимает почти одну минуту, но такое обновление происходит только несколько раз в день для стола.

Мне нужно убедиться, что читателям не нужно ждать завершения обновления - следует использовать старую версию табличных данных до завершения транзакции, а затем использовать новую версию. Любое ожидание в случае необходимости должно выражаться в миллисекундах, а не в секундах или минутах.

Может ли это быть достигнуто, то есть избежать каких-либо блокировок базы данных или блокировок таблиц, блокирующих считыватели? Я не беспокоюсь о писателях, они могут ждать и сериализовать.

Это приложение Python с pysqlite.

1 Ответ

0 голосов
/ 04 мая 2018

Использование Режим WAL :

WAL обеспечивает больше параллелизма, поскольку читатели не блокируют писателей, а писатель не блокирует читателей. Чтение и запись могут продолжаться одновременно.

...