powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос иерархических структур в FB 2.5
25 сообщений из 85, страница 2 из 4
Запрос иерархических структур в FB 2.5
    #39793593
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Мне нужен лишь оптимальный способ получения максимально подходящей к сериализации сразу
после выборки структуры данных - как можно меньшим количеством запросов, как можно меньшим
количеством клиентского кода для обработки, как можно более быстрым способом управления
транзакциями.

У тебя всё получится если ты выкинешь требование "как можно меньшим количеством запросов",
ибо от правильно составленных запросов серверу не плохеет. А если откажешься ещё и от "как
можно меньшим количеством клиентского кода" (поскольку кожа на пальцах нарастает быстрее,
чем стирается), то и вообще будет тебе счастье.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793611
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovесли ты выкинешь требование "как можно меньшим количеством запросов",
ибо от правильно составленных запросов серверу не плохеет.

В этом случае, кстати, количество клиентского кода тоже сокращается: ты тупо пишешь
вложенные циклы и сериализуешь результаты простых запросов.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793719
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019m7mИ если очень хочется то строй дерево, однако я-бы просто показал все это в 4-х гридках и не парился.


Вообще, основные вещи, которые мне приходится разрабатывать - десериализовать структуру, хранить ее в БД, сериализовать в другом формате. Сильно упрощенно и образно. Про UI я ничего не говорю. Мне нужен лишь оптимальный способ получения максимально подходящей к сериализации сразу после выборки структуры данных - как можно меньшим количеством запросов, как можно меньшим количеством клиентского кода для обработки, как можно более быстрым способом управления транзакциями.
К сожалению, все это сразу на пальцах объяснить не получается
Ну таки да про UI это я сам додумал
По поводу решения проблемы я полностью согласен с Dimitry Sibiryakov
а уж прислушиваться к его советам или нет это решать тебе
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793787
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakovесли ты выкинешь требование "как можно меньшим количеством запросов",
ибо от правильно составленных запросов серверу не плохеет.


Уважаемый, в текущий момент я планирую параллельную БД для замены горячего участка учетной системы, разработанный вашими товарищами, которым от запросов в цикле не плохеет. Я не могу воспринимать ваши сообщения всерьез.

Основной критерий - это 1 запрос. Все остальное - объем кода и удобство разработки, - вторичны.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793791
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Основной критерий - это 1 запрос.

"Заберите товарища его брак и выдайте другой." (с)

Дай протелепаю: с текущей системе "куча запросов" - не препарированные и ты надеешься что
один непрепарированный запрос будет быстрее кучи препарирваонных?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793816
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Основной критерий - это 1 запрос. Все остальное - объем кода и удобство разработки, - вторичны.
Вот это "Основной критерий - это 1 запрос" и настораживает

зы. У меня создается впечатление что основной критерий-время обработки
но все узкие места "разобраны и вылизаны"
осталось разобраться только с количеством запросов.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793829
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7m,

В целом, практически вся работа с СУБД происходит через сеть - вполне возможно, что кроссдоменно с удаленных площадок. Среднее время на запрос - 5-500 мс. Как советует архитектор выше - делать запросы в цикле, - уже накодили и теперь приходится все просто переписывать. Благо я гибче и инструментов у меня больше. И если задачу синхронизации с БД десятками тысяч insert / update / update or insert я эффективно решаю объединением в execute block скрипты (уменьшая количество запросов в сотник раз), то вот запрос структуры из разных таблиц сделан, на мой взгляд, не очень оптимально. В этом и хотелось бы разобраться глубже.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793915
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019...
Допустим, в БД хранится документ с двумя табличными частями - в трех таблицах соответственно. Задача состоит в запросе списка документов с содержимым всех табличных частей.
...
Всего лишь три запроса, не? А на клиенте разбирать, кому что относится.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793920
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ёёёёё,

Уважаемый, прочитайте ветку от начала до конца, чтобы не повторять уже разобранные мной вопросы
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793921
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019,

и что там у тебя "разобрано"? Сам себе придумал проблем из воздуха и лаешь на всех.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793926
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Благо я гибче и инструментов у меня больше.

Насколько больше? Параметризованные запросы входят в это число?

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

Между "отдельным запросом на каждую ветку иерархии" и "одним запросом на всю иерархию"
лежит вариант "по одному запросу на каждый уровень иерархии". Не вижу в топике чтобы ты
его рассматривал или просто упоминал.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793928
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Среднее время на запрос - 5-500 мс.

