powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка в Firebird посредством Array DML (FireDAC)
73 сообщений из 73, показаны все 3 страниц
Вставка в Firebird посредством Array DML (FireDAC)
    #39652541
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В справке по Array DML (FireDAC) написано, что для Interbase, например, оно использует Command Batch API, а для Firebird EXECUTE STATEMENT. Кто-нибудь пользовался им для организации типа пакетной вставки значительных объемов данных данных в Firebird? стоит ли затеваться, есть ли вообще эффект?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652605
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad Fстоит ли затеваться, есть ли вообще эффект?

Эффект есть. Но стоит ли оно того для твоей задачи - неизвестно.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652627
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Стоит ли оно для моей задачи как раз и зависит от процента получаемого эффекта. Вы сами пробовали или отвечаете из общих соображений? Задача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи embedded-движка. И какой ParamsArrayCount при этом стоит выставлять, если кто-то уже поэкспериментировал?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652638
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad Fдля Firebird EXECUTE STATEMENT???
Может EXECUTE BLOCK ?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652639
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

ИХМО Array DML реально ускоряет когда идёт взаимодействие по сети. В этом случае по сети передаётся значительно меньше пакетов. А для embedded движка может разница и будет, но не думаю что уж очень большая.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652640
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FВы сами пробовали или отвечаете из общих соображений?

Пробовал Дмитрий Арефьев когда этот самый ArrayDML разрабатывал.

Vlad FЗадача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи
embedded-движка.
В этой задаче заметного ускорения не будет, поскольку основная экономия при использовании
EXECUTE BLOCK проистекает из сокращения числа сетевых round-trip-ов. Возможно, будет даже
замедление из-за не слишком эффективного кода обработки запросов с большим количеством
параметров.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652788
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladVlad Fдля Firebird EXECUTE STATEMENT???
Может EXECUTE BLOCK ?
Ты совершенно прав на счет блока, это я ошибся цитируя по памяти.
http://docwiki.embarcadero.com/RADStudio/XE7/en/Array_DML_(FireDAC)
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652790
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FЗадача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи embedded-движка.
а что, миллион записей за 26 секунд - не устраивает?
https://www.ibase.ru/news/novoe-video-parallel-naa-vstavka-dannyh/
каждый день вставлять миллион записей надо? Каждый час?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652809
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv,

Дмитрий, миллион - это условный миллион. За восьми-часовой рабочий день приложением потенциально обрабатывается и импортируется в БД Оракула и/или MS SQL сервера порядка 1.2 террабайта исходных XML-данных. Хотелось бы и с Firebird, до которого теперь дошла очередь, не ударить в грязь лицом. Ну и даже если упасть, то чтобы не очень сильно.))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652822
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovVlad FВы сами пробовали или отвечаете из общих соображений?

Пробовал Дмитрий Арефьев когда этот самый ArrayDML разрабатывал.

Как я сам теперь понимаю, то честь ему и хвала за то, что не счел за труд разобраться и применить для интербейза его batch api и хотя бы execute Block для firebird, а не emulation (на фоне других серверов), что было бы проще всего.
Vlad FЗадача, упрощенно, побыстрее закачать миллион записей в одном сеансе при помощи
embedded-движка.
В этой задаче заметного ускорения не будет, поскольку основная экономия при использовании
EXECUTE BLOCK проистекает из сокращения числа сетевых round-trip-ов. Возможно, будет даже
замедление из-за не слишком эффективного кода обработки запросов с большим количеством
параметров.

Ладно, я понял, придется исследовать все самому. На самом деле очень печально, что эти FireDAC-институты, и дело даже не в нашем сообществе, а по результатам поисков в Сети в целом, получается, всерьез никем не используются.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652823
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

