Безлимитный параллелизм SQL sqlite

Sqlite на android позволяет вам обращаться к базе данных из нескольких procs для чтения, но если вы в настоящее время пишете из одного процесса, чтение и запись из других procs вызовет исключение, потому что первая запись имеет блокировку на db.

Под «procs» я имею в виду другие потоки в одном приложении.

Есть ли стандартный способ, чтобы другие потоки просто подождали, пока база данных снова будет доступна, возможно с указанным таймаутом, а не выбрасывает исключение?

Предвосхищая «почему вы так делаете?» Ответы, это именно то, как мы это делаем, и все. Мы также не будем использовать контент-провайдера. Просто попробуйте синхронизировать доступ к db.

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

Solutions Collecting From Web of "Безлимитный параллелизм SQL sqlite"

Пока вы используете один и тот же объект SQLiteDatabase , синхронизация выполняется для вас.

Поэтому, если вы обращаетесь к объекту через одноэлементный режим, проблем не должно быть. Хотя вы можете добавить дополнительную логику, если хотите реализовать тайм-аут, например, ждать / уведомлять или что-то подобное.

Или вы можете использовать другую базу данных, которая поддерживает ее, например H2 . Я знаю, это может показаться странной идеей. Но, согласно моему первоначальному тесту, он работает хорошо (как на эмуляторе, так и на устройстве) и на самом деле не медленнее. За исключением открытия и закрытия базы данных, которая в настоящее время довольно медленная, около 1 секунды, но это имеет другие причины и, надеюсь, будет исправлено в следующей версии.