Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 8 ... 10 ОтправитьПечать
Очень популярная тема (более 25 ответов) к вопросу быстродействия индексированных таблиц. (число прочтений - 57215 )
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #75 - 31. Января 2007 :: 12:33
Печать  
Цитата:
Нормальная схема?
vlf, что скажешь, подобная схема соответствует твоему алгоритму?

Пробовал - результат отрицательный.
1. Тратится (пусть и 1 раз) много времени на создание таблицы 1.
2. Основное время у меня в цикле.

Вот например, общее время обработки 1 позиции 46974мс, из них цикл 46252мс.
Смысл с бубнами плясать?

---------------------------------------------

Алгоритм для нескольких колонок, прост до смешного:
Создаем новую колонку "ключ", туда пишем что-то вроде
""+ТЗ.Колонка1.код+","+ТЗ.Колонка2.код.
Понятно, что в каждом случае, алгоритм такого ключа свой.
тз.Сортировать("ключ");

далее, наш добрый алгоритм.


« Последняя редакция: 02. Февраля 2007 :: 10:58 - vlf »  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #76 - 31. Января 2007 :: 12:36
Печать  
vlf писал(а) 31. Января 2007 :: 12:33:
Пробовал - результат отрицательный.
1. Тратится (пусть и 1 раз) много времени на создание таблицы 1.
2. Основное время у меня в цикле.

Вот например, общее время обработки 1 позиции 46974мс, из них цикл 46252мс.
Смысл с бубнами плясать?

1) Это ты к чему? я не понял
2) предложенная мной простая схема сравнения тебя устраивает? соответствует твоему алгоритму?
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #77 - 31. Января 2007 :: 12:43
Печать  
Извини, не понял.
Ты желаешь тестить?
Зачем?

ADirks :
Цитата:
Ещё раз: Индексированнаятаблица::ВыбратьСтроку() и ТаблицаЗначений::ПолучитьСтрокупономеру() - это НЕ аналоги!  Аналогом будет ИТ.НомерСтроки = 10; Естественно, в ИТ эта операци медленнее чем в ТЗ.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #78 - 31. Января 2007 :: 12:47
Печать  
vlf писал(а) 31. Января 2007 :: 12:43:
Извини, не понял.
Ты желаешь тестить?
Зачем?

ADirks :
Цитата:
Ещё раз: Индексированнаятаблица::ВыбратьСтроку() и ТаблицаЗначений::ПолучитьСтрокупономеру() - это НЕ аналоги!  Аналогом будет ИТ.НомерСтроки = 10; Естественно, в ИТ эта операци медленнее чем в ТЗ.

1) ВыбратьСтроку() - это ты откуда-то взял, вот тебе и начали отвечать Печаль
в алгоритмах используется же ПолучитьСтроку()

2) Не верю я, что ИТЗ проигрывает ТЗ на больших данных при использовании обычной сортировки в ТЗ и использовании простого поиска по такой ТЗ, а не, например, двоичного и т.п. поиска Печаль
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #79 - 31. Января 2007 :: 12:59
Печать  
Согласен. Третий день уже.
Код ПолучитьСтроку()
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
АЛьФ
FormEx developer
1c++ developer
Отсутствует



Сообщений: 1538
Местоположение: Санкт-Петербург
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #80 - 31. Января 2007 :: 13:02
Печать  
А может все же...
Код
Выбрать все
BOOL CVTExtended::funcNextRow(CValue& RetVal, CValue** params)
{
	CVTExtIndex *Index = GetIndex(params[0]);
	bool bUnique = params[1]->GetNumeric() != 0L;

	if( Index->Next(bUnique) )
		RetVal = 1L;
	else
		RetVal = 0L;
	SetCurrentRow(Index);

	return TRUE;
}
 

  

FormEx developer
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #81 - 31. Января 2007 :: 13:03
Печать  
vlf писал(а) 31. Января 2007 :: 12:59:
Согласен. Третий день уже.
Код ПолучитьСтроку()
Цитата:
BOOL CV7LogProvider::GetLine(CValue& Result, CValue** ppValue)

Что-то я тебя все больше не понимаю !! Печаль
Ты приводишь код провайдер журнала регистрации для ТП, а не  код ПолучитьСтроку из ИТЗ Печаль

