2013-12-23 8 views
1


Я думаю, что это очень простой вопрос. Но я не могу решить это сам.
У меня есть два приложения. Один пишет в sqlite3 databse с очень быстрым темпом - около 6 транзакционных блоков в секунду. Другой должен иногда считывать данные из базы данных.
Как мне проектировать эти два приложения? На данный момент, когда 1-е приложение записывает другой, с ошибкой «база данных заблокирована» в любых функциях, которые я пытался выполнить: SQLite3_Open или SQLite3_Open_v2 с флагом SQLITE_OPEN_READONLY.
ГЛАВНЫЙ ВОПРОС:: Является ли одно приложение способным «SELECT», а другое - «INSERT» вообще?
Если нет, что мне делать?
Закройте соединение с базой данных, затем откройте другое соединение с базой данных, выберите, затем закройте его, затем откройте соединение для записи снова и продолжите вставку? Другими словами мне нужно, чтобы «изобрел» какой-то механизм, который контролировал бы доступ к базе данных separte из этих приложений «читать» и «писать»?
Если да, то есть возможность для расширения «A» для принудительного соединения «B» с закрытым подключением Спасибо!SQLite многопроцессорный доступ

+0

Эта ссылка может вам помочь: http://stackoverflow.com/questions/1680249/how-to-use-sqlite-in-a-multi-threaded-application – Anuraj

ответ

2

SQLite может обрабатывать несколько процессов в порядке. С поддержкой WAL вы можете даже читать из базы данных из одного соединения, пока другой пишет. Шесть транзакций в секунду не так уж много, предполагая, что каждый из них не занимает больше 166 мс каждый.

Заблокировка обычно возвращается при выполнении инструкции, а не при открытии базы данных. Возможно ли, чтобы первое соединение было открыто с помощью SQLITE_OPEN_EXCLUSIVE? Это может привести к тому, что другой процесс не сможет открыть соединение. Если это так, удалите этот флаг.

+0

Самуэль, благодарю вас за ответ!
Alex

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