Переключение на Главную Страницу Страницы: 1 [2] 3  ОтправитьПечать
Очень популярная тема (более 25 ответов) Сравнение скорости ИТЗ и класса группировки ТГ (число прочтений - 13546 )
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #15 - 25. Декабря 2006 :: 11:16
Печать  
kms писал(а) 25. Декабря 2006 :: 11:10:
Потому что это неправильное (неэффективное) использование ИТ.

Тебе никто не мешает выложить свой вариант на базе моего выложенного примера.
В принципе код конечной конфы практически не изменился в части ИТЗ.

Жду твой более оптимизированный вариант.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer && tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #16 - 25. Декабря 2006 :: 11:16
Печать  
Ок, Миша, с тебя эффективный вариант использования ИТЗ.  Подмигивание
Я его написать не мог, ибо не владею ИТЗ в совершенстве.
И еще с тебя сравнение на sql  Подмигивание
  

1&&2&&3
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #17 - 25. Декабря 2006 :: 11:17
Печать  
trad писал(а) 25. Декабря 2006 :: 10:50:
ОФФ
в ходе тестирования заметил, что 'Ё'<'А'

Интересненько. А версия какая?  Подмигивание
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #18 - 25. Декабря 2006 :: 11:26
Печать  
trad писал(а) 25. Декабря 2006 :: 11:16:
Ок, Миша, с тебя эффективный вариант использования ИТЗ.  Подмигивание
Я его написать не мог, ибо не владею ИТЗ в совершенстве.
И еще с тебя сравнение на sql  Подмигивание

Предложение, от которого невозможно отказаться Подмигивание
Сделаю.

У тебя на сайте - это финальный вариант ТГ?
  

De quelle planète es-tu?
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #19 - 25. Декабря 2006 :: 11:37
Печать  
kms писал(а) 25. Декабря 2006 :: 11:17:
trad писал(а) 25. Декабря 2006 :: 10:50:
ОФФ
в ходе тестирования заметил, что 'Ё'<'А'

Интересненько. А версия какая?  Подмигивание

Да, наверно старая.
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #20 - 25. Декабря 2006 :: 11:40
Печать  
kms писал(а) 25. Декабря 2006 :: 11:26:
trad писал(а) 25. Декабря 2006 :: 11:16:
Ок, Миша, с тебя эффективный вариант использования ИТЗ.  Подмигивание
Я его написать не мог, ибо не владею ИТЗ в совершенстве.
И еще с тебя сравнение на sql  Подмигивание

Предложение, от которого невозможно отказаться Подмигивание
Сделаю.

У тебя на сайте - это финальный вариант ТГ?

да
  

1&&2&&3
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #21 - 25. Декабря 2006 :: 11:43
Печать  
trad писал(а) 25. Декабря 2006 :: 11:37:
Да, наверно старая.

Дим, там в свое время мной был добавлен быстрый вариант сортировки для строк, в том числе для строк с обрезкой пробелов и строк без учета регистров.

Причем case insensitive сделан для любых языков, а не только для 1251.
А скорость сравнения без учета регистра и с обрезкой увеличена на порядок.

Имеет смысл использовать последнюю версию из 2.5 или 2.0.3.2 (они идентичны).
Проблема сортировки "Ё, А" там тоже решена.
  

De quelle planète es-tu?
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


я хочу, чтоб сюда проложили
дорогу оттуда...

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #22 - 25. Декабря 2006 :: 21:38
Печать  
trad писал(а) 25. Декабря 2006 :: 11:16:
Ок, Миша, с тебя эффективный вариант использования ИТЗ.  Подмигивание
И еще с тебя сравнение на sql  Подмигивание


ОК, готово.
Я написал свой тест, максимально упрощенный и ориентированный на демонстрацию различных подходов к группировке.

Конкретный результат теста получен на R27 SQL, 1cpp 2.0.3.2 cvs, по справочнику с 7500 элементов.
Цитата:
Простой индекс, родителя нет, без финальной сортировки
ИТ::Группировать(): 00.00.12.422
Обход: 00.00.03.938

Простой индекс, родителя нет, с финальной сортировкой
ИТ::Группировать(): 00.00.12.191
Обход: 00.00.03.971

Простой индекс, родитель есть, без финальной сортировки
ИТ::Группировать(): 00.00.06.567
Обход: 00.00.04.155

Простой индекс, родитель есть, с финальной сортировкой
ИТ::Группировать(): 00.00.07.218
Обход: 00.00.04.016

