sqlite - временные данные в памяти
Моя ситуация: у меня есть файл на базе sqlite db и я хочу, чтобы все временные вещи делались в памяти (временные базы данных для больших запросов и т. д.). я попытался использовать команду PRAGMA temp_store = 2, но я не уверен на 100%, действительно ли она выполняет то, что я хочу. Странно то, что во время отладки я дохожу до функции winGetTempname, которая открывает временный файл на диске!
я подумал, как только у меня будет установлен этот прагма, он даже не должен пытаться открыть временный файл...
я также попытался использовать флаг препроцессора TEMP_STORE, но опять же, вызов winGetTempname все еще сделан...
есть идеи?
3 ответа
Из документации
Файлы журнала отката, основного журнала и журнала выписок всегда записываются на диск. Но другие виды временных файлов могут храниться только в памяти и никогда не записываться на диск. Записываются ли временные файлы, кроме журналов отката, мастера и оператора, на диск или сохраняются только в памяти, зависит от
SQLITE_TEMP_STORE
параметр времени компиляции, прагма temp_store и размер временного файла.
Из вышесказанного ясно, что если вы установите правильные флаги, все временные действия будут выполняться в памяти, кроме механизмов журналирования.
Если вы хотите быть уверенным, используйте утилиту для мониторинга вашего приложения на предмет активности файловой системы, например Process Monitor в Windows.