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



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #60 - 31. Января 2007 :: 09:11
Печать  
kms писал(а) 31. Января 2007 :: 08:56:
1. Интерес и микроисследованиям затрат на выборку в условиях сортированного списка, думаю, незначителен или немного меньше. Все же это на самые распространенные условия.


ничего не понял

kms писал(а) 31. Января 2007 :: 08:56:
2. Признайся честно, ты ведь не заинтересован в том, чтобы услышать, ты заинтересован в том, чтобы сказать. Соответственно, формируется и аудитория.


Скорее третье.

kms писал(а) 31. Января 2007 :: 08:56:
Метамоделировать придется?


Что такое метамоделировать?
В моем случае, прямым запросом создается таблица SLOVLEKS, прямым запросом наполняется, в класе выбирается.
Это словарь лексем. Размерность? - n*m - где n - размер номенклатурного справочника, m - число известных слов (термов). Сколько там строк?

Цитата:
Можно привести пример оптимального алгоритма, в котором поиск выполняется по двум (а по 10?) колонкам (составной индекс), в котором ИТ проигрывает на любых данных?


Мне кажется, это вопрос другой ветки.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #61 - 31. Января 2007 :: 09:16
Печать  
vlf писал(а) 31. Января 2007 :: 09:11:
ничего не понял

Время сортировки и построения индекса огласи.

Цитата:
Сколько там строк?

Издеваешься? Летели m крокодилов, нет m мало, пусть будет х. Число строк в исходных таблицах огласи.

И плз, учитывай, что я код не видел. Ориентируюсь только на то, что опубликовано здесь.

Цитата:
Цитата:
Можно привести пример оптимального алгоритма, в котором поиск выполняется по двум (а по 10?) колонкам (составной индекс), в котором ИТ проигрывает на любых данных?


Мне кажется, это вопрос другой ветки.

Почему? Тема ветки вполне подходящая.
Или все же не "к вопросу быстродействия", а к "конкретному вопросу быстрдействия"?
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #62 - 31. Января 2007 :: 09:18
Печать  
vlf писал(а) 31. Января 2007 :: 09:12:
Код
Выбрать все
Спасибо за сигнал, это безобразие, какая-то светомаскировка.
Если еще что обнаружишь из непотребного - обращайся.
 



Но мы же договорились ?

Ну, шутка нада Улыбка
Как тебе еще объяснить, что этот код никакого отношения к теме не имеет?

P.S.
Кстати, ты прав, кто-нибудь прочитает и ведь поверит Ужас
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #63 - 31. Января 2007 :: 09:20
Печать  
vlf писал(а) 31. Января 2007 :: 09:00:
Код ИТЗ не может быть быстрее ПолучитьСтрокуПоНомеру() !!!
Код
Выбрать все
BOOL CVTExtended::funcChooseLine(CValue& RetVal, CValue** params)
вызывает
функцию своего класса
::CallAsFunc(VT.GetContext(), "ChooseLine", RetVal, pParams);
 



Код
Выбрать все
bool CallAsFunc(CBLContext* pContext, char const* sFuncName, CValue& RetVal, CValue** ppParams)
{
	int nMethod = pContext->FindMethod(sFuncName);
	int res = pContext->CallAsFunc(nMethod, RetVal, ppParams);
	//Msg("%s: %i =  %i", sFuncName, nMethod, res);
	return res != 0;
}
 



а что у нас в  pContext ? 

гм..

     CValue VT;
     VT.CreateObject("ValueTable");

Что у нас "ValueTable" ?


Это ты мальца не туда посмотрел.  Это метод ВыбратьСтроку().
В ИТ нет отдельного метода ПолучитьСтрокуПоНомеру(), есть свойство НомерСтроки, доступное на как на чтение, так и на запись (см. propSetCurrentRow()).
  
Наверх
 
IP записан
 
vlf
Junior Member
**
Отсутствует



Сообщений: 94
Зарегистрирован: 27. Января 2007
Re: к вопросу быстродействия индексированных табли
Ответ #64 - 31. Января 2007 :: 09:26
Печать  
Цитата:
Это метод ВыбратьСтроку().

Точнее Индексированнаятаблица.ВыбратьСтроку()
которая медленнее
ТаблицаЗначений.ПолучитьСтрокупономеру()

Цитата:
В ИТ нет отдельного метода ПолучитьСтрокуПоНомеру(), есть свойство НомерСтроки, доступное на как на чтение, так и на запись (см. propSetCurrentRow()).

ИМХО  код ТЗ также меняет НомерСтроки.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #65 - 31. Января 2007 :: 09:30
Печать  
Так это понятно, ИТ нужно создать итератор, и т.д., а в ТЗ - это просто перемещение на запись.
Что тут поделаешь - это бай дизайн.
  

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


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #66 - 31. Января 2007 :: 09:34
Печать  
Я ж тебе и говорю: да, твоя задача, наверное, уникальна - ты счастливый человек, но случай этот нетипичен.

А попробуй взять таблицу (ИТ и ТЗ) на 100000 строк и замерить время поиска конкретных значений из начала, середины и конца этой таблицы.
Результаты довольно интересные.
  

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


А нужны ли мы нам?

Сообщений: 692
Местоположение: Новосибирск
Зарегистрирован: 22. Мая 2006
Пол: Мужской
Re: к вопросу быстродействия индексированных табли
Ответ #67 - 31. Января 2007 :: 09:52
Печать  
Цитата:
Точнее Индексированнаятаблица.ВыбратьСтроку() 
которая медленнее
ТаблицаЗначений.ПолучитьСтрокупономеру() ...

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

kms писал(а) 31. Января 2007 :: 09:34:
А попробуй взять таблицу (ИТ и ТЗ) на 100000 строк и замерить время поиска конкретных значений из начала, середины и конца этой таблицы.
Результаты довольно интересные.

