@dblookup Vs Notesvew.getdocumentbykey(getalldocumentsbykey)

  • Автор темы Darker
  • Дата начала
D

Darker

#1
Предположим есть задача, есть коллекция документов. Нужно пройтись по каждому документу этой коллекции и взять по ключу(из представления, в где не так уж часто что-то меняется) другой документ, чтобы получить значения из некоторого поля найденного документа.
есть два способа:

1. Традиционный
Код:
'view - представление, отсортированное по первому столбцу
...
While Not doc is Nothing
set findDoc=view.GetDocumentByKey(cstr(doc.Key1(0)))
myFielvalue=findDoc.MyField
set doc=col.GetNextDocument(doc)
Wend
2. Экспериментальный
Код:
...
While Not doc is Nothing
myFielvalue=Evaluate({@DbLookup("":"ReCache";"MyServer\\My":"MyDB.NSF"; "MyView";"}+cstr(doc.Key1(0))+{";"MyField")})
set doc=col.GetNextDocument(doc)
Wend
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#3
1-й. Если нет особой надобности, то не надо лепить преобразования из одного языка в другой.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#5
быстрее будет - не получать ключ из дока, а брать из индекса вьюшки
т.е. получать GetEntryByKey и у него ColumnValues(...)
 
13.03.2009
625
1
#8
На сколько? )) При использовании ViewEntry документ уже закеширован в ней? Если нет, то есть смысл, если да - равнозначно.
объективных цифр нету, но по ощущениям - быстрее минимум на порядок.
lmike прав: получение значение непосредственно из индекса - самый шустрый вариант.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#11
А на этот вопрос у кого-нить есть ответ? :what?:
с докуменнтом из энтриса! всё будет медленнее (это проверялось)
т.е. получение дока из энтриса медленнее, чем получение дока из колекции, причём существенно
но в данном случае, этой необходимости нет
и нужно использовать индекс
в варианте работы с сервером (не с локальной базой) различие м.б. очень существенным (в разы)
ссылку я здесь приводил (да и собственный опыт есть)
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#13
возможно представление не отображает значение необходимого поля
и что же ему мешает (кроме странных фантазий девелупера) - не надо выдумывать проблемы и формулировать общие случаи, приведён конкретный код, в нем "ничего" не мешает расширить вьюшку колонкой
вот здесь While Not doc is Nothing сделать энтрисы
 
D

Darker

#14
"странные фантазии девелупера" экономят место на диске, за счет невключения в представление лишней информации
 

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#15
документ - нет. а значение поля - да.
речь идет именно о случае, когда нужное поле есть в индексе
Это понятно. Вопрос был именно в том, что если я получаю из вида ентри, то когда инициализируется его свойство .Документ в момент первого обращения в этому свойству или же еще на стадии инициализации объекта ентри.

"странные фантазии девелупера" экономят место на диске, за счет невключения в представление лишней информации
Тут правы все стороны :what?: Просто нужно искать оптимальное соотношение наличия инфы и скорости отработки некоторого функционала.
 

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 601
277
#16
"странные фантазии девелупера" экономят место на диске, за счет невключения в представление лишней информации
есть такое понятие - ошибки проектирования, и подобная "экономия", чаще всего, оборачивается часами ожидания результатов обработки конечным пользователем...
Вы в курсе цен на мб, для ХДД, а цена рабочего времени сотрудников?...
не ну конечно - бывают упертые... разрабы, только для чего задавать вопрос по оптимизации времени, если потом отрицать её необходимость, ссылаясь на малозначимые величины, в контексте обсуждения? :what?: