Вход:  Пароль:  
FreeSource: SQLite/Удалено?/НовыеТранзакции ...
Free Source | Каталог | Изменения | НовыеКомментарии | Пользователи | Регистрация |

Транзакции в SQLite 3.0.8



DEFERRED — означает, что блокировка базы не произойдёт на момент начала транзакции. Данные будут записаны во время следующей операции записи. Первая же операция чтения выполнит SHARED lock, операция записи — RESERVED lock.


IMMEDIATE — немедленно выполняется блокировка RESERVED. Это гарантирует, что никакой процесс или нить не смогут выполнить запись в базу, или выполнить операцию “BEGIN IMMEDIATE” или “BEGIN EXCLUSIVE”, однако доступ на чтение разрешён.


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


Тип транзации по-умолчанию — DEFERRED (собственно именно это и вызывало практически невозможность нормально писать приложения, в которых несколько процессов пишут в одну базу, теперь эта проблема исправлена).

Комментарий от Alexander Deynichenko?


NB. Если начало и окончание транзакции не указано, то sqlite создаст неявную транзакцию для каждой DML инструкции. Это чревато тем, что для каждой инструкции будет каждый раз создаваться rollback журнал, открываться файл БД. (выполняя транзакцию, sqlite3 создает файл <имя базы>-journal, который потом может использоваться при ROLLBACK ).


Например, 10000 INSERT'ов с отложенной (DEFERRED) транзакцией выполняются около 3–5 секунд, а без явного указания транзакции около 5–6 минут.


Ссылок на эту страницу нет


 
Файлы [Скрыть файлы/форму]
Комментариев нет. [Показать комментарии/форму]