Имя: Пароль:
1C
 
Объектная и табличная модель
0 DexterMorgan
 
07.11.15
19:36
Спорю кароче с одним нубом, по поводу какой способ обращения лучше использовать для чтения (измеение не требуется). Блин не могу найти пруфов 1совских, что запросом получить данные из регистра сведений быстрее, чем набор создавать, дайте пруфов =)
З.Ы. 1с дома нету, скрины замеров с терминала человека не убеждают, нужно что то железобетонное=)
З.Ы. да,да, "в интернете кто-то неправ" =)
1 Dен
 
07.11.15
19:43
Какие аргументы у обоих сторон, кроме "не верю"?
2 Горогуля
 
07.11.15
19:43
не дам. бывало, одна обработка (писаная как раз под это сравнение) на разных машинах по-разному показывала. на моей разница была в 10-20 мс (цикл до 10000 вроде)
3 Garykom
 
гуру
07.11.15
19:45
(0) Может нуб то не тот?
4 Остап Сулейманович
 
07.11.15
19:47
(3) +100
http://its.1c.ua/db/metod81u#content:8020500:hdoc
"При использовании запроса вся считанная информация передается на клиентский компьютер и размещается в оперативной памяти. Если требуется обработать очень большие объемы информации, то можно рекомендовать использовать выборку. Выборка не предоставляет широких возможностей по отбору и упорядочиванию информации и считывает все поля и табличные части объектов, но зато она выполняет считывание порциями и, соответственно, может использоваться для обработки любых объемов данных без помещения их в оперативную память.

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

С точки зрения поиска объектов (ссылок на объекты) по простым условиям (по коду, по наименованию и т.д.) использование запроса и методов менеджеров объектов (НайтиПоКоду() и др.) не имеют существенных отличий по реализации с точки зрения платформы. Методы менеджеров имеет смысл использовать, если выполняются именно одиночные операции поиска. Основным преимуществом методов менеджеров является краткость записи в модуле. Если необходимы сложные условия или поиск нескольких объектов, то необходимо использовать запрос."
5 DexterMorgan
 
07.11.15
20:02
(4) Так кто спорит то, я про тоже. Сравнивается типа такого

Набор = РегистрыСведений.РегистрСведенийДляТеста.СоздатьНаборЗаписей();
Набор.Отбор.Номенклатура.Установить(Номенклатура);
Набор.Прочитать();

И запросом
6 DexterMorgan
 
07.11.15
20:03
(5) относится и к (2), (3)
7 Остап Сулейманович
 
07.11.15
20:05
(5) А зачем вам для чтения НаборЗаписей? Выборка же проще и по рекомендациям быстрее?
8 DexterMorgan
 
07.11.15
20:05
(7)  Я понимаю. Дай пруф на рекомендации!!
9 DexterMorgan
 
07.11.15
20:07
то, что я объясняю - это типа мое мнение и я типа нуб. Нашел древнюю ссылку с сайта 1С - она древняя, другая не от 1С и тд
10 Остап Сулейманович
 
07.11.15
20:08
+ (7) Ну типа такого
Отбор = Новый Структура("Номенклатура", Номенклатура);
Выборка = РегистрыСведений.РегистрСведенийДляТеста.Выбрать(,Отбор);
Пока Выборка.Следующий() ...

По рекомендациям - самый оптимальный вариант.
11 DexterMorgan
 
07.11.15
20:10
(10) ...да это понятно, я не могу найти эти рекомендации
12 ДенисЧ
 
07.11.15
20:11
(11) запусти отладчик и щамер производительности.
А потом бегом на рынок, за гУсем.
13 H A D G E H O G s
 
07.11.15
20:14
Запрос быстрее или одинаков по времени с объектами всегда.
14 su_mai
 
07.11.15
20:16
(0) Быстрота относительное понятие: смотря какая база, смотря какие индексы. Короче либо Profiler SQL, либо Технологический журнал 1С, вам в помощь.
15 Остап Сулейманович
 
