Kommov
@Kommov

Как лучше реализовать многопоток к SQLite через python(и не только)?

В базах данных не силён, поэтому возникла такая задачка. В sqlite лежит примерно 500к строк. 1к потоков обращаются к рандомным строкам, меняют один параметр, и берут другие строки. необходимо как-то разделять потоки, чтобы одна и та же строка не использовалась другими потоками. знаю что в MySQL есть SELECT FOR UPDATE, который автоматом блокирует доступ других тредов. т.е можно к примеру взять нужные данные с параметром "0", поменять его на "1", и эти строки уже не будут взяты другими потоками, или вообще ничего не делать. Есть ли что то подобное для SQlite? Знаю, еще очереди на питоне можно написать, но слишком сложно для меня. может кто сможет помочь?)
  • Вопрос задан
  • 3277 просмотров
Пригласить эксперта
Ответы на вопрос 2
Astrohas
@Astrohas
Python/Django Developer
SELECT ... FOR UPDATE OF ... в SQLite не поддерживается. Это понятно, учитывая, что в SQLite блокировке строк избыточна, поскольку вся база данных итак блокируется при обновлении любого ее бита.
Ответ написан
DarkRaven
@DarkRaven
разработка программного обеспечения
На хабрахабре была статья про нее - https://habrahabr.ru/post/149635/
Касаемо многопоточности - https://www.quantstart.com/articles/parallelising-...

В целом, вы можете по-разному сделать. Самый простой вариант:
Добавить в запись маркер (колонку) "Обработано" и индекс на нее.
Потом, дергать случайну запись из БД (https://ruhighload.com/post/%D0%9E%D0%BF%D1%82%D0%... ) и запускать обработку.
ПО запуску в целом. Можно считывать "пачками" случайные строки (доработать запрос выше, да хоть union-ами), по 10 штук, к примеру, и запускать параллельную обработку.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы