URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 9762
[ Назад ]

Исходное сообщение
"SQLite. Вопрос"

Отправлено smiral7777 , 22-Окт-13 16:15 
Здравствуйте. Описание ситуации: есть 1000 процессов, которые отработав (это занимает несколько секунд у каждого)  должны записать в БД некую служебную информацию о статусе своей работы. Процессы запускаются случайным образом, вероятность одновременных попыток записи в БД велика.
Существует ли в SQLite механизм обработки таких одновременных нагрузок на запись/обновление строк?

Содержание

Сообщения в этом обсуждении
"SQLite. Вопрос"
Отправлено PavelR , 22-Окт-13 17:35 
> Здравствуйте. Описание ситуации: есть 1000 процессов, которые отработав (это занимает
> несколько секунд у каждого)  должны записать в БД некую служебную
> информацию о статусе своей работы. Процессы запускаются случайным образом, вероятность
> одновременных попыток записи в БД велика.
> Существует ли в SQLite механизм обработки таких одновременных нагрузок на запись/обновление
> строк?

конечно есть.

http://www.sqlite.org/lockingv3.html

EXCLUSIVE     An EXCLUSIVE lock is needed in order to write to the database file. Only one EXCLUSIVE lock is allowed on the file and no other locks of any kind are allowed to coexist with an EXCLUSIVE lock. In order to maximize concurrency, SQLite works to minimize the amount of time that EXCLUSIVE locks are held.


"SQLite. Вопрос"
Отправлено smiral7777 , 22-Окт-13 18:27 
>[оверквотинг удален]
>> Существует ли в SQLite механизм обработки таких одновременных нагрузок на запись/обновление
>> строк?
> конечно есть.
> http://www.sqlite.org/lockingv3.html
> EXCLUSIVE  An EXCLUSIVE lock is needed in order to write to
> the database file. Only one EXCLUSIVE lock is allowed on the
> file and no other locks of any kind are allowed to
> coexist with an EXCLUSIVE lock. In order to maximize concurrency, SQLite
> works to minimize the amount of time that EXCLUSIVE locks are
> held.

Спасибо, а вроде искал...


"SQLite. Вопрос"
Отправлено smiral7777 , 22-Окт-13 18:38 
>[оверквотинг удален]
>>> строк?
>> конечно есть.
>> http://www.sqlite.org/lockingv3.html
>> EXCLUSIVE  An EXCLUSIVE lock is needed in order to write to
>> the database file. Only one EXCLUSIVE lock is allowed on the
>> file and no other locks of any kind are allowed to
>> coexist with an EXCLUSIVE lock. In order to maximize concurrency, SQLite
>> works to minimize the amount of time that EXCLUSIVE locks are
>> held.
> Спасибо, а вроде искал...

И находил таку информацию http://www.php.su/articles/?cat=phpdb&page=007

"Что такое SQLite?

Так что такое SQLite? Это библиотека, поддерживающая большинство спецификаций SQL92 и хранящая данные в единственном файле. Кроме того, библиотека является и маленькой и быстрой (в некоторых случаях быстрее MySQL и PostgreSQL), при этом, не слишком сильно увеличивая объём приложения (считая в размере исполняемого кода и используемой памяти). В отличие от других БД SQL поддерживаемых PHP, здесь для управления БД не создаётся никакого отдельного процесса сервера - ваше приложение и есть сам сервер. Это означает, что одновременные запросы (или параллельные пользователи) должны блокировать файл для безопасного изменения БД. Данный пункт очень важен, поскольку непосредственно затрагивает сферу применения SQLite - если в основном используется чтение данных, тогда никаких проблем нет, но если необходимо делать большое количество одновременных обновлений, то приложение будет тратить больше времени на синхронизацию блокировки файлов, чем делать настоящую работу."

И не смог найти на sqlite.org как ставиться EXCLUSIVE lock. Дефолтный режим unlocked


"SQLite. Вопрос"
Отправлено anonymous , 24-Окт-13 12:09 
>[оверквотинг удален]
> используемой памяти). В отличие от других БД SQL поддерживаемых PHP, здесь
> для управления БД не создаётся никакого отдельного процесса сервера - ваше
> приложение и есть сам сервер. Это означает, что одновременные запросы (или
> параллельные пользователи) должны блокировать файл для безопасного изменения БД. Данный
> пункт очень важен, поскольку непосредственно затрагивает сферу применения SQLite - если
> в основном используется чтение данных, тогда никаких проблем нет, но если
> необходимо делать большое количество одновременных обновлений, то приложение будет тратить
> больше времени на синхронизацию блокировки файлов, чем делать настоящую работу."
> И не смог найти на sqlite.org как ставиться EXCLUSIVE lock. Дефолтный режим
> unlocked

Вам скорее нужен WAL в этом случае. http://www.sqlite.org/draft/wal.html
Либо записать транзакцию в промежуточный файл/память, а потом выполнить ее для базы.


"SQLite. Вопрос"
Отправлено ShyLion , 25-Окт-13 13:56 
> Здравствуйте. Описание ситуации: есть 1000 процессов, которые отработав (это занимает
> несколько секунд у каждого)  должны записать в БД некую служебную
> информацию о статусе своей работы. Процессы запускаются случайным образом, вероятность
> одновременных попыток записи в БД велика.
> Существует ли в SQLite механизм обработки таких одновременных нагрузок на запись/обновление
> строк?

Можно еще средствами самих процессов исключить одновременный доступ к файлу. Самое простое - flock. Еще есть варианты с семафорами и т.д.


"SQLite. Вопрос"
Отправлено smiral7777 , 25-Окт-13 23:24 
>> Здравствуйте. Описание ситуации: есть 1000 процессов, которые отработав (это занимает
>> несколько секунд у каждого)  должны записать в БД некую служебную
>> информацию о статусе своей работы. Процессы запускаются случайным образом, вероятность
>> одновременных попыток записи в БД велика.
>> Существует ли в SQLite механизм обработки таких одновременных нагрузок на запись/обновление
>> строк?
> Можно еще средствами самих процессов исключить одновременный доступ к файлу. Самое простое
> - flock. Еще есть варианты с семафорами и т.д.

Не охота код волосатить) решение mysql


"SQLite. Вопрос"
Отправлено anonymous , 26-Окт-13 22:30 
>>> Здравствуйте. Описание ситуации: есть 1000 процессов, которые отработав (это занимает
>>> несколько секунд у каждого)  должны записать в БД некую служебную
>>> информацию о статусе своей работы. Процессы запускаются случайным образом, вероятность
>>> одновременных попыток записи в БД велика.
>>> Существует ли в SQLite механизм обработки таких одновременных нагрузок на запись/обновление
>>> строк?
>> Можно еще средствами самих процессов исключить одновременный доступ к файлу. Самое простое
>> - flock. Еще есть варианты с семафорами и т.д.
> Не охота код волосатить) решение mysql

WAL попробовали?
Не знаю, что за проект, но тащить туда mysql из-за того, что не разобрались с sqlite имхо не самая удачная затея...