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

  • Автор темы Автор темы ABarmin
  • Дата начала Дата начала
Ну, если контора нормальная, то проявляй инициативу. Правда, аккуратно, чтобы аналитики потом думали, что это они виноваты ;)
 
Контора нормальная. Но решение разделить приняли до того, как со всеми по советовались. И, видимо, так грамотно все продали, что заказчик уже на радостях все подписал.
 
Но решение разделить приняли до того, как со всеми по советовались
Да что ты прилип к "разделить"? Ну говорят тебе - сделай реплику! ;)
Ты знаком с репликацией? Рабочая база для пользователей будет на сервере А, а БД для сбора данных для отчета на сервере Б. Реплицировать ее достаточно часто, чтобы отчет содержал актуальные данные.
И "разделили", и дикий трафик отчетника убрали! Я думаю, что никогда не поздно обсуждать подобные вопросы.
Поговори с аналитиком, хотя, тут конструктор думать должен, а не аналитик, а тот пусть принимают конечное решение.
Нед так нед.
Но я бы хотя бы попробовал бы сделать копию "локально" на Б и построить отчет, если технически это возможно (например, на совсем третий сервер, сделать тестовую среду). А если будет качественная разница, сможешь говорить аргументами. Но, это, если уверен в себе. Если не уверен, не знаешь как, то лучше не лезть, наверное...
 
Вариант с репликой тоже есть и его рассматривали, но Заказчик так не хочет.
 
>html формируется как строка, а затем сохранятся в richtext поле notes-документа.

Ещё одна проблема в производительности. Notes с большими строками очень медленно работает. Конкатенация к длинной строки малой может многократно превысить время получения и вычитки всех документов коллекции
 
TIA
Кстати, очень правильное замечание.
Я сам выпал в осадок, когда увидел, как долго делается
Код:
Str = Str + "~" + doc.UniversalID 'только как пример
в цикле.
И чем дальше, тем хуже.

ABarmin
Как вариант могу посоветовать всё писать в NotesStream, а потом уже "выплёвывать" текст из него.
 
Все стало значительно лучше, ассоциировал стрим с файлом.

Встала другая проблема, при большой выборке документов и, соответственно, при большом объеме создаваемого текста выскакивает ошибка Out of back-end memory. Может можно как-то принудительно сохранять данные из notesStream в файл чтобы такая ошибка не возникала?
 
ABarmin
Может точно попробуй StringBuffer, как VladSh сказал?
Он плохого не посоветует - это достоверно известно ;)
 
А есть какое-нибудь ограничение на размер NotesStream?
 
ABarmin
Если мне не изменяет память, то нет.
Точнее limited by available memmory.

Кстати, а почему ты решил ассоциировать stream с файлом?

А что-то думал про конструкцию вроде такой:
Код:
dim Stream as NotesStream
Set Stream = session.CraateStream
'цикл
Call Stream.WriteText()
'EO цикл
Call Sream.ReadText 'куда там надо
 
Потому что как раз в это ограничение и упираюсь, что памяти не хватает. Подумал, может в файл ему будет проще все скидывать, чем в памяти держать.
 
Может можно как-то принудительно сохранять данные из notesStream в файл чтобы такая ошибка не возникала?
Ну если идти по этому пути, то при
flag = notesStream.Open( pathname$ [ , charset$ ] )
ты открываешь файл, а при
Call notesStream.Close
Ты его закрываешь, сохраняя при этом.

Правда, потом тебе ничто не мешает открыть его снова и дописать что-то там в конце.
Только после открытия не делай Truncate - тем самым ты сотрёшь содержимое файла.

Вообще я stream'ом ворочал достаточно большие файлы и на такую ошибку не натыкался.
 
Ок, попробую закрывать его время от времени. Но мне кажется, это как-то неправильный выход, но другого пока нет.
 
Строку точно сказать не могу - там вываливается только то, что память закончилась. Но вываливается это в цикле из WriteText.
 
ABarmin
Ты errorhandler какой-либо юзаешь?

В простейшем виде выглядит что-то вроде
Код:
Function Test() as Boolean
On Error Goto Errh

<FUNCTION BODY>

Exit Function
Errh:
Msgbox Error & | in line | & Erl(), 64, |Lotus Notes (| & Lsi_info(2) & |)|
Exit Function
End Function
Он будет показывать, на какой точно строке отвалилось.
 
Такой же почти и юзаю

Код:
	Print {Error "} & Error & {" (} & Err & {) in agent "} & s.CurrentAgent.Name & {" (line } & Erl & {)}
 
Переписал работу с файлом по деревянному, через open fileNum for output - до этого при непонятных обстоятельствах домино падало с ошибкой Windows. Теперь перестало, но памяти все равно не хватает.
 
Мы в соцсетях:

Взломай свой первый сервер и прокачай скилл — Начни игру на HackerLab