Имя: Пароль:
1C
1С v8
Что быстрее? Поиск в таблице значений, соответствии или прямой поиск в базе?
0 Нуф-Нуф
 
14.08.12
18:26
при загрузке из сторонней ИБ последовательно получаются ИД документы и ИД номенклатуры.
в 1с в базе приемнике у справочника Номенклатура есть индексируемый реквизит ИД.
Сейчас поиск происходит через НайтиПоРеквизиту. (засунуть все ид из источника в тз и сделать в запросе соединение со справочником нет возможности).
Замер производительности показал что НайтиПоРеквизиту - самый длительный по времени.

Вопрос. Будет ли быстрее, если предварительно ссылки на номенклатуру и их ИД помесить в таблицу значений и в дальнейшем заместо НайтиПоРеквизиту использовать НайтиСтроку?
Или допустим все поместить в соответствие (ИД - ключ) и так же получать из соответствия?

поидее в случае с коллекциями - работа будет происходить с памятью, а не с многократными считыванием данных из ИБ? размер справочника примерно 50т. элементов оперативной памяти вагон.
1 SUA
 
14.08.12
18:33
может и быстрее... хотя если строк в загрузке немного то простая загрузка 50К элементов в ТЗ/соответствие займет больше времени чем поиск по реквизиту
(засунуть все ид из источника в тз и сделать в запросе соединение со справочником нет возможности - почему? - даже если например дважды источник прочитать?)
2 pumbaEO
 
14.08.12
18:35
У меня в соответствии. В регистре соответствия ИБ приемника и ИБ источника хранится, первый раз идет поиск по регистру и потом в соответствие.
3 Fragster
 
гуру
14.08.12
18:38
нет бы юзать РС, как все делают...
4 Aleksey
 
14.08.12
18:38
Делай через кэш, если в кэши не  нашел, тогда НайтиПоРеквизиту + добавить в кэш
5 Aleksey
 
14.08.12
18:39
(3) а какая разница?
6 Fragster
 
гуру
14.08.12
18:42
(5) в РС тупо меньше данных и индексировать его можно только по колонке ИД из дальней базы. да и делать доп реквизит в типовой я б не стал (кстати в типовых, ЕМНИП регистр и так есть). А искать лучше получив целиком ТЗ из той базы, а потом подцепив к ней левым соединением данные этой (не важно, в РС они или реквизитом в справочнике). НайтиПоеквизиту или по коллекции в цикле - не лучший вариант.
7 Нуф-Нуф
 
14.08.12
18:43
(4) а как добавить в кэш?

З.Ы. не факт что у меня товары по несколько раз считываются. вполне возможно что все ИД встречаются по одному разу за весь обмен... и тогда поидее этот вариант выхлопа не особо даст
8 Нуф-Нуф
 
14.08.12
18:44
(6) да я понимаю что тз и соединение самое оптимальное, но идет считывание хмл, и предварительно я получить ТЗ не могу.
9 pumbaEO
 
14.08.12
18:44
(7) кэш - это соответствие, если в соответствии не нашел, то ищи по реквизиту. Но если у тебя встречаются по одному разу, то без разницы.
10 Нуф-Нуф
 
14.08.12
18:45
(9) а если все-таки сразу поместить весь справочник в соответствие?
11 Fragster
 
гуру
14.08.12
18:46
(8) что мешает преобразовать XML в ТЗ?
12 Fragster
 
гуру
14.08.12
18:47
(11) в группу ТЗ, если идет загрузка документов с их таб частями...
13 Fragster
 
гуру
14.08.12
18:47
(10) делай, как я говорю - будет профит
14 Reset
 
14.08.12
18:48
(10) Разумеется, поиск в соответствии самый быстрый. Вроде даже быстрее чем в индексированной таблице значений, не говоря уже об обращении к бд.
Но тут долгий процесс как раз инициализация этого соотвествия
15 Serginio1
 
14.08.12
18:48
16 Fragster
 
гуру
14.08.12
18:50
к вопросу о кэше - в 8.2 можно сделать общий модуль, который будет автоматом кэшировать возвращаемые значения функций для набора параметров и если там поместить функцию, которая бы искала через НайтиПоРеквизиту или лучше через запрос в таком модуле - то поиск будет осуществляться 1 раз, а потом будет сразу отдаваться резуьлтат. Причем вполне возможно это будет быстрее, чем использование 1совских коллекций для кэширования
17 Aleksey
 
14.08.12
18:51
(16) Не факт. Каждый раз параметры разные, а значит и кэша не будет
18 Нуф-Нуф
 
14.08.12
18:52
(11) т.е. первый раз пробежаться по хмл и получить номенклатуру в ТЗ, а потом снова пробежать по хмл и выполнить уже стандартный механизм?

(14) аха, попробую затестить время инициализации соответствия.


(16) О! а ведь точно! Но опять же, это сработает если большая часть ИД будет повторяться. Если же они будут уникальны - то выхлопа не даст
19 SUA
 
14.08.12
18:52
переделал недавно поиск через соответствие... когда его размер достиг 200К элементов и все это дело надо было переезжать на клиента еще - документ в 10 строк грузился 5 минут
20 Fragster
 
гуру
14.08.12
18:52
(17) ну, хочешь - помести справочник в индексированную ТЗ заранее. только это помещение будет сотни времени съедать. Правильнее сделать вообще без циклов, через (6)
21 Fragster
 