А теперь, внимание, вопрос: какая часть этого времени тратится на prepare (отдельно),
execute (отдельно) и fetch (отдельно).
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793931
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovА теперь, внимание, вопрос: какая часть этого времени тратится на prepare (отдельно),
execute (отдельно) и fetch (отдельно).


Вы уже продемонстрировали свой уровень, что еще хотите?
99% этого времени клиент в принципе не тратит, так как весь код асинхронный, однако в разрезе на запрос время уходит на ожидание TCP запроса. Я проводил замеры на небольших update, получил разницу между подготовленными с параметрами и текстовыми со случайными значениями запросами на грани статистической погрешности. Все одиночные запросы я параметризую - не из-за безопасности (нет у меня задач вытаскивать работу с SQL наружу, все запросы программируются), а просто потому что удобнее. Вы промахиваетесь с этой темой.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793936
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mДерево да чтобы в разных узлах была разная структура данных и все это одним запросом

В общем, максимум из темы смог выжать запрос
Код: sql
1.
2.
3.
4.
5.
select ITEMS.ORDER_ID ITEM_ORDER, ITEMS."POSITION" ITEM_POS, WINDOWS.ORDER_ID WIN_ORDER, WINDOWS."POSITION" WIN_POS
from ORDER_ITEMS ITEMS
full join ORDER_WINDOWS WINDOWS on WINDOWS.ORDER_ID = ITEMS.ORDER_ID and
      WINDOWS."POSITION" = ITEMS."POSITION"
order by 1 nulls last, 3 nulls last, 2 nulls last, 4 nulls last  



Пришлось вводить в каждую табличную часть поле POSITION, в котором строки нумеруются от 1 до N для каждого родителя.

Результат

ITEM_ORDERITEM_POSWIN_ORDERWIN_POS111112NULLNULL13NULLNULLNULLNULL21NULLNULL22
обходится двумя параллельными вложенными циклами, по одному на табличную часть - в моем случае ITEMS и WINDOWS. Значение NULL игнорируется. Соответственно, объект на клиенте заполняется в один проход по выборке, запрос один, данных относительно немного, алгоритм прост. В этом примере используется две колонки с ключом, т.к. задачу усложнил и принял возможность пустой табличной части. Можно избавиться от лишних колонок, введя внешний запрос с еще одним join'ом, но надо учитывать производительность.

Ничего более умного не могу придумать
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793942
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Вы уже продемонстрировали свой уровень, что еще хотите?

Чтобы Вы таки продемонстрировали свой. Можете ли Вы точно предугадать сколько
round-trip-ов понадобится для выполнения запроса, или отдаётесь на волю компонент доступа,
которые имеют привычку делать ненужные вызовы? Это очень немаловажная деталь при работе
через сеть с высоким временем пинга.

Раз у вас там упоминалась какая-то репликация, не думали ли Вы поставить локальные зеркала
базы в удалённых филиалах?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793959
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovЧтобы Вы таки продемонстрировали свой.


Не знаю, с чего вы взяли, что я пришел сюда что-то показывать. Я пришел за умным советом. А вы, батенька, даете ужасные советы и пытаетесь троллить, выводя меня на эмоции.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793972
H5N1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Не знаю, с чего вы взяли, что я пришел сюда что-то показывать. Я пришел за умным советом. А вы, батенька, даете ужасные советы и пытаетесь троллить, выводя меня на эмоции.
ну ты нашел место, куда прийти за умным советом. лет 10 наблюдаю за веткой фб, в лучшем случае эти добрые люди советуют убиться о стену

в запрос вникать лень, но на счет тразакции учти, фб не оракл. read committed там не гарантирует консистентного набора. 1 или 4 запроса вернут кашу с одинаковой вероятностью. судя по всему тебе нужна snapshot транзакция и 4 запроса в рамках снепшот транзакции
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39793974
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019В общем, максимум из темы смог выжать запрос
Код: sql
1.
2.
3.
4.
5.
select ITEMS.ORDER_ID ITEM_ORDER, ITEMS."POSITION" ITEM_POS, WINDOWS.ORDER_ID WIN_ORDER, WINDOWS."POSITION" WIN_POS
from ORDER_ITEMS ITEMS
full join ORDER_WINDOWS WINDOWS on WINDOWS.ORDER_ID = ITEMS.ORDER_ID and
      WINDOWS."POSITION" = ITEMS."POSITION"
order by 1 nulls last, 3 nulls last, 2 nulls last, 4 nulls last  




Пришлось вводить в каждую табличную часть поле POSITION, в котором строки нумеруются от 1 до N для каждого родителя.

И теперь если удалится строка из табличной части надо будет заново проводить нумерацию или как?
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39794047
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
H5N1,

