-
> AdoCommand.CommandText := 'insert into SpotTable() values()';
> Львиная доля времени из всех 5-8 секунд здесь уходит на
> перечитывание метаданных и строительство списка переметров.
>
> Что у проф программиста отсутствует.
>
Чего то я не понял. В [2] ты ж сам так предлагаешь делать?
> Что у проф программиста отсутствует.
Я и не являюсь проф программистом. По улицам на машинах не только же проф гонщики ездиют :)
-
Чего то я не понял. В [2] ты ж сам так предлагаешь делать?
серьезно?
я тебе предлагал двести пятьдесят раз подряд чистить текст sql заменяя его не него же для того, чтобы датасет двести пятьдесят раз перечитал метаданные одной и той же таблицы?
-
> [20] Alex_C (16.11.11 15:32)
> > Что у проф программиста отсутствует.
>
> Чего то я не понял. В [2] ты ж сам так предлагаешь делать?
И в третий раз повторю, раз предыдущие игнорируешь игнорируешь.
> [13] Inovet © (16.11.11 15:14)
> Я тебе уже говорил - в запросах желательно пользоваться
> параметрами.
-
> я тебе предлагал двести пятьдесят раз подряд чистить текст
> sql заменяя его не него же для того
> И в третий раз повторю, раз предыдущие игнорируешь игнорируешь.
>
>
> > [13] Inovet © (16.11.11 15:14)
> > Я тебе уже говорил - в запросах желательно пользоваться
> > параметрами.
Я понимаю, что я чего то не понимаю. А вот чего я не понимаю - я не понимаю. :)
Я думал, что "пользоваться параметрами" это
ParamByName('IsNewCountry').Value := IsNewCountry;
сейчас я понимаю, что я не правильно истолковал сию фразу. Тогда что понимается под фразой - использовать параметры?
-
> я тебе предлагал двести пятьдесят раз подряд чистить текст
> sql заменяя его не него же для того, чтобы датасет двести
> пятьдесят раз перечитал метаданные одной и той же таблицы?
>
С этим я разобрался - понял, что AdoCommand.CommandText - пишется один раз, потом просто подставляются параметры. Переделал - особо быстро все равно не стало.
-
Насколько особо быстро надо?
При учете того, что вставка будет не в главном потоке, а данные из физической таблицы в приложении не используются.
-
> При учете того, что вставка будет не в главном потоке, а
> данные из физической таблицы в приложении не используются.
>
В общем наверное я сам себе уже мозги запудрил.
Как было сделано: у меня была своя импровизированная таблица в памяти - массив, куда я заполнял получившиеся данные, после получения всех данных я их копировал в несколько VolgaTable для различных целей. В принципе все было очень быстро. В связи с переходом основной базы на Access а был приятно поражен возможность выборки данных. Вот и решил, и как сам сейчас понимаю - не удачно применить Access - подкупало что можно выборку делать из одной таблицы. Теперь понял, что так получается куда как медленнее.
-
у меня была своя импровизированная таблица в памяти - массив
А она вообще нужна своя?
получаю из инета пакет около 250 записей.
В виде чего получаешь из инета?
-
Вот откуда-то "извне" программа поочередно получает 500 записей, после чего в цикле засовывает их в некую БД. Внимание, вопрос: с какого боку тут многопоточность и что она собсна даст ?
-
многопоточность здесь даст.
если скажем пришедший пакет это xml пакет.
грузим его как есть и используем в приложении как "быструю таблицу в памяти"
во вторичном потоке неспеша инсертим это в бд.
-
Как-то сильно много 5-8 секунд на 250 записей.
-
Удалено модератором
Примечание: не спамь
-
> А она вообще нужна своя?
>
Получение максимально потокозащищенного кода за счет полного контроля над тем, что делаешь. Только из этих соображений.
Access меня еще и прельстил потокозащищенностью.
> с какого боку тут многопоточность и что она собсна даст
> ?
Заставлять пользователя ждать 10 сек получения и сортировки данных? Не думаю, что хорошее решение.
> В виде чего получаешь из инета?
Текст. Парсю строки, строки имеют определенный формат.
> во вторичном потоке неспеша инсертим это
Да собственно в итоге к этому и пришел.
> Как-то сильно много 5-8 секунд на 250 записей.
Много. Совсем забыл, что кроме добавления, каждая пришедшая "запись" - а это информация о работе в эфире редкой станции еще проверяется, есть ли такая страна в логе и на данном диапазоне/моде.
В итоге - просто вставка - 3 сек. +5 сек запрос к базе лога на предмет подтверждения страны.
В принципе думаю на это пока забить - даже фоновая задержка получения начального пакета из 250 последних спотов - не проблема. После этого споты будут приходить по одному через телнет - а это уже доли секунды на обработку.
-
> [32] Alex_C (16.11.11 21:30)
> кроме добавления, каждая пришедшая "запись" - а это информация
> о работе в эфире редкой станции еще проверяется, есть ли
> такая страна в логе и на данном диапазоне/моде.
Вообще-то этим должен заниматься движок БД, а приложение должно только обработать исключение в случае неудачи.
-
> Вообще-то этим должен заниматься движок БД
Сейчас подешел к изучению хранимых процедур.
Как я понимаю, этим должны заниматься именно они.
Я правильно понимаю направление?
-
> [34] Alex_C (16.11.11 22:48)
> Сейчас подешел к изучению хранимых процедур.
> Как я понимаю, этим должны заниматься именно они.
Как там в аксесе с еими не знаю. Они в более сложных случаях, а для проверки по справочнику достаточно внешнего ключа. Да я уже много раз говорил об этом.
-
никто никому ничего не должен... нужна процедура? вот тебе лично - делай процедурой.
а вообще хватило бы запроса с джойном. (как понял описание чего нужно)
p.s. начинать изучение процедур с аксесса... плохая идея. нет их там практически, одно название.
-
> вообще хватило бы запроса с джойном.
Вот сейчас как раз ломаю над этим голову. Как я понимаю, можно все же обойтись и одним запросом.
-
Вопрос по св-ву ExecuteOptions для ADOCommand - после вставки 250 записей, мне нужно удалить повторы. Если комманду удаления повторов я ставлю сразу после комманды вставки - удаления не происходит. Если делать вручную - при нажатии на кнопку - повторы удаляются. Я так понимаю, что это происходит из-за того, что сама таблица после повторов не успела обновиться.
Ставил
ExecuteOptions := [eoAsyncExecute];
начинает ругаться при вставке записей - Не удается выполнить операцию во время асихронного выполнения.
-
> ExecuteOptions := [eoAsyncExecute];
Разобрался..