plusplus
Март 1, 2011 08:13:22
Подскажите как работать с базой в несколько потоков? Запросы будут SELECT, INSERT, UPDATE. Нужно ли использовать мьютексы? И сколько делать коннектов? Один общий на все потоки, один на запрос или один на поток?
Ferroman
Март 1, 2011 13:53:43
o7412369815963
Март 1, 2011 19:13:55
я использовал базу многопоточно, проблем не наблюдал.
Андрей Светлов
Март 1, 2011 19:45:39
Кажется, sqlite использует блокировки внутри себя. Не уверен на 100% - в код не смотрел, лень.
ZZZ
Март 2, 2011 08:41:53
А вот у меня были проблемы. При большом количестве одновременных инсертов, база иногда (не стабильно) портилась. Притом это выяснялось только при попытке сделать выборку. Очень неприятно…
Поэтому лично я рекомендую изменять базу через лок.
P.S. Опыт двухлетней давности. Может что и изменилось.
igor.kaist
Март 2, 2011 11:36:48
ZZZ
При большом количестве одновременных инсертов, база иногда (не стабильно) портилась.
Сейчас, если не ошибаюсь, вся база данных блокируется при транзакциях. Помню, что все просили сделать лок на уровне таблиц а не всей базы данных.
кое что есть в доках на эту тему
http://docs.python.org/library/sqlite3.html#sqlite3-controlling-transactionshttp://www.sqlite.org/faq.html#q5
plusplus
Март 3, 2011 07:51:18
Сделал общий коннект на поток. В конструкторе класса создаю коннект, в других методах использую execute. Не получилось, пишет, что объекта коннекта должен быть в том же потоке, что и запросы. Хотя вроде так оно и есть. Сделал коннект при каждом запросе, в один поток всё нормально, в несколько - ошибка base is locked, буду пробовать использовать мьютексы.
Борисенков Сергей
Март 3, 2011 09:13:03
plusplus
Сделал общий коннект на поток.
Может поможет:
http://habrahabr.ru/blogs/qt_software/52536/правда на С++ и Qt, но понимается легко.
rustavel
Март 4, 2011 01:59:57
Вопрос ‘новичка’ не в тему(нет смысла создавать новую)…как получить список всех таблиц в базе?совсем отчаялся в поисках ответа!!прошу не быть равнодушными…спасибо!!
PooH
Март 4, 2011 05:52:48
rustavel
Вопрос ‘новичка’ не в тему(нет смысла создавать новую)…как получить список всех таблиц в базе?совсем отчаялся в поисках ответа!!прошу не быть равнодушными…спасибо!!
Странно вы как-то искали. Официальный FAQ
http://www.sqlite.org/faq.html#q7