The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  вход/выход  слежка  RSS
"SQLite. Вопрос"
Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (SQLite)
Изначальное сообщение [ Отслеживать ]

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

Оглавление

Сообщения по теме [Сортировка по времени | RSS]


1. "SQLite. Вопрос"  +/
Сообщение от PavelR (ok) on 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.

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

2. "SQLite. Вопрос"  +/
Сообщение от smiral7777 (ok) on 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.

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

Ответить | Правка | ^ к родителю #1 | Наверх | Cообщить модератору

3. "SQLite. Вопрос"  +/
Сообщение от smiral7777 (ok) on 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

Ответить | Правка | ^ к родителю #2 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #3 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #0 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #5 | Наверх | Cообщить модератору

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

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

Ответить | Правка | ^ к родителю #6 | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру