Совместное использование базы данных SQLite между несколькими приложениями - PullRequest
4 голосов
/ 19 мая 2011

Можно создать базу данных SQlite в памяти:

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

, но если я правильно понял документацию , эта база данных является локальной для приложения, которое ее создало.

У меня есть требование для базы данных SQLite в памяти, к которой могут обращаться несколько приложений.Есть ли способ сделать это, кроме создания базы данных на виртуальном диске?

Это для встроенной платформы Linux.

Ответы [ 3 ]

4 голосов
/ 19 мая 2011

Вы не можете совместно использовать базу данных в памяти между процессами - она ​​ действительно не предназначена для этого, потому что в ней отсутствуют правильные обещания целостности (но это означает, что она быстрее) - так что либо базы данных в более постоянном хранилище (например, ramdisk) или поместить базу данных в единый процесс («менеджер базы данных») и использовать некоторую форму локальной коммуникационной стратегии (сокеты домена unix, именованные каналы и т. д.), чтобы позволить другие процессы, чтобы попросить менеджера базы данных сделать запрос для них.

1 голос
/ 19 мая 2011

Нет, вам нужно будет создать базу данных на ramdisk / tmpfs, если вы хотите, чтобы она была в памяти и делиться ею с другими приложениями.

0 голосов
/ 19 мая 2011

Вы можете создать базу данных (и межпроцессную блокировку) в процессе с необходимым временем жизни в разделяемой памяти.Все, что вам нужно сделать, это обработать его как любой другой ресурс совместно используемой памяти (не забывая блокировать / разблокировать при доступе к нему).К сожалению, я думаю, что для этого может потребоваться вмешательство в источник SQLITE, чтобы использовать предоставленную вами (разделяемую) память вместо того, чтобы выделять свою собственную.

http://pubs.opengroup.org/onlinepubs/009695399/basedefs/sys/shm.h.html

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...