07.11.15
20:17
(11) В (4) ссылка и цитата.

Ссылка сюда : ИТС -> Главная -> Разработка и администрирование -> Методическая поддержка -> В каких случаях использовать Ссылку, Запрос, Выборку, Объект.

Могу выложить полную цитату. Если ИТС-а нет.
16 ДенисЧ
 
07.11.15
20:22
(15) Это яркий пример выражения "угадал все буквы, но не смог прочитать слово"...
17 su_mai
 
07.11.15
20:24
(15) Хорошая ссылка все описано доходчиво.
18 DexterMorgan
 
07.11.15
20:30
(15) дай пожалуйста, очень выруччишь
19 su_mai
 
07.11.15
20:31
(18) К сожалению сам не читал, знакомый рассказывал :)....
Ну в общем ты понимаешь.... :)
20 DexterMorgan
 
07.11.15
20:32
(13) очень сомневаюсь, что может быть одинаков, ведь в объектной модели тратится время на создание объекта + его чтение. в таб модели только чтение.
21 ДенисЧ
 
07.11.15
20:32
(18) Я тебе открою великую тайну...
На сайте итс есть пробная подписка. Безвоздмездно. На 7 дней.
А так... Хочешь тебе продам ИТС? ))
22 Остап Сулейманович
 
07.11.15
20:33
(20) Проси модератов спрятать в спойлер.

"1С:Предприятие 8 содержит несколько способов получения одних и тех же данных. Для объектных сущностей (Справочников, Документов и т.д.) данные могут считываться с помощью ссылки, запроса, выборки и объекта. Подробно отличия ссылки, выборки и объекта описаны в разделе "Особенности использования типов данных, предназначенных для манипулирования объектами базы данных". В этом разделе мы дадим некоторые рекомендации, когда следует использовать какой способ доступа.

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

Еще одним преимуществом запроса является возможность однократного считывания всей требуемой информации из нескольких связанных таблиц. То есть если нужно считать данные нескольких объектов или получить данные из других таблиц, связанных с объектами, то использование запроса будет эффективнее, чем несколько отдельных обращений к различным данным. Здесь важно заметить, что, с точки зрения производительности, существенным является не только объем считываемой информации, но и количество обращений к базе данных, так как каждое обращение влечет дополнительные "накладные" расходы.

Однако запрос будет выполнять считывание из базы данных при каждом вызове. Соответственно, при многократном обращении к одним и тем же данным будет выполняться многократное считывание. Этого можно избежать, обращаясь к свойствам ссылки. В этом случае используется кэширование объектов и в определенном интервале времени при повторном обращении к данным объекта не будет выполняться повторное считывание. Но следует учитывать, что обращение к любому полю через ссылку приведет к полному считыванию объекта (включая все поля и все табличные части). Соответственно, ссылку можно использовать для многократного обращения, если считывание объекта целиком не может его существенно замедлить. Например, получение признака "Проведен" у документа через ссылку приведет к считыванию в том числе и его табличной части. Если у документа табличная часть может иметь несколько сотен строк, то лучше воспользоваться запросом.

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

Отдельно следует отметить возможность использования кэширования представлений. Если, например, необходимо получить представление элемента справочника, то эффективнее не обращаться через ссылку к наименованию, а преобразовать ссылку к строке. В этом случае будет использоваться специальный механизм получения представлений (так же с кэшированием) и если представления объекта еще нет в кэше, то объект не будет считываться целиком, а будут считываться только поля, необходимые для получения представления.

Если необходимо получить перечень объектов для отображения их на экране или вывода на печать, то эффективнее получать представления с помощью объекта "Запрос", а не ориентироваться на автоматическое получение представления при преобразовании ссылки к строке. Например, при выводе отчета о продажах в табличный документ достаточно легко допустить серьезную ошибку с точки зрения производительности, если выводить в табличный документ ссылки на товары. Отчет будет построен правильно, так как система автоматически преобразует ссылки к строке. Однако это преобразование при сотнях и тысячах строк может замедлить формирование отчета в несколько раз. Более правильным будет получение представлений непосредственно в запросе и вывод в табличный документ уже полученного представления в виде строки.

