Как сохранить базу данных sqlite в памяти в файл в Perl? - PullRequest
0 голосов
/ 14 ноября 2018

Я создаю базу данных SQLite в памяти , используя:

my $dsn      = "dbi:SQLite:dbname=:memory:"; # better in read/write operations performance than disk-file saved database.
my $user     = "";
my $password = "";
my $dbh = DBI->connect($dsn, $user, $password,{});

#… Doing some processing on the database (Creating tables/Inserting rows/Updating fields)

#… After finishing, I need to save the database to a local disk file.

Что мне нужно сделать, после окончания игры с базой данных в памяти, мне нужно сохранить ее на дискфайл file.db.


Обновлено (краткий ответ):
• Полезные команды:
Благодарю Шверн за егоответ и комментарий .

  • $dbh->sqlite_backup_to_file( $file_path ) Копирует базу данных из памяти в файл.
  • $dbh->sqlite_backup_from_file( $file_path ) Копирует базу данных в память из файла.
  • my $dbh = DBI->connect($dsn, $user, $password,{AutoCommit => 0}) Кажется, что отключение AutoCommit является лучшим и более простым вариантом для оптимизации производительности, как при использовании двух предыдущих команд.Мне просто нужно убедиться, что при отключении AutoCommit операции SQLite SELECT не выполняют никаких действий с диском ( другой вопрос ).

1 Ответ

0 голосов
/ 14 ноября 2018

Да, вы можете использовать $dbh->sqlite_backup_to_file( $filename ) и затем подключиться к этому файлу, как обычная база данных SQLite.Для получения дополнительной информации см. Документация по API резервного копирования SQLite .

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

my $dbh = DBI->connect(
    "dbi:SQLite:dbname=test.sqlite", undef, undef, { RaiseError => 1, AutoCommit => 0 }
);

...do your inserts...

$dbh->commit;

Простой тест показывает, что это так же быстро и более гибко.

Отключение AutoCommit даст вам мощный импульс с любой из опций.

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