Большой объем данных в память

fedotxxl

Well-Known Member
09.11.2005
614
0
#1
Привет, кто что думает по такому вопросу:

Для хранения настроечных данных мы используем лотусовые документы. Далее пишутся классы обертки на эти документы и методы нахождения этих документов по разным критериям через виды. Соотв. схема такая:
1. Нашли документ по критерию
2. Считали инфу
3. Что-то сделали

Документы редактируются редко, но хранят достаточно большой объем инфы.

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

Зачем это, возможно, нужно:
1. Настроечные документы фактически являются некими элементами дизайна. Если мы создадим их в видем библиотек, то они будут реально являться экземплярами дизайна. Нужно для контроля версионности, напрмер
2. LN на каждый объект создает C++ реализацию => меньше объектов LN, меньше C++ реализаций
3. В теории поиск по list'у в разы быстрее, чем по виду

Недостатки:
1. Непонятно, как будет работать на больших объемах
2. Непонятно, как долго будет все инициализироваться
3. Непонятно сколько памяти будет расходоваться
4. В момент старта необходимо прогрузить все настроечные докуметны в память, хотя потребоваться нам могут лишь часть (думаю, эту проблему можно как-то решить)
 
#2
а как планируеца обеспечивать время жизни объекта( которое предполагается равным времени работы приложения? ) На LS вроде как не получица. Статик java классы, xpages backing beans?
может все-таки на старых добрых профилях?
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#3
ToxaRat, помнится, предлагал хранить настройки в документе иконки БД. UNID у него для всех баз фиксированный и наперёд известный.
 

fedotxxl

Well-Known Member
09.11.2005
614
0
#4
turumbay
Мы для этого используем класс Cache:
объявлен как глобальная переменная в библиотеке, доступ через singleton, в него можно пульнуть объект по ключу и получить обратно. Если пульную объект в этот класс, то доступ к нему будет до момента смерти класса cache (если принудительно ничего не чистить).

Здесь такая заморочка:
Есть 200 документов с данными. Из этих 200 документов можно сгенерировать 200 классов (если не больше). При старте программы все 200 классов должны быть созданы и сохранены в кеше. Библиотека с данными классами будет иметь опупенный размер.
Вопросы по такой реализации прежние
 
#5
turumbay
Мы для этого используем класс Cache:
объявлен как глобальная переменная в библиотеке, доступ через singleton, в него можно пульнуть объект по ключу и получить обратно. Если пульную объект в этот класс, то доступ к нему будет до момента смерти класса cache (если принудительно ничего не чистить).
я туплю, или объект умрет почти моментально??? вьюху переключим и кирдык. документ закрыли - тоже кирдык.
как обеспечивается сохранение состояния этой глобальной переменной? Глобального Declarations для БД вроде еще не придумали?
Здесь такая заморочка:
Есть 200 документов с данными. Из этих 200 документов можно сгенерировать 200 классов (если не больше). При старте программы все 200 классов должны быть созданы и сохранены в кеше. Библиотека с данными классами будет иметь опупенный размер.
насколько опупенный? Война и Мир, первый том, из библиотки Машкова весит меньше мегабайта. У вас больше данных? :)
В конце концов даже пяток метров памяти откушать под цели кэша - никто не заметит.
 

fedotxxl

Well-Known Member
09.11.2005
614
0
#6
turumbay
Вся логика применима для бэграудных агентов. Для UI врядли такое извращение нужно...

насколько опупенный?
На каждый документ нужно написать отдельный класс. На каждое поле документа нужно написать getter. У нас 500 документов, в каждом 100 полей.

500*(100*3) = 150000 строк кода, сгенерированного автоматически. Мне одному кажется, что это глупая идея?)
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#7
Мы для этого используем класс Cache:
объявлен как глобальная переменная в библиотеке, доступ через singleton, в него можно пульнуть объект по ключу и получить обратно. Если пульную объект в этот класс, то доступ к нему будет до момента смерти класса cache (если принудительно ничего не чистить).
Если это класс ЛС, то идея плохая. Каждый открытый документ, представление, агент, использующие этот класс будут создавать свой экземпляр.
 

fedotxxl

Well-Known Member
09.11.2005
614
0
#8
nvy
Повторю еще раз - это для большого бэкграудного агента. Пул объектов, чтобы раз создал и используешь в разных формах, стандартным образом создать нельзя... да и речь не об этом
 

Medevic

Что это ? :)
Lotus team
10.12.2004
3 346
2
36
Россия, Калуга
#9
Кто мешает получить один раз документ и использовать его везде?

Добавлено: Это я к тому, нафига на каждый документ писать свой класс?
Ну и как объект будет жить тоже до сих пор не понятно. Агент весь день выполняется что ли?
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#10
fedotxxl
Настроечный документ — на то он и настроечный, чтобы хранить какие-то параметры настройки системы БЕЗ ПРОГРАММИРОВАНИЯ. Впрочем, есть идея от того же ToxaRat — настройки посредством ДХЛ непосредственно внедряются в исполняемый код. Т.е. есть, допустим, у Вас такой код:
Код:
If Param = 1 Then
Call SubOne()
Else
Call SubTwo()
End If
, где Param хранится в настроечном документе. При сохранении настроечного документа нужная библиотека выгружается в ДХЛ, в зависимости от значения параметра эти пять строчек кода заменяются на Call SubOne() или Call SubTwo(), затем библиотека загружается обратно. Подробности уточнять у автора идеи, сам я такой подход не пробовал.
 

nvyush

Well-Known Member
Lotus team
22.04.2009
2 317
0
48
Подмосковье
#12
Пул объектов, чтобы раз создал и используешь в разных формах, стандартным образом создать нельзя...
Ну, не совсем так — есть очереди сообщений. Но они тут вряд ли сгодятся при таких-то объемах.
 
K

K-Fire

Гость
#13
Я тоже ничего не понял :)

Особенно 500 документов - 500 классов меня добило. Может все таки, 500 экземпляров одного класса? :)
 

Kee_Keekkenen

Well-Known Member
05.09.2006
639
6
Москва
#16
nvy
Повторю еще раз - это для большого бэкграудного агента. Пул объектов, чтобы раз создал и используешь в разных формах, стандартным образом создать нельзя... да и речь не об этом
не понятно, о чем же все-таки речь - бекграундный агент.. а потом формы какие-то ?