Внутренний индекс, родителя нет, без финальной сортировки
ИТ::Группировать(): 00.00.06.003
Обход: 00.00.03.605

Внутренний индекс, родителя нет, с финальной сортировкой
ИТ::Группировать(): 00.00.06.078
Обход: 00.00.04.057

Внутренний индекс, родитель есть, без финальной сортировки
ИТ::Группировать(): 00.00.00.988
Обход: 00.00.03.954

Внутренний индекс, родитель есть, с финальной сортировкой
ИТ::Группировать(): 00.00.00.931
Обход: 00.00.04.119

Стандартный тест ТГ
Количество строк ТГ: 7510
ТГ::Сгруппировать(): 00.00.30.386
Обход: 00.00.06.347


Дима, я правильно использую обход ТГ?

По ИТ:
1. Разница для варианта с переданным родителем и без него - очевидна (для SQL - особенно)

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

Кстати, интересно, что на малых объемах данных заметно кеширование объектов движком 1С.
Поэтому в этом случае разница между индексом по представлению и внутр. представлению может быть мала. Но с ростом объемов, процент попадания в кэш падает, и разница в индексации с доступом в БД и без нее становится резко выраженной.

3. Разница между группировкой по представлениям и внутр. представлениям - также не требует комментариев (заметно на серьезных справочниках).

P.S.
Выложите кто-нибудь результаты теста на большом справочнике с нормальным количеством групп.

P.P.S.
Да, использование теста очень простое - на любой конфигурации запустить внешний отчет и нажать кнопку "все тесты".
Нужна любая текущая 1cpp и класс ТаблицаГруппировок.


файл заменен - откорректирован обход ТГ
« Последняя редакция: 26. Декабря 2006 :: 09:51 - kms »  

TGvsIT_1.ert ( 12 KB | Загрузки )

De quelle planète es-tu?
Наверх
 
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #23 - 26. Декабря 2006 :: 05:32
Печать  
ИМХО, Михаил, ты зря вставил работу с таблицей-печатной формой.
Вывод в такую таблицу - это очень ресурсоемкая операция, и поэтому у тебя так мало различается время обхода в различных вариантах Печаль

ИМХО в данном случае тайминг обхода - это недостоверные и неточные данные.
Нам ведь нужна чистая разница обхода группировки ТГ и ИТЗ.

ЗЫ Мы с Димой также сначали шли по подобному пути, только использовали простое Сообщить. Но цифры обхода оказались очень близки. Стоило убрать вывод сообщений, как разница в обходе данных стала очевидной.
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #24 - 26. Декабря 2006 :: 05:37
Печать  
Выложил конфу с нашим вариантом тестирования.
http://www.1cpp.ru/forumfiles/Attachments/Diff_IT_and_TG_2.rar

Сначала нужно заполнить конфу, запустив ExtForms\Генератор.ert,
далее запустить основную обработку ExtForms\Сравнение2.ert
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #25 - 26. Декабря 2006 :: 06:04
Печать  
artbear писал(а) 26. Декабря 2006 :: 05:32:
ИМХО, Михаил, ты зря вставил работу с таблицей-печатной формой.
Вывод в такую таблицу - это очень ресурсоемкая операция, и поэтому у тебя так мало различается время обхода в различных вариантах Печаль

Нам ведь нужна чистая разница обхода группировки ТГ и ИТЗ.

Убрал из твоей обработки работу с таблицей, оставил просто обход и получение данных из группировочной таблицы.
И сразу видна большая разница в обходе ТГ и ИТЗ Улыбка
Цитата:
Простой индекс, родителя нет, без финальной сортировки
ИТ::Группировать(): 00.00.12.287
Обход: 00.00.00.447
Простой индекс, родителя нет, с финальной сортировкой
ИТ::Группировать(): 00.00.13.146
Обход: 00.00.01.686
Простой индекс, родитель есть, без финальной сортировки
ИТ::Группировать(): 00.00.07.782
Обход: 00.00.00.386
Простой индекс, родитель есть, с финальной сортировкой
ИТ::Группировать(): 00.00.06.946
Обход: 00.00.02.365
Внутренний индекс, родителя нет, без финальной сортировки
ИТ::Группировать(): 00.00.06.407
Обход: 00.00.00.411
Внутренний индекс, родителя нет, с финальной сортировкой
ИТ::Группировать(): 00.00.06.829
Обход: 00.00.01.764
Внутренний индекс, родитель есть, без финальной сортировки
ИТ::Группировать(): 00.00.01.248
Обход: 00.00.00.391
Внутренний индекс, родитель есть, с финальной сортировкой
ИТ::Группировать(): 00.00.01.032
Обход: 00.00.01.755
Стандартный тест ТГ
Количество строк ТГ: 27000
ТГ::Сгруппировать(): 00.00.34.494
Обход: 00.00.04.656
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #26 - 26. Декабря 2006 :: 06:12
Печать  
Как можно видеть, финальная сортировка все-таки отнимает довольно значительное время Печаль

