SQLite параллелизм с Python? - PullRequest
2 голосов
/ 10 июня 2011

Предположим, у меня есть огромный файл SQLite (скажем, 500 [МБ]).Могут ли 10 различных python экземпляров получить доступ к этому файлу одновременно и для обновления различных записей этого ?.Обратите внимание, что акцент здесь делается на различных записях .

Например, предположим, что файл SQLite имеет, например, 1M строки:

экземпляр 1 будет иметь дело с (иобновление) строки 0 - 100000

экземпляр 2 будет обрабатывать (и обновлять) строки 100001 - 200000

.........................

экземпляр 10 будет обрабатывать (и обновлять) строки 900001 - 1000000


Это означает, что каждый экземпляр python будет обновлять только уникальное подмножествофайл.Будет ли это работать, или у меня будут серьезные проблемы с целостностью?

Ответы [ 2 ]

4 голосов
/ 10 июня 2011

Несколько. Только один экземпляр может писать в любой момент времени, что означает, что одновременные записи будут блокироваться (см. FAQ по SQLite ). У вас не будет проблем с целостностью, но я не уверен, что вы действительно выиграете от параллелизма, хотя это зависит от того, сколько вы пишете, а сколько вы читаете.

4 голосов
/ 10 июня 2011

Обновлено, благодаря Андре Карону.

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

Будет лучше использовать базу данных на основе серверных процессов (MySQL, PostgreSQL и т. Д.)реализовать желаемое поведение приложения.

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