Как мне создать базу данных sqllite3 в памяти? - PullRequest
11 голосов
/ 20 ноября 2008

Одним из подходящих вариантов использования для sqlite3 является «Базы данных в памяти». Это звучит как действительно полезный инструмент для моих приложений C ++. У кого-нибудь есть пример того, как это делается в C или C ++? Я специально ищу канонический способ записать несколько плоских файлов в базу данных в памяти, а затем выполнить несколько объединений.

Ответы [ 3 ]

16 голосов
/ 20 ноября 2008

Это на самом деле довольно легко. Просто укажите «: memory:» в качестве имени базы данных при открытии базы данных с помощью API C / C ++. Это особая константа, которую распознает двигатель. То же самое на самом деле работает для других языков, таких как Python или Ruby, поскольку они обычно просто оборачивают C / C ++ API. См. http://sqlite.org/c3ref/open.html для получения полной информации.

5 голосов
/ 02 декабря 2008

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

PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;

Из документов.

5 голосов
/ 20 ноября 2008

Просто откройте файл: memory: и он должен это сделать (по крайней мере, в PHP).

Вы упоминаете, что хотите прочитать несколько плоских файлов и присоединиться к ним. Если возможно сохранить плоские файлы как базы данных SQLite, вы можете напрямую работать с обоими, прикрепив один к другому:

ATTACH foo.db AS foo

Затем обратитесь к таблицам в foo следующим образом:

SELECT * FROM foo.users

Таким образом, вы можете выполнять свои объединения без необходимости создания базы данных в памяти.

...