powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужен быстрый insert во временную таблицу
25 сообщений из 84, страница 3 из 4
Нужен быстрый insert во временную таблицу
    #40057982
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А источник для массового insert? Из базы во временные таблицы? ИЛи с клиента?
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057983
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я же всё подробно изложил уже. Несколько раз. С клиента.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057987
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А откуда на клиенте эти строки появились?
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057999
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenВот так-то так. Причём в разных транзакциях джойн одной и той же временной таблицы может
происходить с любой из реальных таблиц базы

Сдаётся мне, что временные таблицы здесь не нужны, а данные можно доставать прямо из
таблиц, формируя условие с IN группами по тысяче штук сразу по мере получения пакета
данных от "другой системы". В конечном итоге это скорее всего выйдет намного быстрее чем
insert+select join.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058002
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Была такая идея. Но есть ещё и ограничение на размер текста SQL. Его легко преодолеть даже группируя по 1000 значений в in.

ЗЫ: Наконец-то дошли руки померить скорость заполнения временной таблицы по сети 100'000-ю значений. Сетка гигабитная. Сервак в том же сегменте что и мой рабочий комп. Вот результаты:

Firebird (блочная вставка по 20): 6.6 секунды на заполнение и практически мгновенное выполнение запроса после
PostgreSQL (COPY + передача бинарного буфера): 1.4 сек на заполнение и 0.7 сек на выполнение запроса после

Данные и там и там абсолютно одинаковые. Правда, Firebird был уже на серваке, но версии 3.0. Я 2.5 не стал ставить. Потестил на том что было.

Чаще всего Firebird стоит на том же серваке, где крутится наша служба. В этом случае FB не только не отстаёт от PG но и даже работает быстрее (время заполнения временной таблицы и выполнения запроса близко к 1.4 сек), что меня устраивает. Всем спасибо кто посоветовал блочную вставку! ))
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058005
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
Правда, Firebird был уже на серваке, но версии 3.0
WireCompression включено ?
Хотя я не уверен, что на гигабитной сети это будет особо заметно, но попробовать интересно.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058007
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Включил WireCompression. Среднее время заполнения таблицы упало до 6.5 сек. Но сервак стоит на виртуалке. В параллель там много чего крутиться, так что это уменьшение времени в пределах погрешности ))
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058016
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ArtDen
Firebird (блочная вставка по 20): 6.6 секунды на заполнение и практически мгновенное выполнение запроса после
PostgreSQL (COPY + передача бинарного буфера): 1.4 сек на заполнение и 0.7 сек на выполнение запроса после


Немного перехвалил Firebird )) На самом деле запрос после заполнения выполняется не почти мгновенно, а ~0.7 сек, как и у PG.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058023
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
Включил WireCompression
Для этого нужен клиент и конфиг от 3-ки. И, конечно, zlib1.dll рядом с fbclient.dll. Так и делал ?
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058035
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
zlib1.dll рядом с fbclient.dll был. Насчёт конфига не понял. На сервере в firebird.conf поставил WireCompression = true и перезапустил службу. Этого не достаточно?
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058039
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenНо есть ещё и ограничение на размер текста SQL. Его легко преодолеть даже группируя по
1000 значений в in.

Это ограничение в 10 мегабайт для тройки. Ты уверен, что тысяча значений сумеет его
преодолеть?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058056
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
zlib1.dll рядом с fbclient.dll был. Насчёт конфига не понял. На сервере в firebird.conf поставил WireCompression = true и перезапустил службу. Этого не достаточно?
Нет, клиенту тоже нужно WireCompression = true.
Проверить статус сжатия можно в мониторинге.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058073
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Пока что у кучи пользователей 2.5 и к сожалению переход на что-то более свежее не предвидится из-за нежелания пользователей ждать бакапа/рестора при обновлении сервиса (( Но есть идея все новые инсталляции делать уже на свежем FB
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058074
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hvlad
ArtDen
zlib1.dll рядом с fbclient.dll был. Насчёт конфига не понял. На сервере в firebird.conf поставил WireCompression = true и перезапустил службу. Этого не достаточно?
Нет, клиенту тоже нужно WireCompression = true.
Проверить статус сжатия можно в мониторинге.


Включил WireCompression = true в firebird.conf на клиенте. В итоге
Error reading data from the connection.

Видимо на сервере слишком старый FB 3.0. Попробую обновить
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058083
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Обновил. Заработало. По скорости практически нету разницы. Но трафик уменьшился. Без сжатия - 2043 Кб/164Кб и со сжатием - 366Кб/41Кб (к серверу FB/от сервера FB)
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058087
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Избався от сетевого трафика. Переливай из базы в базу.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058090
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
птичку жалко
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058095
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

будет время попробуй на 4.0 Batch API. У меня даже на localhost при массовой заливке получался выигрыш в 2.5-10 раз. Правда с EB не сравнивал.

22080521
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058114
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так какое ограничение на размер всех параметров запроса у FB 2.5? Сейчас для varchar(256) значение XSQLVAR::sqllen получается 1024 байта (256*4). Сколько я таких параметров могу передать за раз?
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058117
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Попробую конечно. Но о 4.0 мне остаётся только мечтать )
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058119
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

2.5 - 64K на длину сообщения (параметры) и на длину запроса 64K. 255 контекстов (грубо говоря запросов внутри Execute block).
3.0 - 10M. 255 контекстов.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058127
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Симонов Денис,

Спасибо. Для varchar(256) буду передавать по 60 параметров в блоке. Для всех остальных типов - по 250
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058162
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenПока что у кучи пользователей 2.5 и к сожалению переход на что-то более свежее не предвидится

А до тебя точно дошло, что выбирать все 100000 скважин не обязательно одним запросом и
даже в одном коннекте?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058174
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Если в мой сервис пришёл запрос на получение данных, я должен эти данные получить из базы и отправить их тому, кто их запрашивал. И это надо сделать быстро.
Сервис конечно может ответить, что слишком много параметров в условии и фиг вам. Но за это меня по головке не погладят. Ни пользователи, ни программисты, которые этот сервис используют.

Как это всё сделать намного лучше - я прекрасно понимаю. Но вопрос был совсем не об этом.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40058179
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenЕсли в мой сервис пришёл запрос на получение данных, я должен эти данные получить из базы
и отправить их тому, кто их запрашивал.

Нет, похоже, ты всё-таки тупишь... Объясняю на пальцах:

1. В твой сервис приходит запрос со списком параметров. Длинным списком. Этот список
приходит в виде потока.
2. Ты этот поток параметров парсишь на отдельные значения.
3. Из этих значений ты формируешь запросы, которые посылаешь Firebird. Много запросов.
4. Полученные от сервера данные ты складываешь в ответ тому, откуда в твой сервис поступил
запрос.

Так вот, пункты 2-4 отлично параллелятся на Х параллельных потоков, в каждом из которых
через отдельный коннект выполняются параллельные запросы на выборку У данных.

В идеале ты можешь начинать отдавать данные ещё до того как тебе полностью пришлют запрос.
Сейчас ты впустую тратишь время ожидая пока целый пакет параметров сложится во временную
таблицу и потом ещё на ожидание пока он целиком обработается. Хотя вместо этого уже мог бы
получать данные и отправлять заказчику.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 84, страница 3 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужен быстрый insert во временную таблицу
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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