Аналогичным примером может являться отображение результатов запроса в форме путем выгрузки в таблицу значений или дерево значений. Если в ячейках табличного поля выводятся колонки, содержащие ссылки, то просмотр таблицы значений может существенно замедляться при многопользовательской работе. Это будет негативно сказываться и на работе конкретного пользователя, и на работе всей системы в целом. Можно рекомендовать также получать и ссылки, и их представления с помощью запроса и организовывать отображение информации в табличном поле таким образом, чтобы текст ячеек брался бы из колонок, содержащих только примитивные типы.

Однако следует учитывать, что обращение к представлениям ссылок при просмотре таблицы значений пользователем будет выполняться по мере отображения строк, а при получении представлений запросом они будут получаться по всем строкам сразу. В то же время, если будет выполняться поиск по таблице значений, то будут выбираться представления для всех строк (но по отдельности) и это будет существенно менее эффективно, чем единовременное получение представлений запросом.

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

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

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

С точки зрения поиска объектов (ссылок на объекты) по простым условиям (по коду, по наименованию и т.д.) использование запроса и методов менеджеров объектов (НайтиПоКоду() и др.) не имеют существенных отличий по реализации с точки зрения платформы. Методы менеджеров имеет смысл использовать, если выполняются именно одиночные операции поиска. Основным преимуществом методов менеджеров является краткость записи в модуле. Если необходимы сложные условия или поиск нескольких объектов, то необходимо использовать запрос. "
23 DexterMorgan
 
07.11.15
20:33
вообще то там уже был самозаовн, когда он выложил его скрины замеров, где выделил, что Прочитать() по времени быстрее запрос.выполнить(). Но по общему времени на сервере  все понятно
24 DexterMorgan
 
07.11.15
20:34
(22) Спасибо, бро
25 DexterMorgan
 
07.11.15
20:38
(21) Заюзал уже на 5 почтах, влом создавать новую, каюсь
26 ДенисЧ
 
07.11.15
20:39
(25) Купи себе легальную подписку! Продам!
27 zak555
 
07.11.15
20:40
(25) давай сейчас 30ку и получи доступ
28 H A D G E H O G s
 
07.11.15
20:42
(22) Блаблабла. Вы просто не погружались в ньюансы.
29 su_mai
 
07.11.15
21:13
(0) Не стоит забывать про ограничение доступа на уровне записей, так как оно добавляет соответствующие запросы и если поле имеет составной тип данных, то в общем случае будет соединение со всеми таблицами соотв. типов. В объектной модели нет возможность выполнить приведение типа поля к требуемому типу, по этому количество запросов будет соответствовать количеству типов в составном типе. При использовании табличной модели можно выполнить приведение типа поля к нужному типу, тогда запросов получается меньше.
30 DexterMorgan
 
07.11.15
21:30
(28) Ты может не (22) писал а (20) ? Ну так просвети эти нюансы, ты нубом что ли не был. Чет ты зазвездился совсем, корона не мешает?
31 su_mai
 
07.11.15
21:44
(30) Ньюансы в Тех. журнале и SQL Profiler'е
32 DexterMorgan
 
07.11.15
22:37
(31) Так что смотреть то? Говорим, что в каких то случаях получение данных табличной и объектной моделью может быть одинаково. Так в каких вопрос? Создание скажем наборы - время + чтение набора время. В запросе же только чтение (остальное не существенно)
Ну так подскажи, что и как сравнить, а инструменты я найду как протестить
33 Armando
 
07.11.15
23:53
Не забывайте, что метод набора записей Прочитать() устанавливает разделяемую упр блокировку. Т.е. если данные будут заблокированы, то запросом их можно прочитать, а набором уже нет.
Закон Брукера: Даже маленькая практика стоит большой теории.