Только нужно всё же учитывать, что время на построение индекса тоже нужно. И при таких размерах весьма ощутимое. Кстати, сортировка ТЗ + дихотомический поиск, реализованные на языке 1С начиная с 5000 - 6000 строк уже дают выигрыш в поиске строки!
  
Наверх
 
IP записан
 
kms
1c++ power user
1c++ moderator
Отсутствует


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

Сообщений: 4632
Зарегистрирован: 19. Мая 2006
Re: к вопросу быстродействия индексированных табли
Ответ #68 - 31. Января 2007 :: 10:01
Печать  
ADirks писал(а) 31. Января 2007 :: 09:52:
Только нужно всё же учитывать, что время на построение индекса тоже нужно. И при таких размерах весьма ощутимое. Кстати, сортировка ТЗ + дихотомический поиск, реализованные на языке 1С начиная с 5000 - 6000 строк уже дают выигрыш в поиске строки!

Я поэтому и добиваюсь от vlf конкретных чисел - размеров и времени построения индекса.

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

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

Я внезапно проникся к теме этой ветке.
Звучать она должна так: критерии выбора ТЗ и ИТ (ValTable добавим?) для построения эффективных решений.
Критериев, правда, много:
  • объем данных
  • количество полей индекса
  • особенности реализации алгоритма (к примеру, случай vlf)
  • необходимость использования специальных методов типа "Пересечение"
  • возможность изучения и модификации исходного кода
    и т.д.

    Я - за возможность выбора, хотя свой выбор давно сделал.
  •   

    De quelle planète es-tu?
    Наверх
     
    IP записан
     
    vlf
    Junior Member
    **
    Отсутствует



    Сообщений: 94
    Зарегистрирован: 27. Января 2007
    Re: к вопросу быстродействия индексированных табли
    Ответ #69 - 31. Января 2007 :: 10:09
    Печать  
    vlf писал(а) 31. Января 2007 :: 07:44:
    Если серьезно, критерии,
    1. ИТЗ имеет явные преимущества, когда нужно в БольшоМ объеме данных найти (НайтиСтроку() УстановитьФильтр() ) данные небольшого объема.


    остальное kms замечательно сказал.

      

    ... истина всегда где-то рядом ...
    Наверх
    www  
    IP записан
     
    vlf
    Junior Member
    **
    Отсутствует



    Сообщений: 94
    Зарегистрирован: 27. Января 2007
    Re: к вопросу быстродействия индексированных табли
    Ответ #70 - 31. Января 2007 :: 10:21
    Печать  
    Цитата:
    Ммм...  Ещё раз: Индексированнаятаблица::ВыбратьСтроку() и ТаблицаЗначений::ПолучитьСтрокупономеру() - это НЕ аналоги!
    Естественно, в ИТ эта операци медленнее чем в ТЗ.

    Именно!

    Цитата:
    А вот если написать ИТ.Получить(10, "ИмяКолонки") - то ещё вопрос, что быстрее.

    Если учесть, что ИТ.ИмяКолонки - тоже вызов некоторой функции, несомненно быстрее.
      

    ... истина всегда где-то рядом ...
    Наверх
    www  
    IP записан
     
    vlf
    Junior Member
    **
    Отсутствует



    Сообщений: 94
    Зарегистрирован: 27. Января 2007
    Re: к вопросу быстродействия индексированных табли
    Ответ #71 - 31. Января 2007 :: 10:31
    Печать  
    ТЗ.Сортировать - (например) 1 минута
    ИТ.ДобавитьИндекс - не мерял, пусть например 5сек.

    Общее время работы с таблицами (пример)
    ТЗ - 1час 50минут
    ИТ - 2часа 30минут.


    Бывают расчеты и по 18 часов
    В этом случае переход на ИТЗ мне "стоит" где-то 5-6 часов

    На двойной выборке, минут 30 экономлю

    Таблица SLOVLEKS, когда была таблицей 1С, писалась 9часов.

    Спасибо ADirks за идею с ТЗ.ПолучитьЗначение() - работает быстрее
      

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


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

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

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


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

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: к вопросу быстродействия индексированных табли
    Ответ #73 - 31. Января 2007 :: 12:04
    Печать  
    vlf писал(а) 31. Января 2007 :: 10:31:
    На двойной выборке, минут 30 экономлю

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

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


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

    Сообщений: 6303
    Местоположение: Москва
    Зарегистрирован: 19. Мая 2006
    Пол: Мужской
    Re: к вопросу быстродействия индексированных табли
    Ответ #74 - 31. Января 2007 :: 12:20
    Печать  
    Для сравнения работы ТЗ и ИТЗ при использовании алгоритма vlf
    я сделаю простую конфу-тест
    Будет две таблицы
    1) Таблица с данными/лексемами - по которой идет простой перебор
    2) Большая Таблица, в которой находятся строки из таблицы 1, без сортировки. В этой таблице производится поиск значений из первой таблицы и перебор всех значений, который соответствуют условию поиска.

    Данных загоню несколько тысяч (1 тыс, 10 тыс, 60 тыс, 100 тыс)

    Генерить таблицы буду так - сначала получу большую таблицу 2, в которой одно из полей имеет случайное значение, далее ее сортирую по этому полю. Для получения таблицы 1 копирую в нее большую таблицу, удаляю часть значений, сортирую по основному полю.
    Все, таблицы готовы, можно выполнять поиск.

    Нормальная схема?
    vlf, что скажешь, подобная схема соответствует твоему алгоритму?

    ЗЫ vlf, и все-таки еще хотелось бы узнать по поводу поиска с помощью ТЗ и ИТЗ не по одной, а двум колонкам и более.
      

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