sqlite разделяется в базе данных памяти - PullRequest
0 голосов
/ 16 марта 2020

это на самом деле меня беспокоит уже несколько дней. У меня есть база данных sqlite (около 300 мегабайт), из которой мне нужно получить очень быстро. Вот почему я решил использовать режим памяти в sqlite с функцией резервного копирования. Вот моя проблема, основанная на этом sqlite do c. Вот му борьба. Когда я использую URI имя файла ": memory:", а затем backup .

Все, что я прекрасно вижу, даже в htop, этот процесс теперь имеет + 300 байт в памяти. Так что все мысли золотые.

Но поскольку мне нужен доступ к этой базе данных из нескольких потоков, и я не могу просто поделиться одним указателем на соединение с БД. Я хочу присвоить имя моей базе данных памяти и установить ее кеш как общий. Но когда я делаю это примерно так:

sqlite3_open("file:memdb1?mode=memory&cache=shared", &db);

Какое имя файла URI скопировано из документации. После того, как база данных резервных копий больше не добавляет 300 МБ в основной процесс памяти и на моем диске создается файл с именем "file: memdb1? Mode = memory & cache = shared" я также попытался "file :: memory :? cache = shared ", но с теми же результатами.

Я на linux Fedora 31 с sqlite 3.30.0

Любые идеи, предложения приветствуются.

Спасибо всем

1 Ответ

0 голосов
/ 16 марта 2020

Проблема в том, что вы используете имя файла URI, которое по умолчанию отключено для обратной совместимости. Вам необходимо включить имя файла URI, см. do c для ваших вариантов.

Облако в одну сторону будет просто:

sqlite3_open_v2("file:memdb1?mode=memory&cache=shared", &db, SQLITE_OPEN_CREATE | SQLITE_OPEN_READWRITE | SQLITE_OPEN_URI, null);
...