автор тусуется на этом форуме. Тема постоянно в топе. Спросить можно лично http://www.sql.ru/forum/1008012-37/firedac
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652861
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Денис, ну вот о чем мне его лично предлагается спрашивать, - не в курсе ли он, используются хоть кем-то созданные им, в принципе, перспективные институты? И с какими именно параметрами? И если есть, то какой именно при этом на тематическом движке эффект? Ну а тебе самому не смешно?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652956
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FЗа восьми-часовой рабочий день приложением потенциально обрабатывается и импортируется в БД Оракула и/или MS SQL сервера порядка 1.2 террабайта исходных XML-данных.

я на такие сентенции обычно говорю, что это не задача, а чешуя, потому что обработать и осмыслить такое количество данных никто не в состоянии. Их или надо сразу агрегировать, а значит ни о каких 1.2 терабайтах речь не идет, или тогда их НЕ надо хранить в СУБД вообще.
1.2 терабайта входящих данных в сутки - это долбануться можно, хрень какая-то. Столько разве что с космических радаров приходит, для обозрения вселенной.
Vlad FЛадно, я понял, придется исследовать все самому.
КТО будет эти ваши данные и скорость их вставки за вас исследовать, что за фантазии?
Да и исследовать там нечего. Быстрее было исследовать, чем сюда вопросы писать. Вот я захотел исследовать вставку 1млн записей - и исследовал, никого не спрашивая. Правда, я заранее знал, как это надо делать. Но тем не менее.
Vlad Fто какой именно при этом на тематическом движке эффект?
да хватит уже. возьми и протестируй. Не понравится - ну напиши на чистом API, сравни скорость. Кому это надо, нам, что-ли?
Vlad Fа по результатам поисков в Сети в целом, получается, всерьез никем не используются.
не надо тут плести пропагандистские сети. По вставке данных есть общие рекомендации. А что там у вас конкретно - это надо программисту разбираться. С замером скорости каждого действия. И искать, где можно оптимизировать.
Вдруг ваш 1.2 терабайта превратится при вставке в 1 гиг. Или еще меньше. Кто его знает, как это у вас там устроено. Хреново напишете - ну и кто будет виноват, Firebird? Чего сразу тут разводить предположения?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652960
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvВдруг ваш 1.2 терабайта превратится при вставке в 1 гигНу, 1 вряд ли, а 70-80 гиг - вполне обычный процент на глаз в среднем. Конечно, +/- десятки процентов - все зависит от конкретного xml. Ну и это многовато как для "в день".

А вообще, представляю файл xml на 1.2 тб. Его наверно так приятно даже просто парсить.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652962
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
YuRock,

я знаю про базы на ФБ с микротранзакциями по 7 терабайт. Поэтому в 1.2 терабайта в день я просто не верю. Это такой объем данных, который, еще раз подчеркиваю, проанализировать в осмысленное время невозможно. Поэтому я считаю это откровенной ахинеей. До тех пор, пока мне не покажут, что это действительно реальные и анализируемые данные.
В разделе "Сравнение СУБД" такая фигня появляется регулярно. И когда людям тут же приводишь данные по объему вставляемых данных в секунду, они тут же куда-то сливаются.
К примеру, 1.2 терабайта за 8 часов, это 41 мегабайт в секунду, непрерывно. Значит, хранилище должно обеспечивать скорость записи раз в 10 больше, то есть 410мб в секунду. Для ssd это вроде ок. Но покажите мне хранилище из ssd в сотни терабайт (за год, напомню, 1.2 терабайта в сутки это больше 365 терабайт в год). И человек, который имеет денег на такое хранилище, что-то тут спрашивает? НЕ ВЕРЮ.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652980
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdv, и самое забавное использовать Embedded для таких объёмов.
Ну хотя автор же не написал что все 1.2 тб в базу уходят, это только объём XML данных. Может на выхлопе там всего 1Гб.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39652983
Любезный
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЭто такой объем данных, который, еще раз подчеркиваю, проанализировать в осмысленное время невозможно. Поэтому я считаю это откровенной ахинеей. До тех пор, пока мне не покажут, что это действительно реальные и анализируемые данные.
Ну все же к примеру, есть у нас теперь дурацкое законодательство, требующее хранить записи телефонных разговоров и переписку в течение какого-то времени. Надеюсь, не надо объяснять, кто это будет анализировать. То, что 99,9% этих записей будут сделаны впустую, и ежу понятно.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653010
fraks
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ЛюбезныйНу все же к примеру, есть у нас теперь дурацкое законодательство, требующее хранить записи телефонных разговоров и переписку в течение какого-то времени. Надеюсь, не надо объяснять, кто это будет анализировать. То, что 99,9% этих записей будут сделаны впустую, и ежу понятно.

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

