Записать базу данных sqlite3 в память в файл, используя clsql
Как показывает вопрос. Я создал базу данных в памяти, используя ":memory:"
а также clsql:with-database
повысить производительность записи / вставки-запроса. Но в конце я хочу иметь постоянную копию заполненной базы данных на моем жестком диске.
Это должно выглядеть примерно так:
(clsql:with-database (db (":memory:") :database-type :sqlite3)
;;entering db-scheme
;;entering a bunch of data
(magically-write-database-to-file db file-path))
Как мне этого добиться?
2 ответа
Если вам не нужна согласованность данных до завершения создания базы данных, просто используйте обычный файл базы данных и настройте его для отключения транзакций и синхронизации диска:
(execute-command "PRAGMA journal_mode = OFF")
(execute-command "PRAGMA synchronous = OFF")
Я думаю, что вам просто нужно создать таблицы с create-view-from-class
затем позвоните update-records-from-instance
на ваших объектах.
Однако я не уверен, имеет ли смысл сначала создание явной базы данных в памяти. Вы можете сначала создать коллекцию объектов, а затем поместить их в базу данных с помощью update-records-from-instance
на одном дыхании. "Классы просмотра" CLSQL - это на самом деле обычные классы с некоторой информацией о том, как их сохранять / загружать. Когда вы просто меняете объекты без сохранения, волшебства не происходит.