Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Разделение DBI соединений между потоками. Разделение соединений и переменных 
:(
    Опции темы
sir_nuf_nuf
Дата 25.3.2008, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Вопросы: 
как минимизировать число подключений к базе данных ?
как это можно сделать руками без готовых модулей ?

Имеем: apache2, mod_perl2, есть CPAN =)

готовые варианты:
Apache::DBI    Apache::DBI::Cache    Apache::BabyConnect

все эти модули предоставляют persistent connection - это замечательно!
но я так и не нашел в документации разделяются ли эти соединения между потоками.

ясно, что каждый _процесс_ apache обязан иметь свое соединение, а потоки ?

неясно какую модель потоков использует mod_perl2,
можно ли разделять переменные с помощью
Код

use threads::shared;

и написать собственный пул для DBI соединений или необходимо делать разделение на уровене C кода ?


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
vadiml
Дата 25.3.2008, 20:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 310
Регистрация: 27.7.2007

Репутация: 5
Всего: 7



я фактически ответил в http://forum.vingrad.ru/index.php?showtopi...t&p=1455109 smile
PM MAIL Jabber   Вверх
sir_nuf_nuf
Дата 26.3.2008, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



сорри, но фактически вы не сказали ничего нового.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
ginnie
Дата 26.3.2008, 11:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 38
Всего: 49



sir_nuf_nuf, не подскажите, чем, по-вашему, потоки отличаются от процессов с точки зрения использования БД?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
sir_nuf_nuf
Дата 26.3.2008, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Разные процессы - имеют разное адресное пространство -> они не могут разделять db handle. 
т.е. приницпиально не возможно использовать одно соединение для нескольких процессов ( ну если не думать в сторону POSIX shmem)

Разные потоки имеют общее адресное пространство -> db handle созданный в одном потоке можно 
использовать из другого, достаточно немного подумать о синхронизации, что бы один и тот же handle
не использовался параллельно.

в j2ee часто делаю так: создают pool соединений с базой, каждый поток может брать от туда соединения и возвращать 
обратно. при этом соединения остаются всегда открытыми. Т.к. соединение нужно потоку не 100% времени, то число
соединений может быть меньше числа потоков.

разница между потоками и процессами в это отношении - это адресное пространство.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
konstant1n
Дата 6.4.2008, 10:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 3
Регистрация: 6.4.2008

Репутация: нет
Всего: нет



некоторое время назад тоже думал на над этой проблемой.   Если кратко то легко проблема  внутри mod_perl не решается, т.к.  нет простого механизма доступа к одним и тем-же данным из разных потоков апача.  

проблема решилась с помощью стороннего софта который организует connection pool.  В нашем случае это pgbauncer, прокси-пул для постгреса.  https://developer.skype.com/SkypeGarage/DbProjects/PgBouncer    Для постгреса есть еще pgpool и pgpool-II.  Также pgODBC драйвер под виндой умеет делать   connection pool.    На сколько я знаю MySQL ODBC драйвер тоже поддерживает connection pool.   Про другие базы и конекторы не скажу т.к. не знаю.

Если охота делать из под mod_perl  то смотрите на модули APR::Pool и APR::Table которые являются обертками к apr_pool_t и apr_table_t ( http://apr.apache.org/docs/apr/1.2/ )  С их помощью можно обмениваться данными через внутренние структуры данных апача.   Что меня остановило так это отсутствие примеров как работать со всем этим делом, а время в в проекте было ограничено.   В доке показан лишь частный случай создание APR::Pool уровня запроса, а тут нужен уровень процесса.

Так же советую проанализировать ситуацию на предмет "а оно надо?", поясню:
 1) если идет речь о высоко-нагруженном веб сервисе то реально открытое соединение к базе нужно всем процессам апача т.к. они должны не спать а занимается делом -- обрабатывать данные,  соответственно постоянно читать/писать в базу.   Задачу обработки "медленных" клиентов и очереди лучше отдать какой-нибудь  proxy.     

 2) если имеем дело с небольшой  нагрузкой -- может и так сойдет, скорее всего узкое место будет не в количестве конектов к базе.

  
  


PM MAIL   Вверх
sir_nuf_nuf
Дата 7.4.2008, 07:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 920
Регистрация: 6.1.2008

Репутация: 14
Всего: 31



Спасибо! разумный ответ!

на самом деле не сильно надо. =)
просто смущала неясность - как такое организовать.. ответ не радостный - легко не получится.


--------------------
user posted image
user posted image
PM MAIL Jabber   Вверх
gcc
Дата 25.4.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Агент алкомафии
****


Профиль
Группа: Участник
Сообщений: 2691
Регистрация: 25.4.2008
Где: %&й

Репутация: 1
Всего: 17



PM WWW ICQ Skype GTalk Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0733 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.