Вопрос

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

Это было полезно?

Решение

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

Другие советы

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

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

ATTACH foo.db AS foo

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

SELECT * FROM foo.users

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

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

PRAGMA temp_store=MEMORY;
PRAGMA journal_mode=MEMORY;

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top