powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Нужен быстрый insert во временную таблицу
25 сообщений из 84, страница 2 из 4
Нужен быстрый insert во временную таблицу
    #40057760
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сомнительно что таблица с 1 полем претендует на реляционную.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057761
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

Эта временная таблица нужна для ORM, когда у него получается запрос с большим количеством условий. Например, чтобы не городить гигантский запрос с where xxx in (...), он загоняет эти значения во временную таблицу и джойнит её с таблицей в запросе. На самом деле таких временных таблиц много. Есть временные таблицы для разных типов данных. И их по 10 штук для каждого типа данных на всякий случай.

Размер 256 был выбран хоть и "от балды", но после внимательного просмотра данных, которые могут участвовать в условиях при генерации запросов через ORM.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057835
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
29.03.2021 13:39, ArtDen пишет:
> Эта временная таблица нужна для ORM.

вот он - корень зла!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057838
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

Тогда для этой таблицы не хватает одного поля "идентификатор сессии" - для того чтобы можно эту таблицу можно было использовать одновременно для нескольких запросов.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057844
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шавлюк Евгений,

Не совсем понял. Таблица же временная. Заполнили, выполнили запрос, а при коммите она автоматом очистилась. Зачем там ещё "идентификатор сессии"?
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057847
Шавлюк Евгений
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen,

Например один и тот же запрос выполнить в соседних окнах. И затем сравнить
у меня это поле есть id_session (заполняется соответствующим генератором), и для всей "порции данных" он одинаковый
Т.е.
Запрос выглядит следующим образом

Код: sql
1.
2.
select t.* from table t
join xxxx x on x.val = t.val and x.id_session = :id_session


В этом случае можно делать подобный select по нескольким полям, пользуясь единственной таблицей

Код: sql
1.
2.
3.
select t.* from table t
join xxxx x1 on x1.val = t.val1 and x1.id_session = :id_session1
join xxxx x2 on x2.val = t.val2 and x2.id_session = :id_session2
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057856
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Шавлюк Евгений,

У меня нету необходимости в "запрос выполнить в соседних окнах. И затем сравнить" ))
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057867
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen
Шавлюк Евгений,

У меня нету необходимости в "запрос выполнить в соседних окнах. И затем сравнить" ))

Давай в топик более полную постановку.

Просто возникает мысль что ты делаешь какой-то антипаттерн.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057870
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
29.03.2021 16:34, mayton пишет:
> Просто возникает мысль что ты делаешь какой-то антипаттерн.

на ORM-е все паттерны анти
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057880
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну почему-же. Для forms-приложений ORM вполне себе подходит. И для тех доменных областей где очень много
описания идет не из бд а из некой третьей системы. В виде DSL.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057889
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonДавай в топик более полную постановку.

Ты что, не веришь, что ему надо выбирать из базы 100 тысяч объектов, заданных произвольным
списком, натыканным пользователем вручную?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057913
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov

maytonДавай в топик более полную постановку.

Ты что, не веришь, что ему надо выбирать из базы 100 тысяч объектов, заданных произвольным
списком, натыканным пользователем вручную?..

ХЗ. Всяко бывает.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057946
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Давай в топик более полную постановку.
Просто возникает мысль что ты делаешь какой-то антипаттерн.

Я не понимаю какую тебе постановку надо. И этот антипатер я не делаю. Он давно уже сделан и работает.
Есть сервак с 3хзвенкой. На нём крутиться наш сервис. Сервис в качестве СУБД по желанию клиента может использовать разные СУБД, в том числе FB. Чаще всего с FB он и используется. Сервак многофункциональный. В том числе для него есть API, чтобы получать данные.
И данные, получаемые от сервиса, и условия запросов могут быть совершенно произвольными (но в рамках объектов ORM). Например: я хочу получить фамилии работников, которые обрабатывали материл по контролю за разработкой со скважин таких-то месторождений, в период такой-то. Или: выдай мне 3-мерные координаты пересечений пласта АС4 со стволами скважин, список скважин такой-то. Или: нужны результаты интерпретации скважин, в частности пористость, список скважин такой-то, список названий методов исследования такой-то ну и плюс дофига всяких вариантов, которые только можно напридумывать. Основной клиент, который пользуется этим сервисом - ещё одна система, которая у меня в организации и разрабатывается.
Причём ни одно значение в эту базу не вбивается вручную. Все данные попадают туда путём индексирования файлов-результатов работы большого количества работников. Этим индексированием тоже занимается наш сервис, который знает как парсить исходные файлы и как распихивать эту инфу по базе.
Просто недавно выяснилось, что количество параметров условий в запросе может быть очень большим (например при просмотре пользователями карты скважин больших месторождений). Из-за этого и был написан пост.

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

