Операция записи SQLite блокирует базу данных только для других процессов или для потоков одного процесса? - PullRequest
0 голосов
/ 12 октября 2009

Блокирует ли операция записи SQLite базу данных только для других процессов или для потоков одного процесса? Можно ли использовать SQLite в многопоточном (= многосессионном) приложении ASP.Net?

Ответы [ 2 ]

2 голосов
/ 13 октября 2009

Возможно, вы захотите взглянуть на Блокировка файлов и параллелизм в SQLite версии 3 .

В частности, я думаю, что вы заинтересованы в блокировке базы данных "ЭКСКЛЮЗИВ":

ЭКСКЛЮЗИВ

ЭКСКЛЮЗИВНАЯ блокировка необходима для записи в файл базы данных. Только одна ИСКЛЮЧИТЕЛЬНАЯ блокировка разрешена для файла, и никакие другие блокировки любого рода не могут сосуществовать с ИСКЛЮЧИТЕЛЬНОЙ блокировкой. Чтобы максимизировать параллелизм, SQLite работает, чтобы минимизировать время, в течение которого удерживаются ИСКЛЮЧИТЕЛЬНЫЕ блокировки.

Когда процесс или имеет эксклюзивную блокировку базы данных, все другие операции (чтение или запись) запрещены.

Что касается мультисессионного ASP.net, я бы предположил, что большую часть времени вы будете читать только из базы данных:

SHARED

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

Нет проблем со многими параллельными чтениями в базе данных SQLite; вы будете ограничены только основной ОС / файловой системой. Если вы выполняете много операций чтения и записи одновременно, вас может заинтересовать Соответствующее использование для SQLite , которое гласит:

SQLite обычно отлично работает в качестве движка базы данных для веб-сайтов с низким и средним трафиком (то есть 99,9% всех веб-сайтов). Объем веб-трафика, который может обрабатывать SQLite, зависит, конечно, от того, насколько интенсивно веб-сайт использует свою базу данных. Вообще говоря, любой сайт, который получает менее 100 тыс. Посещений в день, должен нормально работать с SQLite. Показатель 100K хитов в день - это консервативная оценка, а не жесткая верхняя граница Было продемонстрировано, что SQLite работает с 10-кратным объемом трафика.

Кроме того, в ответ на ваш комментарий к ответу Паскаля, если вы проверите вышеуказанную ссылку, вы увидите, что SQLite не делает различий между процессами или потоками, поскольку все блокировки зависят от файловой системы , а не от каких-либо блокировки на уровне программы.

Модуль пейджера эффективно контролирует доступ к отдельным потокам, или отдельным процессам, или к обоим. Повсюду в этом документе всякий раз, когда пишется слово «процесс», вы можете заменить слово «нить», не меняя истинности утверждения.

0 голосов
/ 12 октября 2009

Эта запись из часто задаваемых вопросов по SQLite может помочь вам:

Может несколько приложений или несколько экземпляры одного и того же приложения получить доступ к одному файлу базы данных на в то же время?

Несколько процессов могут иметь одинаковые База данных открыта одновременно. Несколько процессов могут делать ВЫБЕРИТЕ одновременно. Но только один Процесс может вносить изменения в база данных в любой момент времени, однако.

Итак, я бы сказал, что только один процесс / поток / все, что может записать в вашу БД в данный момент.

(подробнее можно прочитать на странице часто задаваемых вопросов; вам следует прочитать: я не все цитировал)


И о многопоточности:

Является ли SQLite поточно-ориентированным?

SQLite является потокобезопасным. Мы делаем это концессия, так как многие пользователи выбирают игнорировать советы, данные в предыдущий абзац. Но для того, чтобы быть потокобезопасный, SQLite должен быть скомпилирован с SQLITE_THREADSAFE Макрос препроцессора установлен в 1. Оба Предварительно скомпилированные двоичные файлы для Windows и Linux в раздаче скомпилированы это способ.

(то же примечание)

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