Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> запросы в MySQL в многопоточном приложение 
:(
    Опции темы
boost0klr
Дата 3.2.2012, 00:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Добрый день. 
Есть необходимость использовать мускул в многопоточном приложение. разобравшись в С++ АПИ для мускула, завернув его в свои классы обертки, и локализовав это в отдельном потоке, который ждет запрос и отдает ответ всем остальным потокам, скорость приложения уперлась в производительность БД, т.е. в скорость потока работающего с БД.
мне кажется я как-то криво пишу на плюсах что ли.. но с другой стороны.. не размазывать же запросы по всему проекту, кроме того мне кажется там что-то лимитируются сессии.. или что то ещё.. т.к. я экспериментально создал 1000 потоков с запросами в БД, 
и как то оно не празднично работает.

кароче говоря, кто как интегрирует БД в проекты. и не могли бы вы наспамить ссылок на листинги, и т.п. материалы. 

з.ы. прошу простить за оффтоп, но пост ближе к плюсам и архитектуре чем к БД.

Добавлено @ 00:28
у меня кроме как создать пул потоков работающих с БД умнее не получается придумать ничего, но там какие-то грабли.. и лениво их выкупать.
помогите плиз. сроки(((

Это сообщение отредактировал(а) boost0klr - 3.2.2012, 00:29
PM MAIL   Вверх
boostcoder
Дата 3.2.2012, 00:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(boost0klr @  3.2.2012,  00:25 Найти цитируемый пост)
1000 потоков с запросами в БД

да ты че?! жесть smile
т.е. все потоки лочатся на одном мьютексе?

Добавлено через 1 минуту и 12 секунд
и объясни задачу. откуда необходимость в более чем одном потоке? чем обусловлено?
PM WWW   Вверх
boost0klr
Дата 3.2.2012, 08:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну например, есть 20-30 потоков, у них там переменные всяке, и т.п. эту всю ерунду проще держать в базе, чем за хардкодить. ну вот.. все эти переменные необходимые им для работы, они получают из БД, через поток работающий с БД. и вот это мне не нра совсем. они встают в очередь ожидая пока поток работающий с БД раздаст всем результаты запросов. 


ну и конечно 1000 потоков не будет уменя, но будет много потоков, и хотелось бы максимально производительность приложения с БД ..приблизить к как будто бы она без БД))

ладно ..есть другой вариант. например при загрузке подгружаем из БД всё переменные в кучу, и потом работаем сней, по сигналу заново перечитываем настройки. При таком раскладе плевать на эти тормоза, и оставляем пул потоков для записи данных в базу. Мне так даже нравится. Доброе утро
PM MAIL   Вверх
boostcoder
Дата 3.2.2012, 11:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(boost0klr @  3.2.2012,  08:27 Найти цитируемый пост)
есть 20-30 потоков, у них там переменные всяке, и т.п. эту всю ерунду проще держать в базе, чем за хардкодить.

путаешь переменные с константами? smile 

Цитата(boost0klr @  3.2.2012,  08:27 Найти цитируемый пост)
все эти переменные необходимые им для работы, они получают из БД, через поток работающий с БД.

зачем каждому потоку получать константы из БД с учетом того, что они идентичны для каждого потока? или что?

Цитата(boost0klr @  3.2.2012,  08:27 Найти цитируемый пост)
хотелось бы максимально производительность приложения с БД ..приблизить к как будто бы она без БД

кешировать данные из БД в какой-нить объект, не пробовал?

Цитата(boost0klr @  3.2.2012,  08:27 Найти цитируемый пост)
оставляем пул потоков для записи данных в базу

зачем пул потоков? БД - синглтон! т.е. все запросы в любом случае обрабатываются последовательно. тут нет смысла в пуле.
PM WWW   Вверх
boost0klr
Дата 3.2.2012, 11:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ну наконецто.
т.е. самое главное.. что?
запросы к БД не распаралелить?
PM MAIL   Вверх
boostcoder
Дата 3.2.2012, 11:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(boost0klr @  3.2.2012,  11:15 Найти цитируемый пост)
запросы к БД не распаралелить?

распаралелить можно. но какого-либо повышения производительности это не даст. а даже наоборот.
еще, распаралеливание запросов можно использовать чтоб эмитировать асинхронность. но опять же, никакого повышения скорости выборки это не даст.
PM WWW   Вверх
boost0klr
Дата 3.2.2012, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Цитата(boostcoder @ 3.2.2012,  11:48)
Цитата(boost0klr @  3.2.2012,  11:15 Найти цитируемый пост)
запросы к БД не распаралелить?

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

если я правильно Вас понимаю, один поток, пул потоков, ..запросы БД выстраивает в очередь внутри себя???? и тут уже без вариантов.да?
PM MAIL   Вверх
boostcoder
Дата 3.2.2012, 12:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(boost0klr @  3.2.2012,  11:57 Найти цитируемый пост)
запросы БД выстраивает в очередь внутри себя?

да.

Цитата(boost0klr @  3.2.2012,  11:57 Найти цитируемый пост)
и тут уже без вариантов.да?

мне не известны многопоточные БД... может кто-то подскажет.
PM WWW   Вверх
azesmcar
Дата 3.2.2012, 12:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



boost0klr

Создавай по одному MySQL соединению на каждый поток, синхронизацию СУБД сама обеспечит.
PM   Вверх
boost0klr
Дата 3.2.2012, 13:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



мне кажется при таких раскладах, когда из под одного процесса много запросов к базе.. через одно АПИ С++Мускл ..как то тупит оно.. не, не может такого быть?
PM MAIL   Вверх
azesmcar
Дата 3.2.2012, 13:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(boost0klr @  3.2.2012,  13:31 Найти цитируемый пост)
мне кажется при таких раскладах, когда из под одного процесса много запросов к базе.. через одно АПИ С++Мускл ..как то тупит оно.. не, не может такого быть? 

Я честно говоря ничего не понял из вопроса, это кому предназначалось?

PM   Вверх
boostcoder
Дата 3.2.2012, 14:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



Цитата(azesmcar @  3.2.2012,  12:56 Найти цитируемый пост)
Создавай по одному MySQL соединению на каждый поток

тут два тупика:
1. тупик производительности ФС. как правило, производительность БД ограничивается в первую очередь этим.
2. при работе с одной_БД/одним_сервером_БД - это не имеет смысла.

Добавлено через 10 минут и 20 секунд
Цитата(boostcoder @  3.2.2012,  14:18 Найти цитируемый пост)
1. тупик производительности ФС. как правило, производительность БД ограничивается в первую очередь этим.

тут есть надежда на то, что сервер БД настроен на максимум кеширования в RAM. но опять же, про работе с одной БД, я почти полностью уверен в том, что запросы из нескольких потоков встанут в очередь.

Добавлено через 11 минут и 11 секунд
и не плохо бы узнать, какая именно БД используется.
PM WWW   Вверх
azesmcar
Дата 3.2.2012, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

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



Цитата(boostcoder @  3.2.2012,  14:18 Найти цитируемый пост)
тут есть надежда на то, что сервер БД настроен на максимум кеширования в RAM. но опять же, про работе с одной БД, я почти полностью уверен в том, что запросы из нескольких потоков встанут в очередь.

Во первых не все и всегда читается с диска, а во вторых выполнения запроса это далеко не только чтение самих данных, есть и много чего другого, что вполне можно выполнить параллельно. Если интересно, можешь посмотреть в профайлере на что было потрачено время при выполнении запроса, и далеко не всегда основное время тратится на чтение данных с диска.
К тому же в базе может быть бизнес логика описанная в процедурах, чтения и запись данных вполне можно распаралеллить на нулевом рейде, я уже не говорю про кэширование.

Другое дело, что оптимальное количество потоков для приложения не обязательно равно оптимальному количеству потоков в СУБД, но хуже от этого не будет, все равно где-то надо синхронизировать, пусть этим займется СУБД.

Цитата(boostcoder @  3.2.2012,  14:18 Найти цитируемый пост)
и не плохо бы узнать, какая именно БД используется. 

Цитата

запросы в MySQL в многопоточном приложение А здесь смотрели?



Это сообщение отредактировал(а) azesmcar - 3.2.2012, 18:17
PM   Вверх
boost0klr
Дата 5.2.2012, 14:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Парни, это всё понятно, вопрос в том ..имеет и смысл делать несколько потоков работающих с БД.. или один?
вот смотрите, есть десять потоков, всем им нужно потреблять/производить данные для/в БД.. можно к ним добавить 11й поток.. в который первые десять отправляют запросы и ждут, либо 11й, 12й, 13й, 14й, 15й поток.. для обработки данных в/для БД т.е. пул из (например) 5ти потоков...
пул работает на C++ MySQL API.. возникают сомнения что из под одного процесса и одного АПИ, весь пул будет работать корректно, и так же сомнения по поводу производительности пула, т.к. если всё встают в очередь, какая разница.. мне интересно кто как пишет.. кто как интегрирует БД в приложение.

к примеру.. вам надо раздать 200 клиентам инфу с вашего сервера_приложения, которое берет инфу из базы, вы напишите пул? или один главный поток, который будет работать с очередями от клиентов?
кэширование понятно, файловая система тоже понятно.. вопрос исключительно по архитектуре ПО. спасибо.


PM MAIL   Вверх
boostcoder
Дата 5.2.2012, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

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



я никогда не использовал несколько потоков для работы с БД. при том, с БД работаю. в одном из проектов, БД используют ~4000 юзеров.
архитектура такая: сервер. юзеры коннектятся к серверу. сервер работает с БД в одной сессии. запросы в БД выполняются асинхронно по отношению к запросам со стороны юзеров, при помощи одного потока и boost::io_service::post().

Добавлено через 1 минуту и 55 секунд
я не проверял БД на предмет выполнения запросов из нескольких потоков.
напиши микротест (код выложи), любопытно.
PM WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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