|
Вставка в 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 |
|
|
start [/forum/topic.php?fid=40&msg=39652823&tid=1561082]: |
0ms |
get settings: |
8ms |
get forum list: |
12ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
73ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
51ms |
get tp. blocked users: |
1ms |
others: | 14ms |
total: | 175ms |
0 / 0 |