#sqlite
#sqlite
Вопрос:
В приложении, которое поставляется с базой данных SQLite, доступной только для чтения, я обнаружил, что открытие базы данных как неизменяемой радикально повышает производительность запросов. Однако в документации SQLite говорится об этом (выделение мое):
Неизменяемый параметр — это логический параметр запроса, который указывает, что файл базы данных хранится на носителе, доступном только для чтения. Когда установлен параметр immutable, SQLite предполагает, что файл базы данных не может быть изменен даже процессом с более высокими привилегиями, и поэтому база данных открывается только для чтения, а все блокировки и обнаружение изменений отключены.
Это немного сбивает меня с толку, потому что носитель (программные файлы Windows) не доступен только для чтения, и его можно изменить, но ожидается, что он не изменится. Само приложение не изменяет базу данных. Пользователь может изменить базы данных с помощью внешних инструментов (или просто открыть их в Блокноте и повредить), но мы бы назвали эту ошибку пользователя и сказали им не делать этого.
Меня беспокоит то, что эта часть документации может указывать на какой-то другой процесс, о котором я не знаю (например, возможно, Windows периодически делает что-то, что может привести к некоторому изменению файла базы данных).).
Если само приложение не изменяет базу данных, и пользователь тоже этого не делает, и на компьютере нет какой-либо другой вредоносной или плохо закодированной программы, которая могла бы касаться файлов, которые ей не принадлежат, достаточно ли безопасно открывать базу данных SQLite как неизменяемую?
Ответ №1:
Экспериментально ответ кажется да, это безопасно. Я внес это изменение и не заметил никаких проблем с ним.