Загрузка существующей базы данных Sqlite в память для быстрого вычисления - PullRequest
2 голосов
/ 22 марта 2012

Кто-нибудь знает, как загрузить существующую базу данных (Sqlite 3) в память для быстрых вычислений в Perl, MATLAB или Java? Perl является предпочтительным?

Я работаю над проектом, который требует интенсивных вычислений, и я хочу, чтобы реальная база данных была исправлена. Поэтому я хочу прочитать всю базу данных Sqlite3 в память и выполнить что-нибудь там в памяти.

Я знаю основы подключения к базе данных в памяти, но похоже, что Perl может только создать новую базу данных, используя этот способ, а не загружая существующую (это вариант, который я хочу реализовать).

Ответы [ 3 ]

3 голосов
/ 09 октября 2012

Вы можете использовать метод &sqlite_backup_from_file в DBD::SQLite. Если дескриптор, для которого вы вызываете его, открыт в базе данных ': memory:', внешняя база данных считывается в него. Соответствующий метод &sqlite_backup_to_file позволяет вам записать его обратно, когда вы закончите. Эти функции являются просто оболочкой интерфейса C для резервных копий

3 голосов
/ 22 марта 2012

Я не думаю, что SQLite предоставляет какой-либо способ автоматической загрузки базы данных в память. Все, что вы можете сделать, это создать новую, пустую базу данных в памяти. Это не ограничение Perl.

Вы можете открыть базу данных в памяти, создать свои таблицы, присоединить к вашей дисковой базе данных, вставить в memory.table select * из file.table для каждой таблицы в вашей схеме, а затем отсоедините от базы данных на диске.

1 голос
/ 22 марта 2012

Один из способов решения этой проблемы - хранить базу данных SQLite на RAMdrive.

  • В Windows в прошлом я без проблем использовал следующий драйвер RAMDisk:

    http://members.fortunecity.com/ramdisk/RAMDisk/ramdriv.htm

    Не очень удобный, но довольно прочный с некоторыми приятными функциями.

  • В Linux вы можете попробовать что-то вроде:

    # mkdir /mnt/ramdisk
    # chmod 777 /mnt/ramdisk
    # mount -t tmpfs -o size=128M tmpfs /mnt/ramdisk/
    
...