И XML - хреновейший (ИМХО) способ держать такие данные, ибо требует огромные ресурсы для парсинга.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653045
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Эк, вас, парни, однако, разобрало! Не будете возражать предложению вернуться к исходной тематике?)) Возникли подозрения по возможным внутренним ограничениям обсуждаемого механизма. Предположим, скармливаем мы ему параметризированный запрос на вставку из 10 записей и соотв. 10 параметрами и выставляем глубину массива параметров в 10 000 (обе цифры условные, прошу срач не затевать). Он нам на это внутри, вероятно, конструирует execute block с 10 000 инсертов и уже 100 000 входных параметров. А какие, вообще, у блока в тройке на это ограничения:
1) максимальное число отдельных запросов (в данном случае на инсерт)?
2) максимальная длина текста самого блока?
3) максимальное число входных параметров блока?
И есть ли какие-то изменения с этим в четверке?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653056
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FА какие, вообще, у блока в тройке на это ограничения:
1) максимальное число отдельных запросов (в данном случае на инсерт)?
2) максимальная длина текста самого блока?
3) максимальное число входных параметров блока?
И есть ли какие-то изменения с этим в четверке?
1) 256 инсертов
2) 10МБ
3) 64К штук вроде

В 4-ке, возможно, уберем первое ограничение. Но это все фигня, ибо в 4-ке есть новый batch API для заливки и не нужны извраты с EXECUTE BLOCK. Вопрос в том, когда FireDAC реализует поддержку этого АПИ...
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653059
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653074
Фотография Дегтярев Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> в 4.0 есть нативный Batch API
как это будет выглядеть? prepare + execute c кучей параметров?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653077
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дегтярев Евгений,

не совсем. Примеры можно поглядеть тут

https://github.com/FirebirdSQL/firebird/blob/master/examples/interfaces/11.batch.cpp
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653756
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrVlad FА какие, вообще, у блока в тройке на это ограничения:
1) максимальное число отдельных запросов (в данном случае на инсерт)?
2) максимальная длина текста самого блока?
3) максимальное число входных параметров блока?
И есть ли какие-то изменения с этим в четверке?
1) 256 инсертов
2) 10МБ
3) 64К штук вроде

В 4-ке, возможно, уберем первое ограничение. Но это все фигня, ибо в 4-ке есть новый batch API для заливки и не нужны извраты с EXECUTE BLOCK. Вопрос в том, когда FireDAC реализует поддержку этого АПИ...
Получается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем. Беда.
Дмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел?
Что же касается нового АПИ, то это, конечно здорово (я серьезно), но это когда еще разработчики библиотек доступа про него прочухаются, и по любому потом придется ждать/приобретать новые версии средств разработки. Боюсь, что это не месяцы, а годы.
В любом случае спасибо за предыдущий оперативный и полный ответ.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653771
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем.

Я уже говорил что основной выигрыш на пакетных вставках получается именно при работе через сеть. Арефьев делал замеры и насколько мне помнится от выполнения более 50 INSERT за один раз толку не было.

Ты уже делал замеры на своей задаче?

Vlad FЧто же касается нового АПИ, то это, конечно здорово (я серьезно), но это когда еще разработчики библиотек доступа про него прочухаются, и по любому потом придется ждать/приобретать новые версии средств разработки.

