SQLite и проверка семантики - PullRequest
0 голосов
/ 13 июня 2011

Я начинаю исследовать использование SQLite.Что я хотел бы сделать (помимо всего прочего) - реализовать какую-то семантику оформления заказа.Т.е., если одно соединение sql делает блокировку извлечения для одного столбца или строки, не имеет значения.Я не хотел бы, чтобы другие подключения были разрешены для чтения или изменения этих данных до тех пор, пока первое подключение не снимет блокировку ИЛИ первое подключение не закроется / приложение не будет обработано и т. Д.

Будет ли это реализовано в SQLite?

/ Заранее спасибо!

Ответы [ 2 ]

1 голос
/ 13 июня 2011

SQLite на самом деле не предназначен для большого параллелизма - его модель блокировки предназначена для блокировки на уровне базы данных. Если вам нужна блокировка на уровне записей (в основном это не так), вам нужна СУБД на основе сервера.

0 голосов
/ 13 июня 2011

Базы данных вообще не поддерживают семантику оформления заказа. Базы данных гарантируют изоляцию транзакции, но поскольку они не гарантируют, что транзакция завершится успешно, они могут позволить другой транзакции продолжить работу со старой версией данных, которую другая транзакция только что изменила (и еще не зафиксировала), и если транзакции фактически становятся несериализуемыми Откатывай обратно. Даже если они используют блокировку, они все равно не поддерживают ее явно. Вы читаете строку, она становится заблокированной для чтения, и если вы пишете ее, она становится заблокированной для записи, но вы не можете ее контролировать.

В частности, Sqlite блокирует всю базу данных, когда вы начинаете запись в транзакции, если только не в режиме WAL. Вы можете форсировать блокировку, начав транзакцию с begin immediate вместо begin. Однако в режиме WAL он поддерживает некоторый параллелизм. К сожалению, я не знаю точный режим.

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

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