гуру
14.08.12
18:58
(18).1 нет, загрузить весь XML в ТЗ или несколько (по количеству ТЧ документов + шапка) (грубо - то, что ты получить должен в итоге), потом эти ТЗ загрузить в запрос и в нем к ним массово прилепить данные из своей базы. Если что-то не нашлось - там да, надо будет подцепить отдельно.
(18).3 будет не медленнее, чем просто поиск по реквизиту, но без начальной инициализации... Надо смотреть, насколько данные будут повторяться в любом случае
22 Нуф-Нуф
 
14.08.12
19:03
Аха, спасибо за подсказки. Сейчас попробую для начала запрос к справочнику с полями ИД и Ссылка выгрузить в ТЗ и проиндексировать, и уже в ней искать через Найти.
следующий будет НайтиПоРеквизиту в хешируемом модуле
23 Serginio1
 
14.08.12
19:06
(17) Даже не в тз а в масссив. И делай запрос на вхождение реквизита в этот массив. Запихивай в соответствие.
24 Лефмихалыч
 
14.08.12
19:17
(0) я пробовал и так и эдак. Искал по коду, SQL2005, платформа была 8.1. Таблица значений дала прирост в овер 700%.
Причем я даже так сделал: у меня был набор ТЗ, в которых хранились индексированные ссылки. Я сначала искал в ТЗ, если не находит уже делал НайтиПоКоду.
25 ДенисЧ
 
14.08.12
19:19
Лепил через соответствие. Ускорение было заметно даже на глаз.
А Свин меня удвиляет... Это не флейта...
26 Нуф-Нуф
 
14.08.12
19:22
(25) чем удивляю?
27 ДенисЧ
 
14.08.12
19:28
(26) тем, что эта тема поднималась на форуме неоднократно. И мной в том числе.
А поиск вроде как ещё работает.
28 Нуф-Нуф
 
14.08.12
19:31
(27) ну да. чет ступил. обычно 90% поиском нахожу. а тут чет не догадался.
29 H A D G E H O G s
 
14.08.12
20:02
Не понимаю, чем вас так удивил Нуф-Нуф

Вполне нормальный вопрос с ЕГО стороны. Ожидаемый.
30 Нуф-Нуф
 
14.08.12
20:07
(29) твой пост тоже не стал сюрпризом :)
31 Нуф-Нуф
 
14.08.12
20:08
аккумулировал ваши советы, реализовал так:
в начале получаю таблицу, индексирую ее, потом при необходимости ищу в ней соответствие по ИД через хешируемый общий модуль :)
буду тестить результат
32 H A D G E H O G s
 
14.08.12
20:09
(31) Куевый вывод
33 H A D G E H O G s
 
14.08.12
20:10
Ищем в индексированной ТЗ
Нашли - профит
Не нашли - ищем в базе
Дописываем в ТЗ
Профит
34 Нуф-Нуф
 
14.08.12
20:11
(33) если большая часть ИД в обмене уникальна - профита никакого, смотри выше
35 Нуф-Нуф
 
14.08.12
20:12
тем более что инициализация соответствия выполняется за секунды. никакие запросы к иб в виде найтипореквизиту уже не требуются
36 Нуф-Нуф
 
14.08.12
20:13
так что извини чувак, поднять свою самооценку тебе сегодня не получится
37 H A D G E H O G s
 
14.08.12
20:13
(34) Со справочником такое катит, а вот если у тебя План обмена ползает - куй.
1) Памяти не хватит
2) Фиг знаешь, что понадобится.
38 H A D G E H O G s
 
14.08.12
20:14
(36) Если совсем прижмет - забаню. Но пока терпит.
39 Нуф-Нуф
 
14.08.12
20:14
(37) если бы у бабки были яйца, она была бы дедкой
40 Нуф-Нуф
 
14.08.12
20:15
(38) ну кто спорит, рубильник в руках - это такой маленький источник самоудовлетворения. в определенных условиях я бы сам от него не отказался
41 Нуф-Нуф
 
14.08.12
20:16
+(40) в основном для того, чтобы не становиться объектом удовлетворения для других
42 Лефмихалыч
 
14.08.12
20:18
(34) на практике (24) профиту было, хоть *опой жуй
43 Нуф-Нуф
 
14.08.12
20:19
(42) а ты ТЗ сразу инициализировал? или накапливал походу работы обработки через НайтиПоКоду?
44 zmaximka
 
14.08.12
20:24
Девочки, не ссорьтесь
45 Лефмихалыч
 
14.08.12
20:35
(43) я гляжу у тебя серьезный опыт работы в службе поддержки - ты читаешь только первую строку. В (24) написано, что ТЗ набиралась по ходу пьесы. При этом аналитика была почти без бублей
46 Лефмихалыч
 
14.08.12
20:36
(44) ага, тока из всех собравшихся женский ник только у тебя, еслихчо...
47 Нуф-Нуф
 
14.08.12
20:39
(45) "у меня был набор ТЗ, в которых хранились индексированные ссылки", у меня как бы тоже набор в ТЗ :) только сразу
48 Лефмихалыч
 
14.08.12
20:41
(47) пробовал сразу всасывать всё в ТЗ, на всасывание и индексирование чуть больше времени уходило в итоге, а памяти при этом уходило в разы больше - меня жаба задавила
49 Fragster
 
гуру
14.08.12
20:43
почему сразу ко всем данным не прилепить ИДы?
50 Fragster
 
гуру
14.08.12
20:44
вернее ссылки?
51 Serginio1
 
15.08.12
11:01
(0) Я вот сейчас сам озадачился переносом из семерки в восьмерку и решил сделать в 7 ке поле ref в каждом переносимом виде справочников и документов записывая в это поле УникальныйИдентификатор получая например по оле.
И создав описание Схемы опять же через Оле записывать в объекты в XML файл. При этом подходе не нужно ничего искать
когда в документах нужно прописывать ref справочников, документов