Итого: ты согласен с тем, что ИТЗ на больших данных в любом случае быстрее ТЗ ?
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #82 - 31. Января 2007 :: 13:06
Печать  
Спасибо Альф

Искать код в спешке ...
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #83 - 31. Января 2007 :: 13:07
Печать  
artbear писал(а) 31. Января 2007 :: 13:03:
Итого: ты согласен с тем, что ИТЗ на больших данных в любом случае быстрее ТЗ ?

И даже, если используем оптимальный алгоритм для ТЗ, при использовании оптимального алгоритма для ИТЗ - и алгоритмы не обязаны совпадать !
Согласен?
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #84 - 31. Января 2007 :: 13:22
Печать  
Я изучал код....
Да достаточно оптимально:
Взяли индекс, нашли след позицию из связанного списка, установили текущий указатель.
Я начинаю сомневаться....

Ладно, мое предложение, как тестируем.
1. Не тестируем всю подготовку - там все ясно, ИТЗ в разы лучше.
2. Таблица 1 (исходная) должна быть очень большой и ... нетривиальной.
в остальном согласен с artbear.

Удачи, жду результатов

Передаю эстафету, кому-нибудь другому

Проверил свой код, на всякий случай  Смущённый, все мерилось правильно Язык
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #85 - 31. Января 2007 :: 13:31
Печать  
vlf писал(а) 31. Января 2007 :: 13:22:
2. Таблица 1 (исходная) должна быть очень большой и ... нетривиальной.

Уточняю:
1) таб.1 это таблица, по которой идет тупой перебор и значения из которой ищутся в таблице 2, верно?
2) Что значит нетривиальной? сортировка не полю поиска? или как?
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #86 - 31. Января 2007 :: 13:41
Печать  
давай так
ТГИ - таблица, где ищем
ТЧ - таблица, что ищем.

ТГИ - большая и не "тривиальная", т.е содержит МногО  альтернатив для ТЧ (какой я честный)

и много строк для каждой "альтернативы" (>300).


Мне тоже интересно, что бы код быстрее работал.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #87 - 31. Января 2007 :: 14:01
Печать  
vlf писал(а) 31. Января 2007 :: 13:41:
и много строк для каждой "альтернативы" (>300).

1) Это ты про ТЧ?
2) Разве в ТГИ не должны быть только уникальные значения?
  

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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #88 - 31. Января 2007 :: 14:10
Печать  
Кажется опять на разных языках разговариваем.
Путь в ТЧ у нас ИВАН
в ТГИ у нас должно быть
Иван иванов
Иван петров
иван сидоров
и таких иванов для теста 300 шт.

В то же время должны быть Петры с со своими фамилиями
Ильи со своими фамилиями
и т.д.

Иван - это ключ
Фамилия - вторая колонка.
  

... истина всегда где-то рядом ...
Наверх
www  
IP записан
 
artbear
1c++ developer
1c++ moderator
Отсутствует


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

Сообщений: 6303
Местоположение: Москва
Зарегистрирован: 19. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #89 - 01. Февраля 2007 :: 05:04
Печать  
Сделал тест.
Твоего ответа на 300 совпадений не видел Печаль
Поэтому совпадений меньше Улыбка

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

Цитата:
ТЗ1.КоличествоСтрок() = <10000>
ИТЗ1.КоличествоСтрок(ТоварУникальный) = 4924


ТЗ_ПолучитьСтрокуПоНомеру (время/количество)-
     ТЗ.ПолныйЦикл - 18328 (1)
           1 ТЗ.НайтиЗначение - 13997 (10000)
           2 ТЗ.ПолучитьСтрокуПоНомеру - 1065 (35494)
     ТЗ2.Сортировать - 17 (1)

ТЗ_ПолучитьЗначение (время/количество)-
     ТЗ.ПолныйЦикл - 17220 (1)
           1 ТЗ.НайтиЗначение - 12812 (10000)
           2 ТЗ.ПолучитьЗначение - 1238 (35494)
     ТЗ2.Сортировать - 17 (1)

ИТЗ (время/количество)-
     ИТЗ.ПолныйЦикл - 4355 (1)
           1 ИТЗ.УстановитьФильтр_ВыбратьСтроки_ПолучитьСтроку - 1291 (10000)
           2 ИТЗ.ПолучитьСтроку - 1234 (35498)
     ИТЗ.ДобавитьИндекс - 43 (1)

