Уведомления

Группа в Telegram: @pythonsu

#1 Март 1, 2011 08:13:22

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

Подскажите как работать с базой в несколько потоков? Запросы будут SELECT, INSERT, UPDATE. Нужно ли использовать мьютексы? И сколько делать коннектов? Один общий на все потоки, один на запрос или один на поток?



Офлайн

#2 Март 1, 2011 13:53:43

Ferroman
От:
Зарегистрирован: 2006-11-16
Сообщения: 2759
Репутация: +  1  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

Неплохо написано по данному вопросу:
http://books.google.com/books?id=VsZ5bUh0XAkC&lpg=PA246&ots=u4bNms55C7&dq=sqlite%20few%20connections&pg=PA250#v=onepage&q=sqlite%20few%20connections&f=false
http://stackoverflow.com/questions/355327/does-thread-safety-of-sqlite3-mean-different-threads-can-modify-the-same-table-of
http://stackoverflow.com/questions/524797/python-sqlite-and-threading

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

Отредактировано (Март 1, 2011 13:55:04)

Офлайн

#3 Март 1, 2011 19:13:55

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

я использовал базу многопоточно, проблем не наблюдал.

Офлайн

#4 Март 1, 2011 19:45:39

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

sqlite в несколько потоков

Кажется, sqlite использует блокировки внутри себя. Не уверен на 100% - в код не смотрел, лень.



Офлайн

#5 Март 2, 2011 08:41:53

ZZZ
От: Москва
Зарегистрирован: 2008-04-03
Сообщения: 2161
Репутация: +  26  -
Профиль   Адрес электронной почты  

sqlite в несколько потоков

А вот у меня были проблемы. При большом количестве одновременных инсертов, база иногда (не стабильно) портилась. Притом это выяснялось только при попытке сделать выборку. Очень неприятно…
Поэтому лично я рекомендую изменять базу через лок.

P.S. Опыт двухлетней давности. Может что и изменилось.



Офлайн

#6 Март 2, 2011 11:36:48

igor.kaist
От:
Зарегистрирован: 2007-11-12
Сообщения: 1879
Репутация: +  3  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

ZZZ
При большом количестве одновременных инсертов, база иногда (не стабильно) портилась.
Сейчас, если не ошибаюсь, вся база данных блокируется при транзакциях. Помню, что все просили сделать лок на уровне таблиц а не всей базы данных.
кое что есть в доках на эту тему
http://docs.python.org/library/sqlite3.html#sqlite3-controlling-transactions
http://www.sqlite.org/faq.html#q5



Отредактировано (Март 2, 2011 11:38:42)

Офлайн

#7 Март 3, 2011 07:51:18

plusplus
От:
Зарегистрирован: 2009-01-05
Сообщения: 418
Репутация: +  15  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

Сделал общий коннект на поток. В конструкторе класса создаю коннект, в других методах использую execute. Не получилось, пишет, что объекта коннекта должен быть в том же потоке, что и запросы. Хотя вроде так оно и есть. Сделал коннект при каждом запросе, в один поток всё нормально, в несколько - ошибка base is locked, буду пробовать использовать мьютексы.



Офлайн

#8 Март 3, 2011 09:13:03

Борисенков Сергей
От:
Зарегистрирован: 2011-01-11
Сообщения: 33
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

plusplus
Сделал общий коннект на поток.
Может поможет:
http://habrahabr.ru/blogs/qt_software/52536/
правда на С++ и Qt, но понимается легко.



Офлайн

#9 Март 4, 2011 01:59:57

rustavel
От:
Зарегистрирован: 2011-02-24
Сообщения: 32
Репутация: +  0  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

Вопрос ‘новичка’ не в тему(нет смысла создавать новую)…как получить список всех таблиц в базе?совсем отчаялся в поисках ответа!!прошу не быть равнодушными…спасибо!!



Офлайн

#10 Март 4, 2011 05:52:48

PooH
От:
Зарегистрирован: 2006-12-05
Сообщения: 1948
Репутация: +  72  -
Профиль   Отправить e-mail  

sqlite в несколько потоков

rustavel
Вопрос ‘новичка’ не в тему(нет смысла создавать новую)…как получить список всех таблиц в базе?совсем отчаялся в поисках ответа!!прошу не быть равнодушными…спасибо!!
Странно вы как-то искали. Официальный FAQ http://www.sqlite.org/faq.html#q7



Вот здесь один из первых отарков съел лаборанта. Это был такой умный отарк, что понимал даже теорию относительности. Он разговаривал с лаборантом, а потом бросился на него и загрыз…

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version