2016-07-03 9 views
1

Я использую Zeoslib для создания баз данных в памяти с помощью SQLite, и мне нужно сохранить базу данных на диск, когда программа закрывается или выгружает ее в файл регулярно.Существуют ли команды SQLite, которые могут выводить запрос выбора в виде команд вставки SQL?

Как программа SQLite3 не может обрабатывать в базах памяти, есть ли способ заставить SQLite экспортировать вывод запроса SELECT как INSERT операторов?

PS. sqlite3 может сбрасывать базу данных на диск, как указано в этом потоке, но база данных в памяти создается другим приложением, поэтому я не вижу, как заставить этот пример работать.

+0

Если вы хотите файл, то почему вы используете встроенную БД в первую очередь? –

+0

Мне нужна скорость обработки в памяти, но я хочу сохранить ее обратно на диск, когда я это сделаю. – vfclists

ответ

2

Чтобы сохранить БД памяти на диск, создайте копию с помощью SQLite backup API. Это требует, чтобы ваш драйвер базы данных фактически поддерживал API резервного копирования; По-видимому, Зеос не делает этого.


Что делает базу данных на диске, так замедленном не диск себя доступ (большинство из них можно кэшировать), но синхронизации, чтобы убедиться, что БД остается неизменным, даже если программа или сбой компьютера.

Есть ряд параметров, которые увеличивают скорость, за счет внесения в БД на диске как небезопасные, как в памяти БД:

  • Набор PRAGMA synchronous к OFF:

    С синхронным ВЫКЛОМ (0) SQLite продолжает без синхронизации, как только он передал данные в операционную систему. Если приложение, работающее с SQLite, сработает, данные будут безопасными, но база данных может быть повреждена, если операционная система выйдет из строя или компьютер потеряет питание до того, как эти данные будут записаны на поверхность диска. С другой стороны, фиксации могут быть на порядок быстрее при синхронном выключении.

  • Установите PRAGMA journal_mode памяти:

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

  • Увеличение PRAGMA cache_size (по умолчанию обычно всего 2 МБ);

  • Отключить PRAGMA secure_delete.