SQLite в оперативной памяти

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

SQLite в оперативной памяти

Сообщение Kenwud » 05.09.2010 18:10:37

Здравствуйте, не подскажите как работать с SQLite в оперативной памяти?
Т.е. чтобы сначала SQLite базу скопировать в память, поработать с ней и в конце результат записать на диск.
Можно такое сделать с ZeosDBO?
Kenwud
новенький
 
Сообщения: 15
Зарегистрирован: 31.10.2009 03:03:50

Re: SQLite в оперативной памяти

Сообщение Padre_Mortius » 05.09.2010 20:57:48

Насколько я знаю такое невозможно, да и смысла нет помещать всю базу в память
Padre_Mortius
энтузиаст
 
Сообщения: 1265
Зарегистрирован: 29.05.2007 17:38:07
Откуда: Спб

Re: SQLite в оперативной памяти

Сообщение Kenwud » 05.09.2010 21:15:56

БД весит не много, а работа с ней идёт постоянно. В общем чтобы ЖД не мучить хочу БД в ОЗУ перенести на время работы программы.
Где-то про такое читал, именно про SQLite, хотя может путаю :(
Kenwud
новенький
 
Сообщения: 15
Зарегистрирован: 31.10.2009 03:03:50

Re: SQLite в оперативной памяти

Сообщение coyot.rush » 05.09.2010 21:28:21

Где-то про такое читал, именно про SQLite, хотя может путаю

Может это
SQlite In-Memory Databases http://www.sqlite.org/inmemorydb.html
In-Memory Databases

An SQLite database is normally stored in a single ordinary disk file. However, in certain circumstances, the database might be stored in memory.

The most common way to force an SQLite database to exist purely in memory is to open the database using the special filename ":memory:". In other words, instead of passing the name of a real disk file into one of the sqlite3_open(), sqlite3_open16(), or sqlite3_open_v2() functions, pass in the string ":memory:". For example:

rc = sqlite3_open(":memory:", &db);

When this is done, no disk file is opened. Instead, a new database is created purely in memory. The database ceases to exist as soon as the database connection is closed. Every :memory: database is distinct from every other. So, opening two database connections each with the filename ":memory:" will create two independent in-memory databases.

The special filename ":memory:" can be used anywhere that a database filename is permitted. For example, it can be used as the filename in an ATTACH command:

ATTACH DATABASE ':memory:' AS aux1;

Note that in order for the special ":memory:" name to apply and to create a pure in-memory database, there must be no additional text in the filename. Thus, a disk-based database can be created in a file by prepending a pathname, like this: "./:memory:".
Temporary Databases

When the name of the database file handed to sqlite3_open() or to ATTACH is an empty string, then a new temporary file is created to hold the database.

rc = sqlite3_open("", &db);

ATTACH DATABASE '' AS aux2;

A different temporary file is created each time, so that just like as with the special ":memory:" string, two database connections to temporary databases each have their own private database. Temporary databases are automatically deleted when the connection that created them closes.

Even though a disk file is allocated for each temporary database, in practice the temporary database usually resides in the in-memory pager cache and hence is very little difference between a pure in-memory database created by ":memory:" and a temporary database created by an empty filename. The sole difference is that a ":memory:" database must remain in memory at all times whereas parts of a temporary database might be flushed to disk if database becomes large or if SQLite comes under memory pressure.

The previous paragraphs describe the behavior of temporary databases under the default SQLite configuration. An application can use the temp_store pragma and the SQLITE_TEMP_STORE compile-time parameter to force temporary databases to behave as pure in-memory databases, if desired.
Аватара пользователя
coyot.rush
постоялец
 
Сообщения: 309
Зарегистрирован: 14.08.2009 08:59:48

Re: SQLite в оперативной памяти

Сообщение Kenwud » 06.09.2010 02:36:01

Да, это я и имел ввиду, спасибо!
Вот что нашёл на форуме Zeoslib http://zeos.firmos.at/viewtopic.php?t=1 ... ite+memory

Буду разобраться. Если кто уже имел с этим дело, поделитесь опытом пожалуйста :oops:

Как я понял можно создать новую (чистую) базу в памяти
Код: Выделить всё
ZConnection.Database:=':memory:';

а дальше уже с ней работать, как обычно.
Kenwud
новенький
 
Сообщения: 15
Зарегистрирован: 31.10.2009 03:03:50


Вернуться в Lazarus

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 37

Рейтинг@Mail.ru