powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка в Firebird посредством Array DML (FireDAC)
25 сообщений из 73, страница 1 из 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
25 сообщений из 73, страница 1 из 3
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Вставка в Firebird посредством Array DML (FireDAC)
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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