а в чём проблема разберись сам с новым API и сделай свою библиотеку для пакетной загрузки.
Или даже продолжай использовать старый FireDAC и сделай хук который вместо формирования EB будет пользоваться новым API.
В свой время эмуляцию пакетной загрузки в FireDac сделали так именно потому что не было родного Batch API.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653932
dimitr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем.
тем не менее, это в 256 раз меньше сетевых раундтрипов

Vlad FДмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел?
зависит от времени доделать патч. Пока приоритеты на другом сфокусированы. Новый предел 2^32.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653964
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrтем не менее, это в 256 раз меньше сетевых раундтрипов

Не совсем так. Это меньше трипов при исполнении, но при препарации метаданные передаются
небольшими кусками и там может быть до 256 раз больше трипов. Так что если роделывать
данный трюк без применения мозга и препарировать отдельный EB на каждое исполнение, можно
получить нулевой или даже отрицательный эффект.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39653973
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov> препарировать отдельный EB на каждое исполнение

Там один препаре с тучей параметров. Ну, вернее 2 - конечный кусок маленький.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655008
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimitrVlad FПолучается, при допущении, что FireDAC для эмуляции пакетной вставки организует блоки с пачками инсертов, то на ограничение по п.1 мы выходим первым, а ведь 256, для размера подобного пакета, на мой взгляд, это вообще ни о чем.
тем не менее, это в 256 раз меньше сетевых раундтрипов
Меньше то оно, конечно, меньше, ну а самое главное, что не оказалось на самом деле пределом для обсуждаемого Array DML, который почему-то не вываливает ничего прохожего на too many contexts и при гораздо больших значениях пакетного массива. Ну или мы не совсем верно предполагаем, как он там внутри использует execute block.
Vlad FДмитрий, а вот про снятие данного ограничения в четверке это от чего зависит и какова на сегодняшний день вероятность его снятия? И если будет снято, то каким ожидается новый предел?
зависит от времени доделать патч. Пока приоритеты на другом сфокусированы. Новый предел 2^32.
Я бы даже сказал, что это уже беспредел какой то!! Хорошо подождем, тем более что от беты четверки в первую очередь жду truncate table и decfloat. Кстати, семантика привычных нумериков будет как-то расширена с появлением decfloat, с тем чтобы их можно было объявлять с точностью более 18, а на самом деле под ними движок самостоятельно оперировал decfoat-ами??
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655021
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FКстати, семантика привычных нумериков будет как-то расширена с появлением decfloat, с тем чтобы их можно было объявлять с точностью более 18, а на самом деле под ними движок самостоятельно оперировал decfoat-ами??

да. Оно уже есть. Точность до 34 цифр. Вот только не задача, компоненты доступа сами по себе не научатся работать с DecFloat. Там конечно есть обходные пути (возвращать клиенту строковое представление), но работать с ними уже не так удобно.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655049
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FМеньше то оно, конечно, меньше, ну а самое главное, что не оказалось на самом деле пределом для обсуждаемого Array DML, который почему-то не вываливает ничего прохожего на too many contexts и при гораздо больших значениях пакетного массива. Ну или мы не совсем верно предполагаем, как он там внутри использует execute block.Batch API никак не использует execute block.
Не нужно тыкать пальцем в небо.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655053
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Из твоего ответа, однако, не становится ясным, можно ли будет не объявлять явным образом decfloat-поля, а с тем же успехом пользовать numeric(x>18, x) ?? Что же касается маппинга на конкретные типы полей в клиентских библиотеках, то вполне бы устроило, если бы оно автоматом маппилось на те же FmtBcd-типы, что и, к примеру, numeric(18, 4) в настоящее время.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655058
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladBatch API никак не использует execute block.

Никто и не утверждал обратного. Речь об Array DML, эмулируемом на уровне FireDAC.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655062
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Да NUMERIC(34, x) и DECIMAL(34, x) можно использовать. В новом API есть методы для преобразования DecFloat в BCD но их нужно ещё вызвать. Если в компонентах этих вызовов нет, то ничего не выйдет.
А биндинги для поддержки старых клиентов есть, там варианты либо на BIGINT, DOUBLE PRECISION (если точности хватает), либо на строку.

