Вопрос с собеседования

1. user1302499 22.11.23 09:13 Сейчас в теме
На собеседовании задали вопрос:
Есть 2 справочника оба иерархические. Один ограничен до 7 уровня вложенности, второй неограничен. В обоих одинаковое кол-во элементов. При запросе к элементу находящемуся на 3-ем уровне вложенности, для какого справочника запрос отработает быстрее?

Ответить не смог, сказали домашнее задание, но ответ так и не нашел
По теме из базы знаний
Ответы
Подписаться на ответы Инфостарт бот Сортировка: Древо развёрнутое
Свернуть все
2. RustamZz 22.11.23 09:34 Сейчас в теме
(1) Без разницы. Ограничение вложенности не влияет на структуру таблицы на SQL.
3. SAShikutkin 5 22.11.23 09:58 Сейчас в теме
(2) Стало интересно. Создал 2 справочника. И чтение из неограниченного справочника быстрее !!! (смотрел по тех. журналу). И это очень странно. Т.к. структура хранения и индексы идентичны.

Проверял на файловой базе, возможно на серверной поведение адекватное.
4. RustamZz 22.11.23 10:10 Сейчас в теме
(3) Планы запроса надо смотреть и желательно с количеством записей больше 1000, что бы вместо scan работали seek.
13. SlavaKron 24.11.23 12:45 Сейчас в теме
(3) А как вы поняли что такое "запрос к элементу находящемуся на 3-ем уровне вложенности"? То есть нужно найти элементы 3-го уровня что ли?
starik-2005; +1 Ответить
6. Torin 754 22.11.23 11:09 Сейчас в теме
(1)
При запросе к элементу находящемуся на 3-ем уровне вложенности, для какого справочника запрос отработает быстрее?

Глупый какой то вопрос. Что он оценивает?
7. user856012 13 22.11.23 11:39 Сейчас в теме
(6)
Что он оценивает?
Может быть, адекватность проводящего собеседование?
Teut_Vlad; Sashares; +2 Ответить
9. lefthander 23.11.23 15:35 Сейчас в теме
(1)и не ищите, В практической работе программиста это не имеет значения. Я даже не уверен как знание ответа на это вопрос поможет определить квалификацию самого программиста? ;) Я бы в эту контору не пошел.
5. user-z99999 67 22.11.23 10:11 Сейчас в теме
(1)
Что делает "В ИЕРАРХИИ" в запросе
https://infostart.ru/1c/articles/1091745/

разбор sql

В примере выше мы видели, что платформа сгенерировала несколько запросов для получения элементов на каждом уровне иерархии. Но что, если иерархия будет содержать не 2, 3, 5 уровней, а 10, 20, 50! Чем больше уровней, тем больше запросов будет сформировано.
8. Said-We 23.11.23 15:08 Сейчас в теме
(1) (5) Есть и другой способ обхода иерархического справочника - рекурсивный запрос.
Тут (далекий 2008 год про стандарты 1999 года) описано, когда это примерно появилось в разных SQL.
https://habr.com/ru/articles/43955/

Ниже скрин набросал с условием в иерархии группы 1 (выделил в тексте).
То что делает 1С всё равно ограничено уровнем вложенности. Если до конца дочитать статью, то:
"Влияние на производительность
В примере выше мы видели, что платформа сгенерировала несколько запросов для получения элементов на каждом уровне иерархии. Но что, если иерархия будет содержать не 2, 3, 5 уровней, а 10, 20, 50! Чем больше уровней, тем больше запросов будет сформировано."

У рекурсивного запроса код короче. Если справочник содержит поле уровень, то для глубоких уровней можно ускорить время выполнение, заведомо ограничив выборку.
Нарисовал ограничение рекурсивного запроса максимальным уровнем <10 (t1.maxUr<10), но можно и увеличить. На MS SQL по умолчанию ограничение вложенности примерно 100. На других SQL по разному. Пробовал на SQLite поставить 300 - проглатывает. Но так много не нужно точно.

Время выполнения запроса в общем случае зависит по факту от данных, а не от того какое ограничение стоит у справочника.
В случае с 1С может быть два куска кода. Для справочника без ограничения может сначала определяться фактический максимальный уровень в данных и запрос более этого уровня не строится. В случае если ограничение в справочнике задано, например 7, то сразу его использовать 7 и строить запрос исходя из 7, хотя по факту в справочнике может быть всего 2. Это 1С - можно ожидать чего угодно.

В случае использования рекурсивного запроса всегда определяется данными по факту. А ограничение максимального уровня носит скорее защитный характер от кривых данных. Например в у элемента1 родитель элемент2, а у элемента2 родитель элемент1 и нужно найти все подчиненные элеметну1. Такое в справочнике 1С скорее невозможный вариант, но мало ли. И могут быть не только данные из справочника 1С, а входные откуда-то.

И да, 1С не поддерживает рекурсивные запросы в языке запросов 1С. Но и внутри при обращении к SQL не видел, что бы использовали - может плохо смотрел.
Прикрепленные файлы:
10. starjevschik 23.11.23 17:44 Сейчас в теме
Интересно, что за компания, которой нужны люди, знающие ответ на такой вопрос.
На озоне торгует значками?
11. booksfill 24.11.23 12:16 Сейчас в теме
Если отбросить вариант "ну, мы так видим", то это стандартный вопрос, направленный не на получение верного ответа, а на демонстрируемые умения его находить. О чем намекает фраза "домашнее задание".

Не претендую ни на что умное, но в этом случае можно посмотреть:

- а, вообще, у кандидата есть на его личном компьютере этот самый 1С + СУБД, нет, он не обязан это иметь.
Просто можно, нет не понять, раскидываться понятиями по одному факту, это, мягко говоря, глупо, но только прикинуть вероятность того, что ему вообще интересен 1С.