ИТЗ_ПовторнаяВыборкаВнутриЦикла (время/количество)-
     ИТЗ.ПолныйЦикл - 6038 (1)
           1 ИТЗ.УстановитьФильтр_ВыбратьСтроки_ПолучитьСтроку - 1291 (10000)
           2 ИТЗ.ПолучитьСтроку - 1207 (35498)
           повторная выборка ИТЗ.УстановитьФильтр_ВыбратьСтроки_ПолучитьСтроку - 1193 (10000)
           3 ИТЗ.ПолучитьСтроку - 330 (10000)
     ИТЗ.ДобавитьИндекс - 43 (1)
====================

Итоговое сравнение (время/количество)-
     ПроверитьТЗ_ПолучитьСтрокуПоНомеру - 21967 (1)
     ПроверитьТЗ_ПолучитьЗначение - 20888 (1)
     ПроверитьИТЗ_ПовторнаяВыборкаВнутриЦикла - 9688 (1)
     ПроверитьИТЗ - 8132 (1)


Цитата:
ТЗ1.КоличествоСтрок() = <27000>
ИТЗ1.КоличествоСтрок(ТоварУникальный) = 9261


ТЗ_ПолучитьСтрокуПоНомеру (время/количество)-
     ТЗ.ПолныйЦикл - 106764 (1)
           1 ТЗ.НайтиЗначение - 90983 (27000)
           2 ТЗ.ПолучитьСтрокуПоНомеру - 4265 (137584)
     ТЗ2.Сортировать - 57 (1)

ТЗ_ПолучитьЗначение (время/количество)-
     ТЗ.ПолныйЦикл - 107572 (1)
           1 ТЗ.НайтиЗначение - 91704 (27000)
           2 ТЗ.ПолучитьЗначение - 4980 (137584)
     ТЗ2.Сортировать - 58 (1)

ИТЗ (время/количество)-
     ИТЗ.ПолныйЦикл - 15400 (1)
           2 ИТЗ.ПолучитьСтроку - 4816 (137592)
           1 ИТЗ.УстановитьФильтр_ВыбратьСтроки_ПолучитьСтроку - 3581 (27000)
     ИТЗ.ДобавитьИндекс - 129 (1)

ИТЗ_ПовторнаяВыборкаВнутриЦикла (время/количество)-
     ИТЗ.ПолныйЦикл - 19851 (1)
           2 ИТЗ.ПолучитьСтроку - 4717 (137592)
           1 ИТЗ.УстановитьФильтр_ВыбратьСтроки_ПолучитьСтроку - 3451 (27000)
           повторная выборка ИТЗ.УстановитьФильтр_ВыбратьСтроки_ПолучитьСтроку - 3331 (27000)
           3 ИТЗ.ПолучитьСтроку - 957 (27000)
     ИТЗ.ДобавитьИндекс - 123 (1)
====================

Итоговое сравнение (время/количество)-
     ПроверитьТЗ_ПолучитьЗначение - 111842 (1)
     ПроверитьТЗ_ПолучитьСтрокуПоНомеру - 111452 (1)
     ПроверитьИТЗ_ПовторнаяВыборкаВнутриЦикла - 24443 (1)
     ПроверитьИТЗ - 19817 (1)


для ТЗ две проверки - с ПолучитьСтрокуПоНомеру и просто ПолучитьЗначение
для ИТЗ также две проверки - простая выборка и повторная выборка после поиска

Итого - чем больше нужно искать, тем ИТЗ быстрее.
А если еще использовать уникальность при поиске, то ИТЗ даст еще больше выигрыша


PS выложена пустая конфа с нужными классами и обработками.
Для ее использования нужно сначала зайти в Конфигуратор и создать структуру таблиц, пересохранив конфу.
Далее запускаем Предприятие, генерим нужные данные (Генератор.ерт) и запускаем сравнение (Сравнение.ерт)
  

Diff_ITZ_and_TZ.rar ( 50 KB | Загрузки )

OpenConf developer :: http://openconf.1cpp.ru&&FormEx developer :: http://formex.dorex.ru&&1C++ active developer &amp;&amp; tester :: www.1cpp.ru
Наверх
GTalkSkype/VoIPICQ  
IP записан
 
Переключение на Главную Страницу Страницы: 1 ... 4 5 [6] 7 8 ... 10
ОтправитьПечать