Скачай в конце концов себе снапшот и пощупай его. Он кстати устойчивый. IBE частично уже умеет работать с 4.0
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655064
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladBatch API никак не использует execute block.
Не нужно тыкать пальцем в небо.
Согласен, не нужно. Но мы, КМК, не обсуждае сейчас модерновое, Batch API, а продолжаем исследовать особенности Array DML (FireDAC), ради чего, собственно и была создана тема. А про нее Эмбаркадера божится, по ссылке, что я давал выше, что для FB оно так или иначе через execute block. Ты давай, вспоминай.))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655066
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Значит я не так тебя понял
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655073
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Так вот с одной стороны они там заявляют про execute block, с другой стороны оно у меня не упало при размерах пакета вплоть до 32 768 (!). Правда и рост производительности вставки на этом остановился. Причем безо всяки превышений числа контекстов. Загадка природы, но в исходники лезть пока что не хочется.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655076
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

никаких загадок, многократно выполненный EXEC BLOCK.
Трейс в помощь, если исходники смотреть лень.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655089
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,

Я как бы догадался про многократный. Вопросы вызывают размеры (число размноженных инсертов) в каждом таком многократном. Первоначальное страшное подозрение об ограничении в 256, почему-то не подтвердилось. Впрочем, ладно, проехали, я вижу мы по-прежнему каждый о своем.))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655128
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FПервоначальное страшное подозрение об ограничении в 256, почему-то не подтвердилось.

Тот случай, когда неестественный интеллект побеждает и игнорирует указания естественного.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655225
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Умничать все мы можем, а по существу есть что-нибудь? Почему контексты не переполнились?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655229
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

потому что FireDac обманывает. В реальности он твои 32768 на несколько EXECUTE BLOCK в которых всего 255 операторов.
Так что смысла ставить батчи размером больше 255 нет.

З.Ы. Я в исходник глянул
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655231
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисVlad F,

потому что FireDac обманывает. В реальности он твои 32768 на несколько EXECUTE BLOCK в которых всего 255 операторов.
Но ведь при выборе подобной стратегии-обманки нескольких вроде бы и не нужно. Достаточно соорудить один, пусть даже всего на 256 операндов, потом просто перезакладывать параметры и пускать его повторно нужное число раз.
Так что смысла ставить батчи размером больше 255 нет.
А ты уверен? Сам-то пробовал или только исходники курил? Завтра постараюсь таки опубликовать полученные результаты, сегодня просто времени не хватило.
З.Ы. Я в исходник глянул
Видимо это как раз тот редкий случай, когда исходники могут ввести в серьезное заблуждение касаемо ожидаемых результатов.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655240
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

там их 2. Потому что размер батча может не делится ровно на 255.
Ну и выигрыш от увеличения размера батча ты получаешь только потому что в FireDac он устроен так что батчи перепрепарируются целиком, при следующем выполнении.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655253
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денисбатчи перепрепарируются целиком, при следующем выполненииУточни, плс
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655260
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
procedure TFDPhysFBCommand.DoExecuteFB2Batch(ATimes, AOffset: Integer;
  var ACount: TFDCounter);
var
  sBatchSQL: String;
  iBatchSize, iBatchSize2: LongWord;
  iInVarsCount, iOutVarsCount: Smallint;
  iCurTimes, iCurOffset, iLastBatchSize: Integer;
  oStmt: TIBStatement;
  oResOpts: TFDResourceOptions;