- умение не теряться, не включать студента: "ну кто его знает, что там 1С делает".
"И, вообще, у меня лапки".

- умение пользоваться тех. журналом, а то и, страшно сказать, профайлером

- умения читать план выполнения запроса

- умение создавать массивы тестовых данных, хотя бы понимать, что не на 100 строках это надо смотреть.
Что кэш надо греть и т.п.

- если позиция на что-то серьезное, то, как пример, посмотреть на то будет ли кандидат умничать про что-то типа hierarchyid (я, кстати, про это понятия не имел, только сейчас нагуглил, но нагуглил же и даже понял как ентим пользоваться :) ).

- а может кандидат предложит более эффективный запрос к иерархическим данным? Заодно можно посмотреть на стиль кодирования.
Или проявит сообразительность и покажет умение пользоваться ChatGPT -уши этого, конечно, вылезут, но в данном случае, это хорошо.

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

Словом, обычная задачка типа "сколько нужно бензоколонок в городе Сплит".
Можно на такой вопрос сразу послать, и вас, возможно, не прогонят просто вместо старшего менеджера по что-то там в носу, предложат должность бухгалтера.
12. Sashares 34 24.11.23 12:40 Сейчас в теме
(11) Имхо, скорее просто нашли какую то узкую особенность в работе платформы в процессе своей работы, и теперь задают вопрос, который нафиг никому не нужен и ответ на который для реальной работы не имеет смысла. То есть ради потешить свое ЧСВ.
starik-2005; +1 Ответить
14. booksfill 24.11.23 12:55 Сейчас в теме
(12)Согласен. Вероятность этого, IMHO, процентов 80, но за оставшиеся 20 можно побороться, если про компанию отзывы хорошие, плюс плюшки. Это уже автору темы решать.
15. starik-2005 3040 24.11.23 14:12 Сейчас в теме
(14)
оставшиеся 20
D 1C сейчас много стало разделения труда. Кто-то оптимизацией занимается, кто-то девопсом (что бы это ни значило в конкретной организации), кто-то разъехался по подсистемам, кто-то остался "фуллстек". Если конторе нужен спец уровня решения проблем производительности, то ему можно такие вопросы задавать, а он может сказать, что давайте профайлер откроем и поглядим. А если это просто кодер-универсал, то ему достаточно задать вопросы о бестпрактис работы с запросами (не злоупотребляйте временными, не соединяйтесь с виртуальными, соединяйтесь по индексам, используйте ВЫРАЗИТЬ для разыменовывания составных полей, ...) и выяснить понимание того, как платформа кеширует объекты (ПолучитьЗначениеРеквизитов против разыменовывания для обращения к свойствам).
Всего должно быть в меру. А задачи для ЧСВ - ну пусть будут, как задачи со звездочкой. А то можно спросить и про хешфункцию. для паролей пользователей 1С, но с какой-то следующей платформы их будет уже больше одного, но знаю, что народ и такое спрашивает)...
17. booksfill 24.11.23 17:55 Сейчас в теме
(15) Мне кажется, но есть вещи, которые любой программист должен понимать, а не следовать им потому, что это the best practices.
Я уже не говорю про то, что на них еще и мода влияет, вспомните как singleton разжаловали в антипатерн (ну да, причины возникли, всякие там сложности с тестированием и многопоточностью, но все же)

Вопрос, где следует остановится, ибо это уже другая ветвь.

Знание, на уровне СУБД, типа и вида блокировок, частоты попадания в индексы, пользования всякими там grep и прочими страшными вещами, умение выгрузить практически не рабочий журнал 1С в elastic ... Ну да, тут можно сказать "я об этом подумаю завтра".

Но вот хотя бы понимать, что такое селективность индекса, какие именно ресурсы задействуют временные таблицы, что происходит с базой при удалении записей из таблиц вне транзакции и с оной и т.п.
Ну это же надо всем, разве нет?

Встречаю постоянно темы:
- мне надо удалить 100500 записей, а оно виснет,
- "а вот какой замечательный запрос сгенерировал ChatGPT", приводя в пример поиск по не индексированному строковому полю/полям, да еще и ненадежный.
16. VmvLer 24.11.23 14:38 Сейчас в теме
Опытный рекрутер в курсе, что многие некоторые программисты склонный впадать в перфекционизм. Это когда необходимо решить задачу бизнеса здесь и сейчас, а он сидит штрифты/рамочки выбирает)

Думаю, это был вопрос на степень перфекционизма. Правильный ответ: по условиям задачи результаты будут практически равны, а если вам нужны теоретические выкладки из профайлера, то давайте обсудим кто мне оплатит время на дополнительные исследования, не существенные для вашего бизнеса.
18. spacecraft 24.11.23 18:09 Сейчас в теме
Я вот не понимаю о чем спорите.
Текст вопроса:
При запросе к элементу находящемуся на 3-ем уровне вложенности, для какого справочника запрос отработает быстрее?

Прямой запрос к элементу. Какая разница, есть у него ограничение уровней иерархии или нет. Да хоть в сравнении с неиерархическим. Запрос к плоской таблице напрямую к ссылке. Вообще не будет разницы.
SlavaKron; FatPanzer_Job; +2 Ответить
19. SlavaKron 24.11.23 20:05 Сейчас в теме
Да понятно, что автор вопроса имел в виду что-то посложнее, плюс автор темы мог не точно передать вопрос. Смысл появляется, если сравнивать методы ПринадлежитЭлементу, ПолноеНаименование, Уровень, что там еще бывает?
Также очевидно, что это случай, озвученный в (12).
Оставьте свое сообщение

Для получения уведомлений об ответах подключите телеграм бот:
Инфостарт бот