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

  • Автор темы ABarmin
  • Дата начала
A

ABarmin

#1
Добрый день.

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

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

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

lmike

нет, пердело совершенство
Lotus team
27.08.2008
6 586
272
#2
как неоднократно упоминали, здесь, Search формирует "выборку" по ID, при попытке получить объект - уже скачивается весь док
вы уверены - что нужно тянуть именно документы?
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#3
на сервере А, сервер В их загружает по одному.
для такой модели можно было бы использовать и клиен+сервер, скорость была бы идентична
заставте всю процедуру формироваться на сервере А

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#4
ABarmin ,
посмотри NotesViewEntryCollection
плюс, можно формировать большую часть выводимого скрипта еще на уровне представления, но оно станет заметно больше занимать места, да и скорость его обновления зависит от кол-ва представленных в нем данных.

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

ABarmin

#5
для такой модели можно было бы использовать и клиен+сервер, скорость была бы идентична
заставте всю процедуру формироваться на сервере А

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

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

Darker

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

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#7
я прохожу по всем этим документам и из определенных полей строю табличку в виде html-страницы, которая потом отдается пользователю.
вот она проблема, поиск отобрал колекцию, теперь сервер Б должен по сети пройтись по 100К документов, залезть в каждый и потом сформировать строку

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

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#8
Сделать представление со всеми необходимыми данными в столбцах.
Отбор документов делать методом notesView.FTSearch.
Взять все найденные энтрисы notesView.AllEntries.
Пройтись по ним и получить значение столбцов notesViewEntry.ColumnValues.
 
A

ABarmin

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

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

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

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#10
Поэтому я и спрашиваю, после того, как я сделал NotesDatabase.search получившаяся коллекция отправилась на другой сервер или документы будут браться по одному по мере обращения?
По одному. lmike написал.

Добавлено:
2Medevic - notesView не получится, так как для построения берутся документы более чем по одной форме и по одной базе.
Раз через notesdatabase.search получается, то и через notesView.FTSearch должно.
 
A

ABarmin

#11
Добавлено:
Раз через notesdatabase.search получается, то и через notesView.FTSearch должно.
search делается несколько раз, сначала по одной форме/базе, затем по другой. Основная загвоздка не во времени выборки, а во времени формирования конечного отчета, т.е. извлечения значений полей из документа.
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
1
#12
search делается несколько раз, сначала по одной форме/базе, затем по другой. Основная загвоздка не во времени выборки, а во времени формирования конечного отчета, т.е. извлечения значений полей из документа.
Методом notesView.FTSearch также можно. Сначала по одной, потом по другой.
Я понимаю. Поэтому notesViewEntry.ColumnValues будет дёргать не весь документ, а только значения столбцов.
 

ToxaRat

Чёрный маг
Lotus team
06.11.2007
3 231
18
#13
2ToxaRat полностью перенести формирование на один сервер нельзя, так как формирование есть крайне много ресурсов само по себе (затрагивает много документов) и сервер загружен сильно.
поэтому вам и предлагают поднять отдельный сервер, который не занимается обслуживанием пользователей а тянет к себе реплику базы, локально её ворочает и отсылает отчёт
 

Мыш

Премиум
12.02.2008
1 097
10
#14
полностью перенести формирование на один сервер нельзя, так как формирование есть крайне много ресурсов само по себе
А нельзя выгрузить на сервер-обработчик уже более-менее готовые данные - например, сформированный по документам коллекции XML-файл или просто текстовый файл? И пусть себе его обрабатывает, зачем именно коллекцию тащить к себе?
 
A

ABarmin

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

Akupaka

А че я?.. О.о
04.10.2007
3 360
1
#16
Нет, в том-то и ограничение, что дизайн уже работающей системы менять нельзя, отсюда и такие грабли.
Грабли от отсутствия опыта. Сделай реплику данных без дизайна на сервер, который выполняет формирование отчета.
Либо сделай полную реплику на сервер, который выполняет формирование отчета, а рядом на нем же запусти свой репорт и пусть шуршит на "локальной" для сегвера реплике. Тут вообще сложностей никаких!- лишь сменить к какой БД обращаться.
Можешь, хотя бы, для пробы сделать копию БД на тот сервер Бы, и запустить отчет. Увидишь сколько времени будет строиться. Только, индексы не забудь построить, иначе первые разы будет долго.
 

VladSh

начинающий
Lotus team
11.12.2009
1 262
6
#17
полностью перенести формирование на один сервер нельзя, так как формирование есть крайне много ресурсов само по себе (затрагивает много документов) и сервер загружен сильно.
Формирование на одном будет на порядок экономнее (как написать, но написать так можно), чем лезть за данными на другие сервера, что само по себя нездраво.

Если
Перенести формирование на другой сервер не могу, как и выборку - ограничение заказчика, что вся обработка проводится на одном сервере, документы строго на другом.
тогда значит заказчика вполне устраивает, что
сама выборка данных занимается от силы 2-3 минуты, то их вывод затягивается на 2-3 часа.
в чём тогда вопрос?

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

ABarmin

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

ABarmin

#20
Я там разработчик, решение отделить одно от другого принимают аналитики и нам поступает только ТЗ - сделать так как мы придумали и все равно, что это в пять раз тормознее, чем было до того, как мы вообще думать начали.