Кстати, в наших тестах группировка производится по трем измерениям, для более точного учета.

И нарисовался один баг ИТЗ:
группируем
     ИТЗ.Группировать("Склад: Склад; Товар: &Товар; Док: Док", "Ресурс1,Ресурс2,Ресурс3,Ресурс4");
1) для вложенной группировки по Товарам, если текущая позиция - это группа, нет индексов. Но наверное, это фича Улыбка
2) для них же выборка по обычному/нулевому индексу идет в обратном порядке Печаль
Т.е. сортировка без индексов почему-то идет в обратном порядке.
Это точно баг.
Поэтому в выложенной обработке пришлось для подобных таблиц создавать доп. индекс, т.е. тратить дополнительное, хотя и небольшое время.

ЗЫ У меня в коде в этом месте стоит TODO c комментом
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


Эх, дайте что-нибудь новенькое
да полезное потести

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #27 - 26. Декабря 2006 :: 06:19
Печать  
И если говорить только о сравнении ИТЗ и ТГ, нас интересует вариант с простым индексом, а не по внутреннему индексу.

Остаются такие данные
Цитата:
Количество строк : 27000

Стандартный тест ТГ
ТГ::Сгруппировать(): 00.00.34.494
Обход: 00.00.04.656


Простой индекс, родителя нет, без финальной сортировки
ИТ::Группировать(): 00.00.12.287
Обход: 00.00.00.447

Простой индекс, родителя нет, с финальной сортировкой
ИТ::Группировать(): 00.00.13.146
Обход: 00.00.01.686

Простой индекс, родитель есть, без финальной сортировки
ИТ::Группировать(): 00.00.07.782
Обход: 00.00.00.386


Простой индекс, родитель есть, с финальной сортировкой
ИТ::Группировать(): 00.00.06.946
Обход: 00.00.02.365


Т.е. для большого количества элементов для ИТЗ оптимальный вариант - это "Простой индекс, родитель есть, без финальной сортировки"
  

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #28 - 26. Декабря 2006 :: 08:25
Печать  
artbear писал(а) 26. Декабря 2006 :: 05:32:
ЗЫ Мы с Димой также сначали шли по подобному пути, только использовали простое Сообщить.
не совсем так.
Мы же решили с тобой замер делать без вывода. Вывод я добавил потом, для проверки правильности порятка.
ps
и еще, имхо, вывод в окно сообщений медленней чем в таблицу (из-за отрисовки)
  

1&&2&&3
Наверх
 
IP записан
 
trad
1c++ power user
1c++ donor
1c++ moderator
Отсутствует



Сообщений: 3050
Местоположение: Киров
Зарегистрирован: 23. Мая 2006
Пол: Мужской
Re: Сравнение скорости ИТЗ и класса группировки ТГ
Ответ #29 - 26. Декабря 2006 :: 08:40
Печать  
kms писал(а) 25. Декабря 2006 :: 21:38:
Дима, я правильно использую обход ТГ?
не совсем.
Правильно так:
Код
Выбрать все
	_ВремяИнит();
	Пока _т.Группировка("Номенклатура") =1 Цикл
		_обл1.Текст = _т.Номенклатура;
		_обл2.Текст = _т.Ресурс;
		Если _т.ЭтоГруппа =1 Тогда
			_обл1.ЦветФона(12648447);
			_обл2.ЦветФона(12648447);
		Иначе
			_обл1.ЦветФона(-1);
			_обл2.ЦветФона(-1);
		КонецЕсли;
		_таб.ВывестиСекцию(_секц);
	КонецЦикла;
	_ВремяДан("Обход"); 

  

1&&2&&3
Наверх
 
IP записан
 
Переключение на Главную Страницу Страницы: 1 [2] 3 
ОтправитьПечать