Обработка коллекции документов

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

  1. ABarmin

    ABarmin Гость

    Добрый день.

    У меня есть два сервера - на одном хранятся рабочие данные (большие БД, по 100к+ документов в каждой, сервер А), на другом - база для формирования отчетов (выборка данных и формирование табличек, сервер В). С сервера В я соединяюсь с базой данных, которая находится на сервере А, делаю к ней запрос через notesdatabase.search. Запрос в среднем затрагивает 25 тыс. документов. Результаты поиска возвращаются в виде объекта NotesDocumentCollection (метод возвращает их в виде такого объекта). Потом я прохожу по всем этим документам и из определенных полей строю табличку в виде html-страницы, которая потом отдается пользователю.

    Замерял время выполнения этой процедуры. Если сама выборка данных занимается от силы 2-3 минуты, то их вывод затягивается на 2-3 часа. Такое ощущение, что при обращении к каждому документу на сервере А, сервер В их загружает по одному.

    Можно ли как-то результаты поиска все сразу передать с сервера В на сервер А?
     
  2. lmike

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

    Регистрация:
    27 авг 2008
    Сообщения:
    6.083
    Симпатии:
    300
    как неоднократно упоминали, здесь, Search формирует "выборку" по ID, при попытке получить объект - уже скачивается весь док
    вы уверены - что нужно тянуть именно документы?
     
  3. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    для такой модели можно было бы использовать и клиен+сервер, скорость была бы идентична
    заставте всю процедуру формироваться на сервере А

    ко всему прочему HTML формируется как бинарный файл?
     
  4. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    ABarmin ,
    посмотри NotesViewEntryCollection
    плюс, можно формировать большую часть выводимого скрипта еще на уровне представления, но оно станет заметно больше занимать места, да и скорость его обновления зависит от кол-ва представленных в нем данных.

    А еще, предлагаю рассмотреть вариант репликации БД на сервер Б для выполнения манипуляций с "локальной" (для сервера) репликой. Думаю, так также можно выиграть время.
     
  5. ABarmin

    ABarmin Гость

    Перенести формирование на другой сервер не могу, как и выборку - ограничение заказчика, что вся обработка проводится на одном сервере, документы строго на другом.

    html формируется как строка, а затем сохранятся в richtext поле notes-документа.
     
  6. Darker

    Darker Гость

    ABarmin
    Если Ваш код находится в агенте, то есть возможность включить профилирование и выяснить какой Lotus-метод наиболее прожорлив.
     
  7. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    вот она проблема, поиск отобрал колекцию, теперь сервер Б должен по сети пройтись по 100К документов, залезть в каждый и потом сформировать строку

    еще раз говорю что при сервер+клиент будет тоже самое

    нужно избавиться от "сети" всю процедуру по формированию должен делать сервер А или сервер Б но никак не оба иначе этот сететвой трафик постоянно будет есть всё время отчёта
     
  8. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Сделать представление со всеми необходимыми данными в столбцах.
    Отбор документов делать методом notesView.FTSearch.
    Взять все найденные энтрисы notesView.AllEntries.
    Пройтись по ним и получить значение столбцов notesViewEntry.ColumnValues.
     
  9. ABarmin

    ABarmin Гость

    2ToxaRat полностью перенести формирование на один сервер нельзя, так как формирование есть крайне много ресурсов само по себе (затрагивает много документов) и сервер загружен сильно.

    Поэтому я и спрашиваю, после того, как я сделал NotesDatabase.search получившаяся коллекция отправилась на другой сервер или документы будут браться по одному по мере обращения?

    2Medevic - notesView не получится, так как для построения берутся документы более чем по одной форме и по одной базе.
     
  10. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    По одному. lmike написал.

    Добавлено:
    Раз через notesdatabase.search получается, то и через notesView.FTSearch должно.
     
  11. ABarmin

    ABarmin Гость

    search делается несколько раз, сначала по одной форме/базе, затем по другой. Основная загвоздка не во времени выборки, а во времени формирования конечного отчета, т.е. извлечения значений полей из документа.
     
  12. Medevic

    Medevic Что это ? :)
    Lotus team

    Регистрация:
    10 дек 2004
    Сообщения:
    3.346
    Симпатии:
    2
    Методом notesView.FTSearch также можно. Сначала по одной, потом по другой.
    Я понимаю. Поэтому notesViewEntry.ColumnValues будет дёргать не весь документ, а только значения столбцов.
     
  13. ToxaRat

    ToxaRat Чёрный маг
    Lotus team

    Регистрация:
    6 ноя 2007
    Сообщения:
    3.047
    Симпатии:
    18
    поэтому вам и предлагают поднять отдельный сервер, который не занимается обслуживанием пользователей а тянет к себе реплику базы, локально её ворочает и отсылает отчёт
     
  14. Мыш

    Мыш Lotus team
    Lotus team

    Регистрация:
    12 фев 2008
    Сообщения:
    1.021
    Симпатии:
    8
    А нельзя выгрузить на сервер-обработчик уже более-менее готовые данные - например, сформированный по документам коллекции XML-файл или просто текстовый файл? И пусть себе его обрабатывает, зачем именно коллекцию тащить к себе?
     
  15. ABarmin

    ABarmin Гость

    Нет, в том-то и ограничение, что дизайн уже работающей системы менять нельзя, отсюда и такие грабли.
     
  16. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    Грабли от отсутствия опыта. Сделай реплику данных без дизайна на сервер, который выполняет формирование отчета.
    Либо сделай полную реплику на сервер, который выполняет формирование отчета, а рядом на нем же запусти свой репорт и пусть шуршит на "локальной" для сегвера реплике. Тут вообще сложностей никаких!- лишь сменить к какой БД обращаться.
    Можешь, хотя бы, для пробы сделать копию БД на тот сервер Бы, и запустить отчет. Увидишь сколько времени будет строиться. Только, индексы не забудь построить, иначе первые разы будет долго.
     
  17. VladSh

    VladSh начинающий
    Lotus team

    Регистрация:
    11 дек 2009
    Сообщения:
    1.251
    Симпатии:
    2
    Формирование на одном будет на порядок экономнее (как написать, но написать так можно), чем лезть за данными на другие сервера, что само по себя нездраво.

    Если
    тогда значит заказчика вполне устраивает, что
    в чём тогда вопрос?

    2 варианта, которые были, люди здесь уже сказали:
    - репликация + отработка агента на одном сервере (самый простой и надёжный вариант);
    - отработка агента на сервере, на котором имеются данные, формирование готового результата одним файлом (XML) и отправка его на сервер, который запрашивает данные.
     
  18. ABarmin

    ABarmin Гость

    Поддерживаю, что на одном сервере будет даже лучше, но подобные решения не мной принимаются. Ладно, главное, чтобы вообще формировалось.
     
  19. Akupaka

    Akupaka А че я?.. О.о

    Регистрация:
    4 окт 2007
    Сообщения:
    3.373
    Симпатии:
    2
    А ты там для красоты или должен предлагать варианты? ;)
     
  20. ABarmin

    ABarmin Гость

    Я там разработчик, решение отделить одно от другого принимают аналитики и нам поступает только ТЗ - сделать так как мы придумали и все равно, что это в пять раз тормознее, чем было до того, как мы вообще думать начали.
     
Загрузка...
Похожие Темы - Обработка коллекции документов
  1. kolka
    Ответов:
    6
    Просмотров:
    256
  2. anna
    Ответов:
    9
    Просмотров:
    887
  3. FaRReLL
    Ответов:
    0
    Просмотров:
    870
  4. crow1986
    Ответов:
    8
    Просмотров:
    1.878
  5. Dazzel
    Ответов:
    1
    Просмотров:
    950

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