begin
  oResOpts := FOptions.ResourceOptions;
  // total size of XSQLVAR, which will be send to server in single packet
  iBatchSize := FStmt.MaximumBatchSize;

  // total count of XSQLVAR's. UPDATE OR INSERT command will use few times
  // more variables, than actually the command text has
  iInVarsCount := FStmt.InVars.VarCount;
  case GetCommandKind of
  skMerge:  iInVarsCount := iInVarsCount * 5;
  skUpdate: iInVarsCount := iInVarsCount * 3;
  end;
  iOutVarsCount := FStmt.OutVars.VarCount;

  // total size of SQL command, which will be send to server
  iBatchSize2 := 32700 div
    (Length(FDBCommandText) +
     iInVarsCount * 11 + 2 + iInVarsCount * (11 + 15 + 3) +
     iOutVarsCount * 11 + 2 + iOutVarsCount * (11 + 15 + 3));
  if iBatchSize2 < iBatchSize then
    iBatchSize := iBatchSize2;

  // maximum number of contexts
  if iBatchSize > 255 then
    iBatchSize := 255;

  if iBatchSize > LongWord(oResOpts.ArrayDMLSize) then
    iBatchSize := LongWord(oResOpts.ArrayDMLSize);

  // If block will have only single command, then go by standard
  // route - execute command once for each param array item.
  if iBatchSize <= 1 then begin
    DoExecute(ATimes, AOffset, ACount);
    Exit;
  end;

  iCurOffset := AOffset;
  iCurTimes := LongWord(AOffset) + iBatchSize;
  iLastBatchSize := 0;

  oStmt := TIBStatement.Create(IBConnection.IBDatabase,
    TFDPhysIBTransactionBase(FTransactionObj).IBTransaction, Self);
  try
    SetupStatement(oStmt);

    while iCurOffset < ATimes do begin
      if iCurTimes > ATimes then
        iCurTimes := ATimes;

      if iLastBatchSize <> iCurTimes - iCurOffset then begin
        sBatchSQL := GenerateFB2BatchSQL(iCurTimes, iCurOffset);
        oStmt.Unprepare;
        oStmt.Prepare(sBatchSQL);
        if FStmt.OutVars.VarCount > 0 then
          oStmt.DescribeSelect;
        FStmt.OutVars.RowCount := 1;
        if FStmt.InVars.VarCount > 0 then
          oStmt.DescribeBind;
        FStmt.InVars.RowCount := 1;
        iLastBatchSize := iCurTimes - iCurOffset;
      end;

      SetFB2BatchParamValues(oStmt, iCurTimes, iCurOffset);
      oStmt.Execute(True);
      GetFB2BatchParamValues(oStmt, iCurTimes, iCurOffset);
      Inc(ACount, oStmt.RowsAffected);
      oStmt.Close;

      Inc(iCurOffset, iBatchSize);
      Inc(iCurTimes, iBatchSize);
    end;

  finally
    FDFree(oStmt);
  end;
end;



т.е. внутри самого батча лишних препарирований вроде нет, а вот если его повторно выполнять то построение EXECUTE BLOCK и prepare будут делаться заново. Именно поэтому Vlad F получает выигрыш при батчах размером больше 255. Просто выгодней не делать этого лишние разы.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655262
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

спасибо, теперь понятно
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655342
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.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655352
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Тебе даже конкретный код приводят, где батчсайз по 255 файрдаком режется, нет, всё равно тестишь 256.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655361
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

попробуй потестить размер пакетов кратный 255. Я думаю там циферки получше выйдут
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655371
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryVlad F,

Тебе даже конкретный код приводят, где батчсайз по 255 файрдаком режется, нет, всё равно тестишь 256.
Ты что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста?
Все это я тестировал еще в пятницу, когда мы только обозначили возможные проблемы с контекстами и еще не переходили к коду. Или, я не понял, не нравится на столько подробное исследование?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655374
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ОК. Сегодня постараюсь проверить в рабочем порядке.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655380
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

хотя... там EB не обязательно по 255 INSERT за один EB делает, может и меньше. Это ещё зависит от длинны самого оператора INSERT
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655433
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Вот именно. И я не думаю, что что-то там принципиально изменится.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655490
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FТы что хотел сказать конкретно? Что не нравится? И в чем ценность твоего поста?В том, что данные по мелким пакетам, пожалуй, бесполезны.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655506
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

