|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
В справке по Array DML (FireDAC) написано, что для Interbase, например, оно использует Command Batch API, а для Firebird EXECUTE STATEMENT. Кто-нибудь пользовался им для организации типа пакетной вставки значительных объемов данных данных в Firebird? стоит ли затеваться, есть ли вообще эффект? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 14:39 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad Fстоит ли затеваться, есть ли вообще эффект? Эффект есть. Но стоит ли оно того для твоей задачи - неизвестно. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 15:27 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Стоит ли оно для моей задачи как раз и зависит от процента получаемого эффекта. Вы сами пробовали или отвечаете из общих соображений? Задача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи embedded-движка. И какой ParamsArrayCount при этом стоит выставлять, если кто-то уже поэкспериментировал? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 15:49 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad Fдля Firebird EXECUTE STATEMENT??? Может EXECUTE BLOCK ? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 15:59 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, ИХМО Array DML реально ускоряет когда идёт взаимодействие по сети. В этом случае по сети передаётся значительно меньше пакетов. А для embedded движка может разница и будет, но не думаю что уж очень большая. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 16:00 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FВы сами пробовали или отвечаете из общих соображений? Пробовал Дмитрий Арефьев когда этот самый ArrayDML разрабатывал. Vlad FЗадача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи embedded-движка. В этой задаче заметного ускорения не будет, поскольку основная экономия при использовании EXECUTE BLOCK проистекает из сокращения числа сетевых round-trip-ов. Возможно, будет даже замедление из-за не слишком эффективного кода обработки запросов с большим количеством параметров. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 16:00 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvladVlad Fдля Firebird EXECUTE STATEMENT??? Может EXECUTE BLOCK ? Ты совершенно прав на счет блока, это я ошибся цитируя по памяти. http://docwiki.embarcadero.com/RADStudio/XE7/en/Array_DML_(FireDAC) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 19:01 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FЗадача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи embedded-движка. а что, миллион записей за 26 секунд - не устраивает? https://www.ibase.ru/news/novoe-video-parallel-naa-vstavka-dannyh/ каждый день вставлять миллион записей надо? Каждый час? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 19:08 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
kdv, Дмитрий, миллион - это условный миллион. За восьми-часовой рабочий день приложением потенциально обрабатывается и импортируется в БД Оракула и/или MS SQL сервера порядка 1.2 террабайта исходных XML-данных. Хотелось бы и с Firebird, до которого теперь дошла очередь, не ударить в грязь лицом. Ну и даже если упасть, то чтобы не очень сильно.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 20:00 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry SibiryakovVlad FВы сами пробовали или отвечаете из общих соображений? Пробовал Дмитрий Арефьев когда этот самый ArrayDML разрабатывал. Как я сам теперь понимаю, то честь ему и хвала за то, что не счел за труд разобраться и применить для интербейза его batch api и хотя бы execute Block для firebird, а не emulation (на фоне других серверов), что было бы проще всего. Vlad FЗадача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи embedded-движка. В этой задаче заметного ускорения не будет, поскольку основная экономия при использовании EXECUTE BLOCK проистекает из сокращения числа сетевых round-trip-ов. Возможно, будет даже замедление из-за не слишком эффективного кода обработки запросов с большим количеством параметров. Ладно, я понял, придется исследовать все самому. На самом деле очень печально, что эти FireDAC-институты, и дело даже не в нашем сообществе, а по результатам поисков в Сети в целом, получается, всерьез никем не используются. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 20:48 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, автор тусуется на этом форуме. Тема постоянно в топе. Спросить можно лично http://www.sql.ru/forum/1008012-37/firedac ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 20:57 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, Денис, ну вот о чем мне его лично предлагается спрашивать, - не в курсе ли он, используются хоть кем-то созданные им, в принципе, перспективные институты? И с какими именно параметрами? И если есть, то какой именно при этом на тематическом движке эффект? Ну а тебе самому не смешно? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.05.2018, 22:08 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FЗа восьми-часовой рабочий день приложением потенциально обрабатывается и импортируется в БД Оракула и/или MS SQL сервера порядка 1.2 террабайта исходных XML-данных. я на такие сентенции обычно говорю, что это не задача, а чешуя, потому что обработать и осмыслить такое количество данных никто не в состоянии. Их или надо сразу агрегировать, а значит ни о каких 1.2 терабайтах речь не идет, или тогда их НЕ надо хранить в СУБД вообще. 1.2 терабайта входящих данных в сутки - это долбануться можно, хрень какая-то. Столько разве что с космических радаров приходит, для обозрения вселенной. Vlad FЛадно, я понял, придется исследовать все самому. КТО будет эти ваши данные и скорость их вставки за вас исследовать, что за фантазии? Да и исследовать там нечего. Быстрее было исследовать, чем сюда вопросы писать. Вот я захотел исследовать вставку 1млн записей - и исследовал, никого не спрашивая. Правда, я заранее знал, как это надо делать. Но тем не менее. Vlad Fто какой именно при этом на тематическом движке эффект? да хватит уже. возьми и протестируй. Не понравится - ну напиши на чистом API, сравни скорость. Кому это надо, нам, что-ли? Vlad Fа по результатам поисков в Сети в целом, получается, всерьез никем не используются. не надо тут плести пропагандистские сети. По вставке данных есть общие рекомендации. А что там у вас конкретно - это надо программисту разбираться. С замером скорости каждого действия. И искать, где можно оптимизировать. Вдруг ваш 1.2 терабайта превратится при вставке в 1 гиг. Или еще меньше. Кто его знает, как это у вас там устроено. Хреново напишете - ну и кто будет виноват, Firebird? Чего сразу тут разводить предположения? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 02:16 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
kdvВдруг ваш 1.2 терабайта превратится при вставке в 1 гигНу, 1 вряд ли, а 70-80 гиг - вполне обычный процент на глаз в среднем. Конечно, +/- десятки процентов - все зависит от конкретного xml. Ну и это многовато как для "в день". А вообще, представляю файл xml на 1.2 тб. Его наверно так приятно даже просто парсить. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 02:41 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
YuRock, я знаю про базы на ФБ с микротранзакциями по 7 терабайт. Поэтому в 1.2 терабайта в день я просто не верю. Это такой объем данных, который, еще раз подчеркиваю, проанализировать в осмысленное время невозможно. Поэтому я считаю это откровенной ахинеей. До тех пор, пока мне не покажут, что это действительно реальные и анализируемые данные. В разделе "Сравнение СУБД" такая фигня появляется регулярно. И когда людям тут же приводишь данные по объему вставляемых данных в секунду, они тут же куда-то сливаются. К примеру, 1.2 терабайта за 8 часов, это 41 мегабайт в секунду, непрерывно. Значит, хранилище должно обеспечивать скорость записи раз в 10 больше, то есть 410мб в секунду. Для ssd это вроде ок. Но покажите мне хранилище из ssd в сотни терабайт (за год, напомню, 1.2 терабайта в сутки это больше 365 терабайт в год). И человек, который имеет денег на такое хранилище, что-то тут спрашивает? НЕ ВЕРЮ. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 02:55 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
kdv, и самое забавное использовать Embedded для таких объёмов. Ну хотя автор же не написал что все 1.2 тб в базу уходят, это только объём XML данных. Может на выхлопе там всего 1Гб. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 06:59 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
авторЭто такой объем данных, который, еще раз подчеркиваю, проанализировать в осмысленное время невозможно. Поэтому я считаю это откровенной ахинеей. До тех пор, пока мне не покажут, что это действительно реальные и анализируемые данные. Ну все же к примеру, есть у нас теперь дурацкое законодательство, требующее хранить записи телефонных разговоров и переписку в течение какого-то времени. Надеюсь, не надо объяснять, кто это будет анализировать. То, что 99,9% этих записей будут сделаны впустую, и ежу понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 07:34 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
ЛюбезныйНу все же к примеру, есть у нас теперь дурацкое законодательство, требующее хранить записи телефонных разговоров и переписку в течение какого-то времени. Надеюсь, не надо объяснять, кто это будет анализировать. То, что 99,9% этих записей будут сделаны впустую, и ежу понятно. Хранить, и хранить в базе - это разные вещи. Храните исходные логи, нужно будет поднять что-то оттуда - пройтись по исходным логам никуда ничего не заливая. Прошелся, получил выжимку по интересующим разговорам - остальное пусть лежит. И XML - хреновейший (ИМХО) способ держать такие данные, ибо требует огромные ресурсы для парсинга. ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 08:47 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Эк, вас, парни, однако, разобрало! Не будете возражать предложению вернуться к исходной тематике?)) Возникли подозрения по возможным внутренним ограничениям обсуждаемого механизма. Предположим, скармливаем мы ему параметризированный запрос на вставку из 10 записей и соотв. 10 параметрами и выставляем глубину массива параметров в 10 000 (обе цифры условные, прошу срач не затевать). Он нам на это внутри, вероятно, конструирует execute block с 10 000 инсертов и уже 100 000 входных параметров. А какие, вообще, у блока в тройке на это ограничения: 1) максимальное число отдельных запросов (в данном случае на инсерт)? 2) максимальная длина текста самого блока? 3) максимальное число входных параметров блока? И есть ли какие-то изменения с этим в четверке? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 09:47 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FА какие, вообще, у блока в тройке на это ограничения: 1) максимальное число отдельных запросов (в данном случае на инсерт)? 2) максимальная длина текста самого блока? 3) максимальное число входных параметров блока? И есть ли какие-то изменения с этим в четверке? 1) 256 инсертов 2) 10МБ 3) 64К штук вроде В 4-ке, возможно, уберем первое ограничение. Но это все фигня, ибо в 4-ке есть новый batch API для заливки и не нужны извраты с EXECUTE BLOCK. Вопрос в том, когда FireDAC реализует поддержку этого АПИ... ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 09:57 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, 1. Максимальное количество контекстов 255. Сложный запрос может требовать более одного контекста. 2. Для Firebird 2.5 - 64K, для 3.0 - 10M 3. Хз по количеству параметров. Но до 3.0 было ограничение на длину входного сообщения в 64K (суммарная длинна полей + null масок). Относительно 3.0 нет. Хотели увеличить максимальное количество контекстов, но вроде отложили. Обсуждение было в fbdevel, но вроде ничего не решили. Зато в 4.0 есть нативный Batch API, поэтому там не надо будет извращаться с эмуляцией через EXECUTE BLOCK ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 10:01 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
> в 4.0 есть нативный Batch API как это будет выглядеть? prepare + execute c кучей параметров? ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 10:27 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Дегтярев Евгений, не совсем. Примеры можно поглядеть тут https://github.com/FirebirdSQL/firebird/blob/master/examples/interfaces/11.batch.cpp ... |
|||
:
Нравится:
Не нравится:
|
|||
31.05.2018, 10:34 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
dimitrVlad FА какие, вообще, у блока в тройке на это ограничения: 1) максимальное число отдельных запросов (в данном случае на инсерт)? 2) максимальная длина текста самого блока? 3) максимальное число входных параметров блока? И есть ли какие-то изменения с этим в четверке? 1) 256 инсертов 2) 10МБ 3) 64К штук вроде В 4-ке, возможно, уберем первое ограничение. Но это все фигня, ибо в 4-ке есть новый batch API для заливки и не нужны извраты с EXECUTE BLOCK. Вопрос в том, когда FireDAC реализует поддержку этого АПИ... Получается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем. Беда. Дмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел? Что же касается нового АПИ, то это, конечно здорово (я серьезно), но это когда еще разработчики библиотек доступа про него прочухаются, и по любому потом придется ждать/приобретать новые версии средств разработки. Боюсь, что это не месяцы, а годы. В любом случае спасибо за предыдущий оперативный и полный ответ. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 10:14 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем. Я уже говорил что основной выигрыш на пакетных вставках получается именно при работе через сеть. Арефьев делал замеры и насколько мне помнится от выполнения более 50 INSERT за один раз толку не было. Ты уже делал замеры на своей задаче? Vlad FЧто же касается нового АПИ, то это, конечно здорово (я серьезно), но это когда еще разработчики библиотек доступа про него прочухаются, и по любому потом придется ждать/приобретать новые версии средств разработки. а в чём проблема разберись сам с новым API и сделай свою библиотеку для пакетной загрузки. Или даже продолжай использовать старый FireDAC и сделай хук который вместо формирования EB будет пользоваться новым API. В свой время эмуляцию пакетной загрузки в FireDac сделали так именно потому что не было родного Batch API. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 10:28 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем. тем не менее, это в 256 раз меньше сетевых раундтрипов Vlad FДмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел? зависит от времени доделать патч. Пока приоритеты на другом сфокусированы. Новый предел 2^32. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 13:06 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
dimitrтем не менее, это в 256 раз меньше сетевых раундтрипов Не совсем так. Это меньше трипов при исполнении, но при препарации метаданные передаются небольшими кусками и там может быть до 256 раз больше трипов. Так что если роделывать данный трюк без применения мозга и препарировать отдельный EB на каждое исполнение, можно получить нулевой или даже отрицательный эффект. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 13:35 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov> препарировать отдельный EB на каждое исполнение Там один препаре с тучей параметров. Ну, вернее 2 - конечный кусок маленький. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
01.06.2018, 13:41 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
dimitrVlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем. тем не менее, это в 256 раз меньше сетевых раундтрипов Меньше то оно, конечно, меньше, ну а самое главное, что не оказалось на самом деле пределом для обсуждаемого Array DML, который почему-то не вываливает ничего прохожего на too many contexts и при гораздо больших значениях пакетного массива. Ну или мы не совсем верно предполагаем, как он там внутри использует execute block. Vlad FДмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел? зависит от времени доделать патч. Пока приоритеты на другом сфокусированы. Новый предел 2^32. Я бы даже сказал, что это уже беспредел какой то!! Хорошо подождем, тем более что от беты четверки в первую очередь жду truncate table и decfloat. Кстати, семантика привычных нумериков будет как-то расширена с появлением decfloat, с тем чтобы их можно было объявлять с точностью более 18, а на самом деле под ними движок самостоятельно оперировал decfoat-ами?? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 15:58 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FКстати, семантика привычных нумериков будет как-то расширена с появлением decfloat, с тем чтобы их можно было объявлять с точностью более 18, а на самом деле под ними движок самостоятельно оперировал decfoat-ами?? да. Оно уже есть. Точность до 34 цифр. Вот только не задача, компоненты доступа сами по себе не научатся работать с DecFloat. Там конечно есть обходные пути (возвращать клиенту строковое представление), но работать с ними уже не так удобно. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:07 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FМеньше то оно, конечно, меньше, ну а самое главное, что не оказалось на самом деле пределом для обсуждаемого Array DML, который почему-то не вываливает ничего прохожего на too many contexts и при гораздо больших значениях пакетного массива. Ну или мы не совсем верно предполагаем, как он там внутри использует execute block.Batch API никак не использует execute block. Не нужно тыкать пальцем в небо. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:23 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, Из твоего ответа, однако, не становится ясным, можно ли будет не объявлять явным образом decfloat-поля, а с тем же успехом пользовать numeric(x>18, x) ?? Что же касается маппинга на конкретные типы полей в клиентских библиотеках, то вполне бы устроило, если бы оно автоматом маппилось на те же FmtBcd-типы, что и, к примеру, numeric(18, 4) в настоящее время. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:25 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvladBatch API никак не использует execute block. Никто и не утверждал обратного. Речь об Array DML, эмулируемом на уровне FireDAC. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:30 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Да NUMERIC(34, x) и DECIMAL(34, x) можно использовать. В новом API есть методы для преобразования DecFloat в BCD но их нужно ещё вызвать. Если в компонентах этих вызовов нет, то ничего не выйдет. А биндинги для поддержки старых клиентов есть, там варианты либо на BIGINT, DOUBLE PRECISION (если точности хватает), либо на строку. Скачай в конце концов себе снапшот и пощупай его. Он кстати устойчивый. IBE частично уже умеет работать с 4.0 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:33 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvladBatch API никак не использует execute block. Не нужно тыкать пальцем в небо. Согласен, не нужно. Но мы, КМК, не обсуждае сейчас модерновое, Batch API, а продолжаем исследовать особенности Array DML (FireDAC), ради чего, собственно и была создана тема. А про нее Эмбаркадера божится, по ссылке, что я давал выше, что для FB оно так или иначе через execute block. Ты давай, вспоминай.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:34 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Значит я не так тебя понял ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:35 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvlad, Так вот с одной стороны они там заявляют про execute block, с другой стороны оно у меня не упало при размерах пакета вплоть до 32 768 (!). Правда и рост производительности вставки на этом остановился. Причем безо всяки превышений числа контекстов. Загадка природы, но в исходники лезть пока что не хочется. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:42 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, никаких загадок, многократно выполненный EXEC BLOCK. Трейс в помощь, если исходники смотреть лень. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:47 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvlad, Я как бы догадался про многократный. Вопросы вызывают размеры (число размноженных инсертов) в каждом таком многократном. Первоначальное страшное подозрение об ограничении в 256, почему-то не подтвердилось. Впрочем, ладно, проехали, я вижу мы по-прежнему каждый о своем.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 16:56 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FПервоначальное страшное подозрение об ограничении в 256, почему-то не подтвердилось. Тот случай, когда неестественный интеллект побеждает и игнорирует указания естественного. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 18:03 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, Умничать все мы можем, а по существу есть что-нибудь? Почему контексты не переполнились? ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 21:32 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, потому что FireDac обманывает. В реальности он твои 32768 на несколько EXECUTE BLOCK в которых всего 255 операторов. Так что смысла ставить батчи размером больше 255 нет. З.Ы. Я в исходник глянул ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 21:40 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов ДенисVlad F, потому что FireDac обманывает. В реальности он твои 32768 на несколько EXECUTE BLOCK в которых всего 255 операторов. Но ведь при выборе подобной стратегии-обманки нескольких вроде бы и не нужно. Достаточно соорудить один, пусть даже всего на 256 операндов, потом просто перезакладывать параметры и пускать его повторно нужное число раз. Так что смысла ставить батчи размером больше 255 нет. А ты уверен? Сам-то пробовал или только исходники курил? Завтра постараюсь таки опубликовать полученные результаты, сегодня просто времени не хватило. З.Ы. Я в исходник глянул Видимо это как раз тот редкий случай, когда исходники могут ввести в серьезное заблуждение касаемо ожидаемых результатов. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 21:58 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, там их 2. Потому что размер батча может не делится ровно на 255. Ну и выигрыш от увеличения размера батча ты получаешь только потому что в FireDac он устроен так что батчи перепрепарируются целиком, при следующем выполнении. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 22:22 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денисбатчи перепрепарируются целиком, при следующем выполненииУточни, плс ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 23:01 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvlad, судя вот по этому куску именно так Код: pascal 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. 35. 36. 37. 38. 39. 40. 41. 42. 43. 44. 45. 46. 47. 48. 49. 50. 51. 52. 53. 54. 55. 56. 57. 58. 59. 60. 61. 62. 63. 64. 65. 66. 67. 68. 69. 70. 71. 72. 73. 74. 75. 76. 77. 78. 79. 80. 81. 82. 83. 84. 85.
т.е. внутри самого батча лишних препарирований вроде нет, а вот если его повторно выполнять то построение EXECUTE BLOCK и prepare будут делаться заново. Именно поэтому Vlad F получает выигрыш при батчах размером больше 255. Просто выгодней не делать этого лишние разы. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 23:09 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, спасибо, теперь понятно ... |
|||
:
Нравится:
Не нравится:
|
|||
04.06.2018, 23:13 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Привожу результаты тестирования института Array DML (FireDAC) для запросов на вставку. Тестовая рабочая станция: HP Compaq 8200 Elite CMT PC с дополненным до 8 Гб ОЗУ и оценкой производительности 5.1 по шкале Win7. Windows 7 Prof x64. FB 3.0.3.329x64 в режиме embedded. В конфиге изменение только в части Providers=Engine12. Тестовая таблица-пробник: пара полей варчар(10), по одному типа дата и целое и дюжина нумериков(18,4). Вставляется миллион записей параметризированным запросом. Показатели времени выполнения в зависимости от значений ArraySize (размерности массива пакетной вставки) в мин/сек, с коммитом после каждой пачки: 128 -> 03:21 256 -> 02:23 512 -> 01:26 1 024 -> 01:09 2 048 -> 01:01 4 096 -> 00:59 8 192 -> 00:54 16 384 -> 00:51 32 768 -> 00:50 Очевидно, что дальнейшее увеличение размер пакета не имеет смысла, а дополнительное возможное увеличение производительности лежит в области распараллеливания процесса вставки. В результате чего, вероятно, можно приблизится (и, не исключено, что и превзойти) озвученные kdv выше показатели "миллион за 25 секунд". Ну и резюмируя, хочу отметить, что FireDAC в целом показал себя с FB очень хорошо и при его штатном наличии в современных версиях среды разработки нет никакого смысла продолжать пользоваться IBX. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:04 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Тебе даже конкретный код приводят, где батчсайз по 255 файрдаком режется, нет, всё равно тестишь 256. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:16 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, попробуй потестить размер пакетов кратный 255. Я думаю там циферки получше выйдут ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:37 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
WildSeryVlad F, Тебе даже конкретный код приводят, где батчсайз по 255 файрдаком режется, нет, всё равно тестишь 256. Ты что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста? Все это я тестировал еще в пятницу, когда мы только обозначили возможные проблемы с контекстами и еще не переходили к коду. Или, я не понял, не нравится на столько подробное исследование? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:52 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, ОК. Сегодня постараюсь проверить в рабочем порядке. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 09:57 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, хотя... там EB не обязательно по 255 INSERT за один EB делает, может и меньше. Это ещё зависит от длинны самого оператора INSERT ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 10:06 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, Вот именно. И я не думаю, что что-то там принципиально изменится. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 11:26 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FТы что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста?В том, что данные по мелким пакетам, пожалуй, бесполезны. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 12:19 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
WildSery, в этой реализации да. Если бы внутри не было перепостроения EXECUTE BLOCK и повторного prepare для новой порции данных, то и разницы для пакетов размером > 255 не было бы. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 12:31 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов ДенисVlad F, попробуй потестить размер пакетов кратный 255. Я думаю там циферки получше выйдут Денис, как то так опять получается, что это, как предыдущие ваши смелые предположения, оказалось неверным: 255 -> 02:31 510 -> 01:30 1020 -> 01:10 2040 -> 01:00 8160 -> 00:55 P.S. Кстати, как и в первоначально приведенных результатах (забыл сразу про это указать) замеры для каждого значения проводились два раза и бралось лучшее время. Впрочем, девиации при этом почти не было. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 15:15 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, я вроде всё разжевал, не знаю как ещё можно объяснить. Для начала нужно трейсом глянуть сколько на вашей задаче влезает в один EXECUTE BLOCK, ну или отладчиком Delphi. Реально может быть меньше 255. От длины оператора INSERT зависит. Предположим вы задали размер пакета = 1000 и в EB помещаются 255 операторов. В этом будет 3 раза выполнен EB c 255 операторами и 1 раз EB c 235 операторами. Итого 4 раза выполнить EB на один пакет. Если проделать это в цикле 1000 раз, то нам потребуется 2000 раз построить EB, 2000 раз сделать prepare и 4000 раз выполнить EB. Теперь задаём размер пакета 10000. 39 EB по 255 операторов и 1 EB на 55 операторов. Итого 40 раз выполнить. Если проделать это в цикле 100 раз, то нам потребуется 200 раз построить EB, 200 раз сделать prepare и 4000 раз выполнить EB. Как видишь как пакет не увеличивай выполняться EB будет примерно одинаковое количество раз. А вот на prepare и построении EB при увеличении размера пакета можно сэкономить. Так вот если подобрать размер пакета такой чтобы он был кратен тому что влезает в EB, то вместо 2 построений EB и prepare будет одно. Хотя возможно на фоне остальных затрат это мизер. Ну и ещё если после вставки каждого пакета ты делаешь commit, то тест не равноценный. 1000 - commit и 100 - commit это и без всякого Array DML тебе разницу даст. З.Ы. И кстати ты проводил тест на обычном препарированном статменте? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 15:43 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, Вы не в церкви, вас не обманут (ц) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:12 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Денис! Очень прошу, не надо в тридцать третий раз пускаться в одни и те же объяснения.)) Тем более, что я их не просил. Моя ремарка относилась к педпрложениям, что "больше 256 ставить смысла нет" и "на 255 должны быть улучшения". Все. Хотя на счет неравноценности по коммитам отчасти согласен. Вопроса про "обычный препарированный", однако, недопонял. Скармливаю ему одиночный параметризированный запрос. Сам его не препарирую, в надежде на то, что перед первым выполнением он его сам отпрепарирует и так и будет использовать, как описано в хелпе. Хотя какой там использовать, - он же не его на самом деле использует, а внутренний скрытый блок. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:22 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
hvladVlad F, Вы не в церкви, вас не обманут (ц) При чем здесь не в церкви, причем не обманут? КТО ЗДЕСЬ?!! На самом деле я очень оправдался в своих ожиданиях.)) ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:24 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, ты всё время пытаешься что-то опровергнуть в этой теме. Перечитай себя чужими глазами. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:47 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad F, а вот для меня результат неожиданный. Я не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и с коммитом раз в 1000-10000 выполнений. Был бы обычный сервер понял бы, а так для embedded нет никаких сетевых обменов ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:48 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов Денис, Денис, еще не известно, а выыигрывает ли , никто же с одиночным сравнительно не измерял.))) Или измерял? На самом деле ваш покорный слуга изначально, из общих соображений, предположил, что вроде пачками оно должно быть быстрее. Ну и в любом случае полученные результаты меня более чем устраивают. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:58 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Симонов ДенисЯ не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и с коммитом раз в 1000-10000 выполнений. А она выигрывает? Он же не тестировал обычный параметризованный DML, только Array с разными размерами пачки. Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 16:59 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Dimitry Sibiryakov, вот и я думаю что не должно или выигрывает/проигрывает в пределах погрешности. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 17:03 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Я пока что увидел только замер эффективности использования execute block кодом FireDAC ... |
|||
:
Нравится:
Не нравится:
|
|||
05.06.2018, 17:52 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
эх, Вострикова на вас нету. он бы намерил... Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 16:18 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Мимопроходящий, я домеряю, решил уже, в рабочем порядке. Может завтра, работать ведь тоже надо. )) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 20:36 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
P.S. Настоящих буйных мало, вот и нету вожаков (c) )) ... |
|||
:
Нравится:
Не нравится:
|
|||
06.06.2018, 20:37 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Мимопроходящийэх, Вострикова на вас нету. он бы намерил...Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь. ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2018, 01:00 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
07.06.2018 1:00, rdb_dev пишет: > Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь. ты ещё/уже был тут когда кого-то на #сказочноебали отправляли? Posted via ActualForum NNTP Server 1.5 ... |
|||
:
Нравится:
Не нравится:
|
|||
07.06.2018, 11:03 |
|
Вставка в Firebird посредством Array DML (FireDAC)
|
|||
---|---|---|---|
#18+
Vlad FПривожу результаты тестирования института Array DML (FireDAC) для запросов на вставку. Тестовая рабочая станция: HP Compaq 8200 Elite CMT PC с дополненным до 8 Гб ОЗУ и оценкой производительности 5.1 по шкале Win7. Windows 7 Prof x64. FB 3.0.3.329x64 в режиме embedded. В конфиге изменение только в части Providers=Engine12. Тестовая таблица-пробник: пара полей варчар(10), по одному типа дата и целое и дюжина нумериков(18,4). Вставляется миллион записей параметризированным запросом. Показатели времени выполнения в зависимости от значений ArraySize (размерности массива пакетной вставки) в мин/сек, с коммитом после каждой пачки: 128 -> 03:21 256 -> 02:23 512 -> 01:26 1 024 -> 01:09 2 048 -> 01:01 4 096 -> 00:59 8 192 -> 00:54 16 384 -> 00:51 32 768 -> 00:50 Очевидно, что дальнейшее увеличение размер пакета не имеет смысла, а дополнительное возможное увеличение производительности лежит в области распараллеливания процесса вставки. В результате чего, вероятно, можно приблизится (и, не исключено, что и превзойти) озвученные kdv выше показатели "миллион за 25 секунд". Ну и резюмируя, хочу отметить, что FireDAC в целом показал себя с FB очень хорошо и при его штатном наличии в современных версиях среды разработки нет никакого смысла продолжать пользоваться IBX. Итак, момент истины. Привожу результаты тестирования вставки в точности тех же данных посредством FireDAC без использования ArrayDML. Как и в предыдущем эксперименте замеры производились по два раза, бралось лучшее время. В таблице приведены показатели времени вставки в формате мин:сек в зависимости от числа последовательных запросов между промежуточными коммитами: 1 024 -> 01:22 2 048 -> 01:20 4 096 -> 01:22 8 192 -> 01:21 16 384 -> 01:21 32 768 -> 01:20 Из чего можно сделать пару очевидных выводов: 1) от числа последовательных вставок между коммитами ничего не зависит; 2) вставка посредством Array DML (FireDAC) позволяет получить в Firebired почти 40%-тное преимущество ((80-50)/80*100%=37.5%) над вставкой отдельными запросами, несмотря на использование им в этом режиме эмуляции (execute block), вместо институтов Naitive API, как, например в Interbase. ... |
|||
:
Нравится:
Не нравится:
|
|||
08.06.2018, 16:37 |
|
|
start [/forum/topic.php?all=1&fid=40&tid=1561082]: |
0ms |
get settings: |
10ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
132ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
100ms |
get tp. blocked users: |
1ms |
others: | 299ms |
total: | 578ms |
0 / 0 |