В базе скважины не привязаны к месторождениям что для построения этой карты их приходится
все перечислять вручную?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057948
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Могут быть привязаны, могут быть не привязаны, могут быть привязаны хитрым образом. Всё зависит от того, как это было проиндексировано. Это не особо важно. Важно то, что прога, которая показывает карту (и которая частично для отображения карты использует наш сервис), просто запрашивает данные по куче скважин по их уникальному идентификатору, присвоенному нефтяной компанией. И не обязательно это будут скважины одного месторождения. Вроде как возможен вариант, когда на экране будут скважины с разных месторождений, если они умещаются на экране. Я сам не спец по этим картам, отвечаю только за работу с СУБД, индексирование и сетевой протокол для сервиса.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057951
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDenВажно то, что прога, которая показывает карту (и которая частично для отображения карты
использует наш сервис), просто запрашивает данные по куче скважин по их уникальному
идентификатору, присвоенному нефтяной компанией.

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

Так какие у тебя идеи как победить этот "антипатерн"? ))

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

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

mayton,

Основной таблицы нету. Временная таблица может джойниться с любой таблицей из запроса, генерённого ORM, если по ней есть много условий. Мало того, может быть ситуация, когда используется дофига временных таблиц. Они заполняются и джойняться с разными таблицами из 100-этажного запроса. Тут как повезёт.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057969
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen

mayton,

Основной таблицы нету. Временная таблица может джойниться с любой таблицей из запроса, генерённого ORM, если по ней есть много условий. Мало того, может быть ситуация, когда используется дофига временных таблиц. Они заполняются и джойняться с разными таблицами из 100-этажного запроса. Тут как повезёт.

Смотри. До того как ты построил 100-колёсный велосипед. Я не специалист в Firebird. Я вобщем - больше по Ораклу
и то в прошлом. Но я тебе советую взять на вооружение несколько принципов принципа работы с БД.

Первое - в средне-статистической БД 80% нагрузки приходится на SELECT а не на DML операции.
Исходя из этого (почти Паретто-) принципа нужно концентрировать свои усилия не на задачах CTAS или
загрузок а на том как РАЗЛОЖИТЬ данные на продуктовой БД чтобы выборка была мгновенной. Я не верю что в твоей задаче
именно insert является проблемой. Если он - проблема - то это уже очень-очень плохо. Тоесть плохо стало гораздо раньше.

И второе. Данные - должны быть стационарны настолько это возможно. Не нужно их двигать. Уплотнять.
Переосоздавать. Делать временные таблички. Это все - суета. База любит тишину и постоянство. Я не знаю поддерживает
ли FireBird материализовнные представления. Если есть - попробуй.

В случае с твоими динамическими справочниками - создай их 1 раз в жизни и трекай изменения. Создай базовый
набор (штук 5-10) который покроет все интересы. Я убежден - это можно. Все остальные наборы должны быть просто
комбинациями этих базовых.

И еще. Денормализовывать можно. Если это идет на пользу скорости и это подконтрольно.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057974
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton
Первое - в средне-статистической БД 80% нагрузки приходится на SELECT а не на DML операции.
Исходя из этого (почти Паретто-) принципа нужно концентрировать свои усилия не на задачах CTAS или
загрузок а на том как РАЗЛОЖИТЬ данные на продуктовой БД чтобы выборка была мгновенной. Я не верю что в твоей задаче
именно insert является проблемой. Если он - проблема - то это уже очень-очень плохо. Тоесть плохо стало гораздо раньше.

С этим я согласен на 146 процентов.

mayton
И второе. Данные - должны быть стационарны настолько это возможно. Не нужно их двигать. Уплотнять.
Переосоздавать. Делать временные таблички.

А вот с этим не согласен. На то они и временные таблицы, чтобы их заполнять данными и извращаться ради того, чтобы получить то, что тебе нужно ))

mayton
В случае с твоими динамическими справочниками - создай их 1 раз в жизни и трекай изменения. Создай базовый
набор (штук 5-10) который покроет все интересы

А вот это я совсем не понял. Что за динамические справочники и как они могут помочь.
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057975
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ArtDen

А вот это я совсем не понял. Что за динамические справочники и как они могут помочь.

У тебя дальше после многоточия что идет?

Код: sql
1.
create global temporary table xxxx ...



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

нет конечно. Firebird такого не поддерживает. У нас GTT это таблица с постоянными метаданными, её не надо каждый раз пересоздавать
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057977
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton, ты лучше суть объясни того, что сказать хотел. А временные таблицы для строк конкретно под FB в моём случае создаются запросами типа

Код: sql
1.
2.
3.
4.
5.
CREATE GLOBAL TEMPORARY TABLE TMP_S_0
(
  VAL Varchar(256) NOT NULL,
  UNIQUE (VAL)
) on commit delete rows;
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057979
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну ты насоздавал таблиц TMP_S_0, TMP_S_2 и так далее. И у тебя каждый пользователь захватывает по табличке. Верно?
...
Рейтинг: 0 / 0
Нужен быстрый insert во временную таблицу
    #40057980
ArtDen
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton,

Ты ничего не понял. Параллельно в разных транзакциях могут заполняться и использоваться и одни и те же временные таблицы. Например:
1-я транзакция использует TMP_S_0
2-я транзакция использует TMP_S_0, TMP_S_1, TMP_S_2, TMP_S_3, TMP_S_4, TMP_S_5 + временные таблицы для других типов данных
3-я транзакция использует TMP_S_0, TMP_S_1
4-й транзакции повезло, т.к. условий в запросе к сервису мало и все они влезли в текст SQL
5-я ... и т.д.

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


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