в этой реализации да. Если бы внутри не было перепостроения EXECUTE BLOCK и повторного prepare для новой порции данных, то и разницы для пакетов размером > 255 не было бы.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655666
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисVlad F,

попробуй потестить размер пакетов кратный 255. Я думаю там циферки получше выйдут
Денис, как то так опять получается, что это, как предыдущие ваши смелые предположения, оказалось неверным:
255 -> 02:31
510 -> 01:30
1020 -> 01:10
2040 -> 01:00
8160 -> 00:55

P.S. Кстати, как и в первоначально приведенных результатах (забыл сразу про это указать) замеры для каждого значения проводились два раза и бралось лучшее время. Впрочем, девиации при этом почти не было.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655694
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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 тебе разницу даст.

З.Ы. И кстати ты проводил тест на обычном препарированном статменте?
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655734
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Вы не в церкви, вас не обманут (ц)
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655750
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Денис! Очень прошу, не надо в тридцать третий раз пускаться в одни и те же объяснения.)) Тем более, что я их не просил. Моя ремарка относилась к педпрложениям, что "больше 256 ставить смысла нет" и "на 255 должны быть улучшения". Все.
Хотя на счет неравноценности по коммитам отчасти согласен.
Вопроса про "обычный препарированный", однако, недопонял. Скармливаю ему одиночный параметризированный запрос. Сам его не препарирую, в надежде на то, что перед первым выполнением он его сам отпрепарирует и так и будет использовать, как описано в хелпе.
Хотя какой там использовать, - он же не его на самом деле использует, а внутренний скрытый блок.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655757
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladVlad F,

Вы не в церкви, вас не обманут (ц)
При чем здесь не в церкви, причем не обманут? КТО ЗДЕСЬ?!!
На самом деле я очень оправдался в своих ожиданиях.))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655783
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

ты всё время пытаешься что-то опровергнуть в этой теме.
Перечитай себя чужими глазами.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655785
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

а вот для меня результат неожиданный. Я не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и с коммитом раз в 1000-10000 выполнений. Был бы обычный сервер понял бы, а так для embedded нет никаких сетевых обменов
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655803
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

Денис, еще не известно, а выыигрывает ли , никто же с одиночным сравнительно не измерял.))) Или измерял?
На самом деле ваш покорный слуга изначально, из общих соображений, предположил, что вроде пачками оно должно быть быстрее. Ну и в любом случае полученные результаты меня более чем устраивают.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655805
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов ДенисЯ не понимаю почему эмуляция Array DML через EXECUTE BLOCK значительно выигрывает у
одиночного подготовленного INSERT, который многократно выполняется с разными параметрами и
с коммитом раз в 1000-10000 выполнений.

А она выигрывает? Он же не тестировал обычный параметризованный DML, только Array с
разными размерами пачки.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655808
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

вот и я думаю что не должно или выигрывает/проигрывает в пределах погрешности.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39655863
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я пока что увидел только замер эффективности использования execute block кодом FireDAC
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656641
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
эх, Вострикова на вас нету.
он бы намерил...

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656912
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

я домеряю, решил уже, в рабочем порядке. Может завтра, работать ведь тоже надо. ))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656914
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
P.S. Настоящих буйных мало, вот и нету вожаков (c) ))
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39656967
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящийэх, Вострикова на вас нету.
он бы намерил...Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь.
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39657174
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
07.06.2018 1:00, rdb_dev пишет:
> Его теперь ни на кого нет. Ушел в своё фотоподполье и его теперь оттуда никаким калачом не выманишь.

ты ещё/уже был тут когда кого-то на #сказочноебали отправляли?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Вставка в Firebird посредством Array DML (FireDAC)
    #39658491
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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.
...
Рейтинг: 0 / 0
73 сообщений из 73, показаны все 3 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка в Firebird посредством Array DML (FireDAC)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]