Абсолютно верно - выше я этот вопрос озвучил. Либо snapshot с блокированием на запись, либо собирать мусор на версиях. Сложно на самом деле, поэтому вариант нескольких параллельных селектов мне не нравится
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39794050
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mИ теперь если удалится строка из табличной части надо будет заново проводить нумерацию или как?

Да, выходит так. При наличии потребности изменять хранящиеся объекты - придется при таком подходе городить хранимые процедуры для пересчета каждой такой таблицы.
Вообще, я уже ближе подошел к решению в виде разворачивания структуры в таблицу (на примере выше), но до конца пока не получается сделать, как мне бы хотелось. Либо получаю нужные мне NULL и на сдачу лишние столбцы, либо столбец родителя один, но связанные строки дублируются. Как смогу собрать задачу - напишу просьбу помочь составить запрос. Сейчас не смогу точный ТЗ описать.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39794052
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Либо snapshot с блокированием на запись, либо собирать мусор на версиях.

У тебя чисто читающая транзакция. О каких блокировках и мусоре ты говоришь?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39794058
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019m7mИ теперь если удалится строка из табличной части надо будет заново проводить нумерацию или как?

Да, выходит так. При наличии потребности изменять хранящиеся объекты - придется при таком подходе городить хранимые процедуры для пересчета каждой такой таблицы.
Хранимая процедура с использованием явных курсоров позволит отказаться от доп.поля POSITION
superspy2019 Вообще, я уже ближе подошел к решению в виде разворачивания структуры в таблицу (на примере выше), но до конца пока не получается сделать, как мне бы хотелось. Либо получаю нужные мне NULL и на сдачу лишние столбцы, либо столбец родителя один, но связанные строки дублируются. Как смогу собрать задачу - напишу просьбу помочь составить запрос. Сейчас не смогу точный ТЗ описать.
и чует душа моя что результат будет один "широкий" набор со всеми полями из всех таблиц. Не мне судить насколько этот один запрос "лучше" четырех
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39794059
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry SibiryakovУ тебя чисто читающая транзакция. О каких блокировках и мусоре ты говоришь?


Да, я выразился совершенно неправильно, перепутав местами условия. Snapshot транзакция использует версионность и не дает возможность прочитать обновленные после ее старта данные. Именно использование snapshot на чтение вынуждает СУБД хранить версии записей и потом их чистить. Read_committed readonly транзакция не вынуждает собирать версии, но потребует заблокировать нужные записи, иначе нельзя гарантировать консистентность, о чем абсолютно точно сказал H5N1. Причем Firebird (знаю только про 2.5) по умолчанию вопреки канонам использует вариант no_record_version, что приводит к двухфазной блокировке и дает исключение при попытке прочитать неконсистентный набор.

Про все это я уже говорил выше, здесь вынужден повторяться
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39794060
superspy2019
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
m7mХранимая процедура с использованием явных курсоров позволит отказаться от доп.поля POSITION

Я, к сожалению, не умею работать с курсорами и не владею матчастью, никак не могу это прокомментировать.

m7mи чует душа моя что результат будет один "широкий" набор со всеми полями из всех таблиц. Не мне судить насколько этот один запрос "лучше" четырех

Вообще, это классический подход выборки структурированных данных, из уст моего коллеги. Но он вошел в тупик, когда я спросил - что делать, если у одного родителя несколько различных по структуре узлов и каждый узел может быть родителем для других узлов - такой подход не подойдет. И ничего лучше сам придумать пока не могу.
Для нескольких запросов придется задуматься либо над настройкой транзакции, либо получить теоретическую вероятность внезапных проблем с производительностью, БД не маленькая. Либо вовсе извращаться с записью изменением в другую таблицу и синхронным переносом их в основную с клиента - но это уже из серии экзотики.
...
Рейтинг: 0 / 0
Запрос иерархических структур в FB 2.5
    #39794061
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
superspy2019Именно использование snapshot на чтение вынуждает СУБД хранить версии записей и потом их
чистить.

Не вынуждает. Читающая snapshot транзакция версий не создаёт.

superspy2019Read_committed readonly транзакция не вынуждает собирать версии, но
потребует заблокировать нужные записи
Не потребует. Чтение ничего не блокирует.

superspy2019Причем Firebird (знаю только про 2.5) по умолчанию вопреки канонам
использует вариант no_record_version
Firebird использует тот вариант, который ей предписывает разработчик приложения в
Transaction Parameters Block. Причём реально "по умолчанию" это concurrency, то есть
"snapshot".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
25 сообщений из 85, страница 2 из 4
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Запрос иерархических структур в FB 2.5
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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