2016-04-21 3 views
0

Я хочу использовать SQLite для хранения некоторых данных метаданных в файле. Этот файл уже mmap'd. То, что я хочу сделать, это создать SQLite DB, передав char *, чтобы указать, где сделать БД, вместо того, чтобы выделить его. Это можно сделать? Документация SQLite для баз данных в памяти просто говорит, чтобы использовать «: memory:», и что БД будет уничтожен в конце процесса, без указания того, как использовать уже существующие данные или сохранить его.Как создать базу данных SQLite в памяти по определенному адресу

Если нет, то какие обходные пути существуют в Linux? Есть ли «обратный» mmap, поэтому я могу взять адрес и сопоставить его с новым файлом? (So ​​/ foo будет видом на часть/bar?)

ответ

1

Базы данных в памяти - это просто базы данных, кэш которых не сохраняется на диск.

Нет доступа к этим страницам.

Ваш единственный выбор - реализовать собственный VFS, чтобы перенаправить доступ к файлам в нужную часть этого файла.

+0

«инверсия базы данных базы данных - это просто базы данных, кэш которых не сохраняется на диске ». Это должно относиться конкретно к базам данных SQLite в памяти, потому что это, безусловно, неверно для систем баз данных в памяти в целом. –

1

Я не SQLite эксперта, но мне кажется, что вы могли бы использовать эту информацию здесь, чтобы использовать свой собственный распределитель, а также контролировать местоположение памяти, при котором SQLite создает в памяти базы данных: https://www.sqlite.org/c3ref/mem_methods.html

+0

Но вы не знаете, какое выделение используется для какой цели. –

+0

Это имеет значение? Если ваша цель контролирует использование памяти SQLite (т. Е. Знает/управляет адресом памяти, на котором создается IMDB), похоже, что это так. Может быть, мне что-то не хватает ... –

+0

Я даже не возражаю, создавая его на диске. Но мне нужно открыть его из памяти. Похоже, что VFS - это путь. – MichaelGG

Смежные вопросы