Как я могу синхронизироваться с диском базы данных SQLite с PRAGMA синхронным = OFF - PullRequest
10 голосов
/ 16 ноября 2011

Мне нужен очень быстрый доступ к базе данных SQLite. Установка параметров таким образом:

PRAGMA synchronize = OFF
PRAGMA jorunal_mode = MEMORY

делает скорость достаточной для моего проекта. Эти настройки заставляют SQLite оставить синхронизацию с файлом базы данных в руках операционной системы. Но есть несколько случаев, некоторые определенные вставки, после которых я должен быть уверен , что данные были записаны на диск.

Можно ли заставить SQLite записать все данные (ожидающие в журнале памяти) на диск?

Спасибо.

1 Ответ

8 голосов
/ 06 апреля 2012

Я бы предложил вам использовать недавно внедренную WAL journal_mode.Таким образом, вы можете оставить от synchronous до normal и записывать все свои записи на диск по ходу:

Операции записи выполняются очень быстро, поскольку они включают в себя запись содержимого только один раз (по сравнению с двумядля транзакций отката-журнала) и потому что записи все последовательные.Кроме того, синхронизация содержимого на диске не требуется, если приложение готово пожертвовать долговечностью после потери питания или полной перезагрузки.(Писатели синхронизируют WAL при каждой фиксации транзакции, если PRAGMA синхронный установлен на FULL, но пропустите эту синхронизацию, если PRAGMA синхронный установлен на NORMAL.)

Выше взято из:

http://www.sqlite.org/wal.html

Если этого недостаточно, вы все равно можете вызвать PRAGMA database.wal_checkpoint;, если хотите быть уверенным, что ваши записи не только записываются на диск, но и «интегрируются» в вашу БД.Проверьте следующее для получения дополнительной информации:

http://www.sqlite.org/pragma.html#pragma_wal_checkpoint

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...