Как sqlite синхронизирует кеш страниц между различными процессами? - PullRequest
0 голосов
/ 24 мая 2019

Я знаю, что sqlite использует страницы кэша в процессе для повышения производительности чтения, также sqlite позволяет многопроцессорным системам получать доступ к одному и тому же файлу базы данных sqlite, применяя механизм блокировки на уровне файлов. Мой вопрос: если процесс А обновил страницу x, в то же время процесс B кэшировал страницу X, обработает ли B задержанное значение или есть механизм, чтобы уведомить процесс B об изменении?

1 Ответ

0 голосов
/ 24 мая 2019

С документация формата файла базы данных:

Счетчик изменений файла представляет собой 4-байтовое целое число с прямым порядком байтов по смещению 24, которое увеличивается всякий раз, когда файл базы данных разблокируется после изменения. Когда два или более процессов считывают один и тот же файл базы данных, каждый процесс может обнаруживать изменения базы данных из других процессов, отслеживая счетчик изменений. Процесс обычно хочет очистить кэш страницы своей базы данных, когда другой процесс изменил базу данных, поскольку кэш устарел. Счетчик изменений файла облегчает это.

Итак, да, есть способ уведомить другие соединения, когда кто-то изменяет базу данных, чтобы они могли сделать недействительными свои кеши.

...