Найти - Пользователи
Полная версия: sqlite в несколько потоков
Начало » Базы данных » sqlite в несколько потоков
1 2
plusplus
Подскажите как работать с базой в несколько потоков? Запросы будут SELECT, INSERT, UPDATE. Нужно ли использовать мьютексы? И сколько делать коннектов? Один общий на все потоки, один на запрос или один на поток?
Ferroman
Неплохо написано по данному вопросу:
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 в многопоточных приложениях.
o7412369815963
я использовал базу многопоточно, проблем не наблюдал.
Андрей Светлов
Кажется, sqlite использует блокировки внутри себя. Не уверен на 100% - в код не смотрел, лень.
ZZZ
А вот у меня были проблемы. При большом количестве одновременных инсертов, база иногда (не стабильно) портилась. Притом это выяснялось только при попытке сделать выборку. Очень неприятно…
Поэтому лично я рекомендую изменять базу через лок.

P.S. Опыт двухлетней давности. Может что и изменилось.
igor.kaist
ZZZ
При большом количестве одновременных инсертов, база иногда (не стабильно) портилась.
Сейчас, если не ошибаюсь, вся база данных блокируется при транзакциях. Помню, что все просили сделать лок на уровне таблиц а не всей базы данных.
кое что есть в доках на эту тему
http://docs.python.org/library/sqlite3.html#sqlite3-controlling-transactions
http://www.sqlite.org/faq.html#q5
plusplus
Сделал общий коннект на поток. В конструкторе класса создаю коннект, в других методах использую execute. Не получилось, пишет, что объекта коннекта должен быть в том же потоке, что и запросы. Хотя вроде так оно и есть. Сделал коннект при каждом запросе, в один поток всё нормально, в несколько - ошибка base is locked, буду пробовать использовать мьютексы.
Борисенков Сергей
plusplus
Сделал общий коннект на поток.
Может поможет:
http://habrahabr.ru/blogs/qt_software/52536/
правда на С++ и Qt, но понимается легко.
rustavel
Вопрос ‘новичка’ не в тему(нет смысла создавать новую)…как получить список всех таблиц в базе?совсем отчаялся в поисках ответа!!прошу не быть равнодушными…спасибо!!
PooH
rustavel
Вопрос ‘новичка’ не в тему(нет смысла создавать новую)…как получить список всех таблиц в базе?совсем отчаялся в поисках ответа!!прошу не быть равнодушными…спасибо!!
Странно вы как-то искали. Официальный FAQ http://www.sqlite.org/faq.html#q7
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB