@dblookup Vs Notesvew.getdocumentbykey(getalldocumentsbykey)

Тема в разделе "Lotus - Программирование", создана пользователем Darker, 22 июл 2010.

  1. Darker

    Darker Гость

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

    1. Традиционный
    Код (LotusScript):
    'view - представление, отсортированное по первому столбцу
    ...
    While Not doc is Nothing
    set findDoc=view.GetDocumentByKey(cstr(doc.Key1(0)))
    myFielvalue=findDoc.MyField
    set doc=col.GetNextDocument(doc)
    Wend
    2. Экспериментальный
    Код (LotusScript):
    ...
    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
     
  2. morpheus

    morpheus скриптописец

    Регистрация:
    7 авг 2006
    Сообщения:
    3.927
    Симпатии:
    0
  3. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    1-й. Если нет особой надобности, то не надо лепить преобразования из одного языка в другой.
     
  4. Klido

    Klido Гость

    из статьи же и следует вроде наглядно, что если даже просто GetDocumentByKey быстрее @DbLookup, то уж никак не будет быстрее вычисление @DbLookup в скрипте...
     
  5. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    быстрее будет - не получать ключ из дока, а брать из индекса вьюшки
    т.е. получать GetEntryByKey и у него ColumnValues(...)
     
  6. Darker

    Darker Гость

    а если нету во вьюхи нужного поля?
    ТОгда уж через свойство .Document....
     
  7. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    На сколько? )) При использовании ViewEntry документ уже закеширован в ней? Если нет, то есть смысл, если да - равнозначно.
     
  8. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    объективных цифр нету, но по ощущениям - быстрее минимум на порядок.
    lmike прав: получение значение непосредственно из индекса - самый шустрый вариант.
     
  9. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А на этот вопрос у кого-нить есть ответ? :what?:
     
  10. turumbay

    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    документ - нет. а значение поля - да.
    речь идет именно о случае, когда нужное поле есть в индексе.
     
  11. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    с докуменнтом из энтриса! всё будет медленнее (это проверялось)
    т.е. получение дока из энтриса медленнее, чем получение дока из колекции, причём существенно
    но в данном случае, этой необходимости нет
    и нужно использовать индекс
    в варианте работы с сервером (не с локальной базой) различие м.б. очень существенным (в разы)
    ссылку я здесь приводил (да и собственный опыт есть)
     
  12. Darker

    Darker Гость

    возможно представление не отображает значение необходимого поля
     
  13. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    и что же ему мешает (кроме странных фантазий девелупера) - не надо выдумывать проблемы и формулировать общие случаи, приведён конкретный код, в нем "ничего" не мешает расширить вьюшку колонкой
    вот здесь While Not doc is Nothing сделать энтрисы
     
  14. Darker

    Darker Гость

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

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Это понятно. Вопрос был именно в том, что если я получаю из вида ентри, то когда инициализируется его свойство .Документ в момент первого обращения в этому свойству или же еще на стадии инициализации объекта ентри.

    Тут правы все стороны :what?: Просто нужно искать оптимальное соотношение наличия инфы и скорости отработки некоторого функционала.
     
  16. lmike

    lmike нет, пердело совершенство
    Команда форума Lotus team

    Регистрация:
    27 авг 2008
    Сообщения:
    6.073
    Симпатии:
    299
    есть такое понятие - ошибки проектирования, и подобная "экономия", чаще всего, оборачивается часами ожидания результатов обработки конечным пользователем...
    Вы в курсе цен на мб, для ХДД, а цена рабочего времени сотрудников?...
    не ну конечно - бывают упертые... разрабы, только для чего задавать вопрос по оптимизации времени, если потом отрицать её необходимость, ссылаясь на малозначимые величины, в контексте обсуждения? :what?:
     
  17. TIA

    TIA :-)
    Lotus team

    Регистрация:
    15 май 2009
    Сообщения:
    790
    Симпатии:
    0
    В момент первого обращения в этому свойству
     
Загрузка...
Похожие Темы - @dblookup Notesvew getdocumentbykey(getalldocumentsbykey)
  1. deeeman
    Ответов:
    10
    Просмотров:
    3.567
  2. PavelT100
    Ответов:
    3
    Просмотров:
    2.338
  3. leiba
    Ответов:
    3
    Просмотров:
    2.278
  4. motogarri
    Ответов:
    7
    Просмотров:
    3.569
  5. Medevic
    Ответов:
    6
    Просмотров:
    3.848

Поделиться этой страницей