![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Как выполнить много асинхронных запросов к БД (ADO)? [D6, XP]
Сергей Ю © (2007-08-24 10:02:00)Есть БД к которой нужно довольно часто обращаться, при этом программа должна работать дальше не дожидаясь когда придет результат. Хочу сделать асинхронные запросы (вроде именно это и должно мне помочь). Но вот как сделать чтоб создавался следущий запрос если еще и первый то не успел выполниться? И как узнать потом в обработчике onfetch какой именно из запросов выполнился?
sniknik (2007-08-27 15:34:00) [1]а кто работает с mySQL я или ты? по идее тебе лучше знать. я если и вспомню, что так только по аналогии/если мне "что то" "что нибудь" напомнит.
Сергей Ю (2007-08-27 15:31:00) [2]:) Отлично
Тогда какие "фенечки" нужно учесть при обращении к mySQL посредством ADO+ODBC?
sniknik (2007-08-27 15:26:00) [3]> Т.е. теперь вопрос сформулируем так:
а как не формулируй, абстрактные понятия не оптимизируются в принципе.
> Как повысить быстродействие выполнения запроса к базе на mySQL?
правильно поставить индексы, оптимально составить запрос, исправить структуру под задачу. в зависимости от логики/используемых компонент отключить неиспользуемое но времяемкое (перерисовку по каждой записи например). и т.д.
> Какими компонентами пользоваться.
любыми. это практически непринципиально. но у каждых свои "фенечки", и действовать надо так чтобы их учитывать (а это уже принципиально).
Сергей Ю (2007-08-27 15:15:00) [4]
> А если твой комп пеерзагрузится (или как то по другому сбросятся
> старые данные), заново считать будешь?
Собственно мне главное именно за эту минуту посчитать и эту цифирку положить в другое место :) Так что история тут не нужна.
> "узкое место" обычно сидит перед компьютером, и думает что
> пишет программу
Ну дак это понятно. Посему и испрашиваю у гуру помощи :)
Т.е. теперь вопрос сформулируем так:
Как повысить быстродействие выполнения запроса к базе на mySQL? Какими компонентами пользоваться.
sniknik (2007-08-27 15:07:00) [5]> можно ли создать рядом еще одну БД с одной таблицей и селектить из 2 баз.
вряд ли, mysql гетерогенных запросов не поддерживает. (имхо конечно. может уже что нибудь изменилось)
> Может тут "узкое место"?
"узкое место" обычно сидит перед компьютером, и думает что пишет программу.
Сергей Ю (2007-08-27 14:55:00) [6]Да вот я тоже думаю что договато идет. Это вобщемто обычный лог проксисервера. На серваке mySQL. Я к нему хожу по ADO+ODBC. Может тут "узкое место"? Кстати а обновление драйверов ODBC может помочь увеличить быстродействие?
Sergey13 (2007-08-27 14:55:00) [7]> [36] Сергей Ю (27.08.07 14:38)
А если твой комп пеерзагрузится (или как то по другому сбросятся старые данные), заново считать будешь?
Можно ли в мускуле обработать запрос к нескольким базам сразу? Это типа (возвращаясь к [30]) если к твоей боевой БД есть только право на селект, можно ли создать рядом еще одну БД с одной таблицей и селектить из 2 баз.
sniknik (2007-08-27 14:46:00) [8]это сколько же там данных за последнюю минуту если запрос 30-40 секунд идет?
несколько миллионов записей похоже... а обработка потом на клиенте получается уже часы?
нда... крутые базы у народа...
Сергей Ю (2007-08-27 14:38:00) [9]За счет запроса :) Запрос теперь не за весь период работы компа а только за последнюю минуту. А скадываю уже с ранее имеющимися данными я сам.
Вобщем тупил я долго. Видать пятница была :)
Тут ведь и 100 запросов не нужны, т.к. минута то у всех компов "общая" т.е. реально мне и надо один запрос по всем компам за прошедшую минуту.
Блин аж самому студно стало :) Но место этой ветке не в "новичках" а в "идиотах" :) :(
Хотя плюсы тоже есть, почитал про асинхронные запросы и про потоки :)
Sergey13 (2007-08-27 13:13:00) [10]> [34] Сергей Ю (27.08.07 13:06)
> Время получения данных с БД сократилось с 3 минут до 30-40 секунд
За счет чего?
Сергей Ю (2007-08-27 13:06:00) [11]Время получения данных с БД сократилось с 3 минут до 30-40 секунд. Уже прогресс, щас еще асинхронный запрос прикручу и наверно вобще можно будет жить с этим :)
Sergey13 (2007-08-24 14:23:00) [12]> [31] Сергей Ю (24.08.07 14:15)
> С правами на селект
Попроси того, кто тебе дал это право самому сделать ее.
sniknik (2007-08-24 14:18:00) [13]> Поэтому 100 запросов придется делать все равно.
UNION ALL не поддерживается mysql-ем?
Сергей Ю (2007-08-24 14:15:00) [14]
> ну так добавь табличку в БД - это не страшное вмешательство
> в структуру
С правами на селект ;)?
Sergey13 (2007-08-24 13:58:00) [15]> [29] Сергей Ю (24.08.07 13:52)
> А есть только у меня.
ну так добавь табличку в БД - это не страшное вмешательство в структуру.
Сергей Ю (2007-08-24 13:52:00) [16]В том то и дело что в базе этой информации нет. А есть только у меня.
Траффик мне и нужен за период времени. От начала работы компа до текущего момента. А это самое начало у всех компов разное и в БД его нет. Поэтому 100 запросов придется делать все равно.
Sergey13 (2007-08-24 13:42:00) [17]> [24] Сергей Ю (24.08.07 13:28)
> Не пойдет. Т.к. time_on у всех машин разный.
Он где то лежит в базе? Если да, то привяжи к этому запросу типа
select ip,sum(bytes)
from table,table_time_on tto
where tto.ip=table.ip and port=3128 and time>tto.time_on
group by ip
Anatoly Podgoretsky (2007-08-24 13:36:00) [18]> Ega23 (24.08.2007 13:33:25) [25]
Вообще то трафик считают за период, а не от time_on
Автор почему то другого мнения.
Anatoly Podgoretsky (2007-08-24 13:34:00) [19]> Ega23 (24.08.2007 13:08:20) [20]
Это очень простая и жирная лицензия, особенно для Веб сервисов.
Каждому пользователю по лицензии.
Ega23 (2007-08-24 13:33:00) [20]
> Не пойдет. Т.к. time_on у всех машин разный.
и чё?